diff --git a/couchpotato/core/helpers/request.py b/couchpotato/core/helpers/request.py index 6ffb7d5..09ee6b8 100644 --- a/couchpotato/core/helpers/request.py +++ b/couchpotato/core/helpers/request.py @@ -2,6 +2,7 @@ from couchpotato.core.helpers.variable import natcmp from flask.globals import current_app from flask.helpers import json from libs.werkzeug.urls import url_decode +from urllib import unquote_plus import flask import re @@ -24,7 +25,7 @@ def getParams(): for item in nested: if item is nested[-1]: - current[item] = value + current[item] = unquote_plus(value) else: try: current[item] @@ -33,7 +34,7 @@ def getParams(): current = current[item] else: - temp[param] = value + temp[param] = unquote_plus(value) return dictToList(temp) @@ -54,7 +55,10 @@ def dictToList(params): return new def getParam(attr, default = None): - return getattr(flask.request, 'args').get(attr, default) + try: + return unquote_plus(getattr(flask.request, 'args').get(attr, default)) + except: + return None def padded_jsonify(callback, *args, **kwargs): content = str(callback) + '(' + json.dumps(dict(*args, **kwargs)) + ')' diff --git a/couchpotato/core/notifications/core/static/notification.js b/couchpotato/core/notifications/core/static/notification.js index f4026d4..be42b06 100644 --- a/couchpotato/core/notifications/core/static/notification.js +++ b/couchpotato/core/notifications/core/static/notification.js @@ -9,6 +9,7 @@ var NotificationBase = new Class({ // Listener App.addEvent('load', self.startInterval.bind(self)); + App.addEvent('unload', self.stopTimer.bind(self)); self.addEvent('notification', self.notify.bind(self)) // Add test buttons to settings page diff --git a/couchpotato/core/plugins/updater/static/updater.js b/couchpotato/core/plugins/updater/static/updater.js index f7268b2..623bacf 100644 --- a/couchpotato/core/plugins/updater/static/updater.js +++ b/couchpotato/core/plugins/updater/static/updater.js @@ -4,6 +4,10 @@ var UpdaterBase = new Class({ var self = this; App.addEvent('load', self.info.bind(self, 1000)) + App.addEvent('unload', function(){ + if(self.timer) + clearTimeout(self.timer); + }); }, info: function(timeout){ diff --git a/couchpotato/core/plugins/userscript/main.py b/couchpotato/core/plugins/userscript/main.py index 188790f..34ab6b5 100644 --- a/couchpotato/core/plugins/userscript/main.py +++ b/couchpotato/core/plugins/userscript/main.py @@ -1,12 +1,12 @@ from couchpotato import index from couchpotato.api import addApiView -from couchpotato.core.event import fireEvent +from couchpotato.core.event import fireEvent, addEvent from couchpotato.core.helpers.request import getParam, jsonified from couchpotato.core.helpers.variable import isDict from couchpotato.core.logger import CPLog from couchpotato.core.plugins.base import Plugin from flask.globals import request -from flask.helpers import url_for +from flask.helpers import url_for, make_response log = CPLog(__name__) @@ -18,20 +18,26 @@ class Userscript(Plugin): addApiView('userscript', self.iFrame) addApiView('userscript.add_via_url', self.getViaUrl) + addEvent('userscript.get_version', self.getVersion) + def getExtension(self): params = { 'includes': fireEvent('userscript.get_includes', merge = True), 'excludes': fireEvent('userscript.get_excludes', merge = True), 'version': self.getVersion(), - 'host': '%s%suserscript/' % (request.host_url.rstrip('/'), url_for('api.index')), + 'api': '%suserscript/' % url_for('api.index').lstrip('/'), + 'host': request.host_url, } - return self.renderTemplate(__file__, 'template.js', **params) + response = make_response(self.renderTemplate(__file__, 'template.js', **params)) + response.headers['Content-Type'] = 'text/javascript' + return response + return def getVersion(self): - versions = fireEvent('userscript.get_version') + versions = fireEvent('userscript.get_provider_version') version = 0 for v in versions: diff --git a/couchpotato/core/plugins/userscript/static/userscript.js b/couchpotato/core/plugins/userscript/static/userscript.js index c03016d..a904bce 100644 --- a/couchpotato/core/plugins/userscript/static/userscript.js +++ b/couchpotato/core/plugins/userscript/static/userscript.js @@ -7,7 +7,7 @@ Page.Userscript = new Class({ options: { 'onOpened': function(){ - App.stopLoadTimer(); + App.fireEvent('unload'); App.getBlock('header').hide(); } }, @@ -43,4 +43,71 @@ Page.Userscript = new Class({ } -}); \ No newline at end of file +}); + +var UserscriptSettingTab = new Class({ + + tab: '', + content: '', + + initialize: function(){ + var self = this; + + App.addEvent('load', self.addSettings.bind(self)) + + }, + + addSettings: function(){ + var self = this; + + self.settings = App.getPage('Settings') + self.settings.addEvent('create', function(){ + var tab = self.settings.createTab('userscript', { + 'label': 'Userscript', + 'name': 'userscript' + }); + + self.tab = tab.tab; + self.content = tab.content; + + self.createUserscript(); + + }); + + }, + + createUserscript: function(){ + var self = this; + + + self.settings.createGroup({ + 'label': 'Install the Userscript' + }).inject(self.content).adopt( + new Element('a', { + 'text': 'Install userscript', + 'href': Api.createUrl('userscript.get')+'?couchpotato.user.js', + 'normalhref': true + }) + ); + + } + +}); + +window.addEvent('domready', function(){ + new UserscriptSettingTab(); +}); + +window.addEvent('load', function(){ + var your_version = $(document.body).get('data-userscript_version') + latest_version = App.getOption('userscript_version') + key = 'cp_version_check', + checked_already = Cookie.read(key); + + if(your_version < latest_version && checked_already < latest_version){ + if(confirm("Update to the latest Userscript?\nYour version: " + your_version + ', new version: ' + latest_version )){ + document.location = Api.getOption('url')+'userscript.get/?couchpotato.user.js'; + } + Cookie.write(key, latest_version, {duration: 100}); + } +}); diff --git a/couchpotato/core/plugins/userscript/template.js b/couchpotato/core/plugins/userscript/template.js index 7c1b0c2..7dbd4ea 100644 --- a/couchpotato/core/plugins/userscript/template.js +++ b/couchpotato/core/plugins/userscript/template.js @@ -1,16 +1,20 @@ // ==UserScript== // @name CouchPotato UserScript // @description Add movies like a real CouchPotato +// @version {{version}} // @include {{host}}* {% for include in includes %} // @include {{include}}{% endfor %} {% for exclude in excludes %} // @exclude {{exclude}}{% endfor %} +// @exclude {{host}}{{api.rstrip('/')}}* + // ==/UserScript== var version = {{version}}, - cpLocation = '{{host}}'; + host = '{{host}}'; + api = '{{api}}'; function create() { switch (arguments.length) { @@ -40,7 +44,7 @@ function create() { if (typeof GM_addStyle == 'undefined'){ GM_addStyle = function(css) { - var head = document.getElementsByTagName('head')[0], + var head = document.getElementsByTagName('head')[0], style = document.createElement('style'); if (!head) return; @@ -53,53 +57,56 @@ if (typeof GM_addStyle == 'undefined'){ // Styles GM_addStyle('\ - #cpPopup { opacity: 0.5; width:200px; font-family: "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif; -moz-border-radius-topleft: 6px; -moz-border-radius-topright: 6px; -webkit-border-top-left-radius: 6px; -webkit-border-top-right-radius: 6px; -moz-box-shadow: 0 0 20px rgba(0,0,0,0.5); -webkit-box-shadow: 0 0 20px rgba(0,0,0,0.5); position:fixed; z-index:9999; bottom:0; right:0; font-size:15px; margin: 0 20px; display: block; background:#f5f5f5; } \ - #cpPopup:hover { opacity: 1; } \ - #cpPopup a#addTo { cursor:pointer; text-align:center; text-decoration:none; color: #000; display:block; padding:15px 0 10px; } \ - #cpPopup a#closeBtn { cursor:pointer; float: right; padding:10px; } \ - #cpPopup a img { vertical-align: middle; } \ - #cpPopup a:hover { color:#000; } \ - #cpPopup iframe{ background:#f5f5f5; margin:6px; height:70px; width:188px; overflow:hidden; border:none; } \ + #cp_popup { font-family: "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif; -moz-border-radius-topleft: 6px; -moz-border-radius-bottomleft: 6px; -webkit-border-top-left-radius: 6px; -webkit-border-bottom-left-radius: 6px; -moz-box-shadow: 0 0 20px rgba(0,0,0,0.5); -webkit-box-shadow: 0 0 20px rgba(0,0,0,0.5); position:fixed; z-index:9999; bottom:0; right:0; font-size:15px; margin: 20px 0; display: block; background:#4E5969; } \ + #cp_popup:hover { } \ + #cp_popup a#add_to { cursor:pointer; text-align:center; text-decoration:none; color: #000; display:block; padding:5px 0 5px 5px; } \ + #cp_popup a#close_button { cursor:pointer; float: right; padding:120px 10px 10px; } \ + #cp_popup a img { vertical-align: middle; } \ + #cp_popup a:hover { color:#000; } \ + #cp_popup iframe{ background:#4E5969; margin:6px 0 2px 6px; height:140px; width:450px; overflow:hidden; border:none; } \ '); -var movieImg = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAZCAYAAABQDyyRAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA+9JREFUeNrMVklIXFkUPVWWY5cDccIpMQ444YCi7UJ3KrpUxAkURRAFW6GdMCI0ooKuxIWCIkrc6FYMcYogrgxoEHFeRFRE42w5D/X73dv1i4pUOiGmkly4/u9779c979x7z3sKSZLwK02JX2y/BYCXwmeESybyGV0Mo6YQNTBzf38f09/fj7GxMRwcHPyQnTk5OSEpKQm5ublQqVTvxdCfXwIg9fT0YGBgAO7u7qipqUFAQACurq7Q29uLoaEhXhgdHY3q6mqo1WocHx+jpaUF8/PzPJeamor8/HwKhKWlJbS2tmJ/f5/nsrKyUFhYSK8vhG8+BmD2j7Dm5mZotVqcnp5ibW0N4eHhcHFxQUREBM7OznhsZ2cHu7u7iI2Nhb29PQOi8b29PaysrECpVCIqKgpubm4IDAzE7OwsLi8vsbW1hYyMDIrVK/yTUQDd3d2oqKjgjygFc3NzCAsLg7OzMyIjI3F+fo7V1VVsbm5ie3sbMTExsLW15acMYmFhAbe3twza1dUVwcHB0Gg0WF9fR15eHsXqNAZA3wUJCQkoKipiGilIQ0MDf2xmZsYUJicn87rp6Wmm+OLigpmglIWEhPDc4OAg+vr6cH19zSwUFBR8tVa4BhITE03aauPj4/QIE75gFMBPanmjAFT05ycxYNRU8svo6CiGh4fR2dkJoQvw8PBAXV0dfHx8cHNzw+MjIyO8Ni4uDpWVlbCxseGibWpqwuLiIs9lZ2cjJycHlpaW3DlTU1N6afhfABMTE+jq6uLgnp6eqK+v5+BU2aQTcvD4+HhUVVXB2toaJycnrAdy8MzMTNYDasnl5WUeIzA6eyWc0GiNdkFbWxvvlIKKzvxs57IYGQYnMWpsbNSLEQWibqHgBIiA2dnZIS0tDbW1taxlwm0o3YYp1zNwd3fHSlheXs4MUO+TElJaZCUsKyuDubk5q9xjJaTd02/ISkgAqR1JCw4PD+XNSiZvQysrKygUClhYWDCrpAX+/v7o6OjQiOkA4RpdGi4/Y+Cp5uDggJKSEj5HiAkCQSmU2T06OlILuadikURqbgXAt+K9khlIT0/nc+ApRqceSe63/FZQUBDa29vp9W9mICUlhU/DJ10slP/Vs6+vLx9gZNRRGxsb3JJeXl76td7e3vrPiIEPYmEEtdrk5CRR9V0AHB0dUVpaitDQUD0gOmGJEV0NUAEeGVxU3gn/CwLAS7qUSCYwUf2SOOSk4uJi+vdYuJtwtfA/6AQgpxR81N1WnIU//4EKbP7w8PBGPJ9REersTHTchaE8G3bBvs6fZHJLiwBW4vakJfr9/Py4JIx+IFNhAqf6em2QkT7hysfr/hVgAIhbr+v/xmSzAAAAAElFTkSuQmCC'; -var closeImg = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA5ElEQVR42tRTQYoEIQwsl/2Bl3gQoY9eBKEf5kvyG8G7h4Z+S38gIu5lp5lZ2R7YPm1BDhZJSFWiGmPgDj5wE7cbfD4/mBkAHprUj9yTTyn9OsGIMSLG+Fxwxc8SiAi9d4QQHskjhIDeO4jorQcq5wwiQmsN3nt479FaAxEh5zxJmyZIKalSClprL1FKQUpJXZr4DBH52xqZeRhjICKw1sJaCxGBMQbMPN41GFpriAicc6i1otYK5xxEBFrraQuThGVZAADbtp2amXms6woAOI7j0gO17/t5MN+HNfEvBf//M30NAKe7aRqUOIlfAAAAAElFTkSuQmCC'; +var cp_icon = 'data:image/png;base64,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'; +var close_img = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA5ElEQVR42tRTQYoEIQwsl/2Bl3gQoY9eBKEf5kvyG8G7h4Z+S38gIu5lp5lZ2R7YPm1BDhZJSFWiGmPgDj5wE7cbfD4/mBkAHprUj9yTTyn9OsGIMSLG+Fxwxc8SiAi9d4QQHskjhIDeO4jorQcq5wwiQmsN3nt479FaAxEh5zxJmyZIKalSClprL1FKQUpJXZr4DBH52xqZeRhjICKw1sJaCxGBMQbMPN41GFpriAicc6i1otYK5xxEBFrraQuThGVZAADbtp2amXms6woAOI7j0gO17/t5MN+HNfEvBf//M30NAKe7aRqUOIlfAAAAAElFTkSuQmCC'; var osd = function(){ var navbar, newElement; - var iFrame = create('iframe', { - 'src': cpLocation + "userscript.add_via_url/?url=" + escape(document.location), + var iframe = create('iframe', { + 'src': host + api + "?url=" + escape(document.location.href), 'frameborder': 0, 'scrolling': 'no' }); - var addToText = ''; - var popupId = 'cpPopup'; - var popup = create('div', { - 'id': popupId, - 'innerHTML': addToText + 'id': 'cp_popup' }); - var addButton = create('a', { - 'innerHTML': 'Add to CouchPotato', - 'id': 'addTo', + var add_button = create('a', { + 'innerHTML': '', + 'id': 'add_to', 'onclick': function(){ popup.innerHTML = ''; popup.appendChild(create('a', { - 'innerHTML': '', - 'id': 'closeBtn', + 'innerHTML': '', + 'id': 'close_button', 'onclick': function(){ popup.innerHTML = ''; - popup.appendChild(addButton); + popup.appendChild(add_button); } })); - popup.appendChild(iFrame) + popup.appendChild(iframe) } }); - popup.appendChild(addButton); + popup.appendChild(add_button); document.body.parentNode.insertBefore(popup, document.body); }; -osd(); \ No newline at end of file +var setVersion = function(){ + document.body.setAttribute('data-userscript_version', version) +}; + +if(document.location.href.indexOf(host) == -1) + osd(); +else + setVersion(); \ No newline at end of file diff --git a/couchpotato/core/providers/nzb/x264/main.py b/couchpotato/core/providers/nzb/x264/main.py index aba7f64..c8eb1cb 100644 --- a/couchpotato/core/providers/nzb/x264/main.py +++ b/couchpotato/core/providers/nzb/x264/main.py @@ -60,8 +60,6 @@ class X264(NZBProvider): 'check_nzb': False, } - print new['name'] - new['score'] = fireEvent('score.calculate', new, movie, single = True) is_correct_movie = fireEvent('searcher.correct_movie', nzb = new, movie = movie, quality = quality, diff --git a/couchpotato/core/providers/userscript/base.py b/couchpotato/core/providers/userscript/base.py index ec7693f..e23a540 100644 --- a/couchpotato/core/providers/userscript/base.py +++ b/couchpotato/core/providers/userscript/base.py @@ -17,8 +17,7 @@ class UserscriptBase(Plugin): def __init__(self): addEvent('userscript.get_includes', self.getInclude) addEvent('userscript.get_excludes', self.getExclude) - addEvent('userscript.get_version', self.getVersion) - + addEvent('userscript.get_provider_version', self.getVersion) addEvent('userscript.get_movie_via_url', self.belongsTo) def search(self, name, year = None): diff --git a/couchpotato/core/providers/userscript/imdb/main.py b/couchpotato/core/providers/userscript/imdb/main.py index 06f6f16..5e5ae91 100644 --- a/couchpotato/core/providers/userscript/imdb/main.py +++ b/couchpotato/core/providers/userscript/imdb/main.py @@ -1,7 +1,6 @@ -from beautifulsoup import BeautifulSoup from couchpotato.core.event import fireEvent +from couchpotato.core.helpers.variable import getImdb from couchpotato.core.providers.userscript.base import UserscriptBase -import re class IMDB(UserscriptBase): @@ -9,16 +8,4 @@ class IMDB(UserscriptBase): includes = ['http*://*.imdb.com/title/tt*', 'http*://imdb.com/title/tt*'] def getMovie(self, url): - - data = self.urlopen(url) - - html = BeautifulSoup(data) - headers = html.findAll('h5') - - # Don't add TV show - for head in headers: - if 'seasons' in head.lower(): - return 'IMDB url is a TV Show' - - identifier = re.search('(?Ptt[0-9{7}]+)', url).group('id') - return fireEvent('movie.info', identifier = identifier, merge = True) + return fireEvent('movie.info', identifier = getImdb(url), merge = True) diff --git a/couchpotato/static/scripts/couchpotato.js b/couchpotato/static/scripts/couchpotato.js index 2c5a02c..e1649ef 100644 --- a/couchpotato/static/scripts/couchpotato.js +++ b/couchpotato/static/scripts/couchpotato.js @@ -29,7 +29,7 @@ var CouchPotato = new Class({ else self.openPage(window.location.pathname); - self.c.addEvent('click:relay(a:not([target=_blank]))', self.pushState.bind(self)); + self.c.addEvent('click:relay(a:not([target=_blank]):not([normalhref=true]))', self.pushState.bind(self)); }, getOption: function(name){ @@ -72,16 +72,9 @@ var CouchPotato = new Class({ $(pg).inject(self.content); }); - self.load_timer = (function(){ - self.fireEvent('load'); - }).delay(1000); + self.fireEvent('load'); }, - - stopLoadTimer: function(){ - if(this.load_timer) - clearInterval(this.load_timer); - }, openPage: function(url) { var self = this; diff --git a/couchpotato/templates/_desktop.html b/couchpotato/templates/_desktop.html index 463ab18..95fb1cd 100644 --- a/couchpotato/templates/_desktop.html +++ b/couchpotato/templates/_desktop.html @@ -18,7 +18,7 @@ - + @@ -66,7 +66,8 @@ 'args': '{{ env.get('args') }}', 'options': '{{ env.get('options') }}', 'app_dir': '{{ env.get('app_dir') }}', - 'data_dir': '{{ env.get('data_dir') }}' + 'data_dir': '{{ env.get('data_dir') }}', + 'userscript_version': {{ fireEvent('userscript.get_version', single = True)|safe }} }); //Wizard.start.delay(100, Wizard);