From 4c68566c7767e30c920a8a617410c9783eda4855 Mon Sep 17 00:00:00 2001 From: Ruud Date: Thu, 8 Jan 2015 14:59:53 +0100 Subject: [PATCH 1/6] Use new OMGWTFNZB api fix #4471 --- .../media/_base/providers/nzb/omgwtfnzbs.py | 26 +++++++------------ 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/couchpotato/core/media/_base/providers/nzb/omgwtfnzbs.py b/couchpotato/core/media/_base/providers/nzb/omgwtfnzbs.py index bac0614d..21799787 100644 --- a/couchpotato/core/media/_base/providers/nzb/omgwtfnzbs.py +++ b/couchpotato/core/media/_base/providers/nzb/omgwtfnzbs.py @@ -1,13 +1,9 @@ -from urlparse import urlparse, parse_qs -import time - from couchpotato.core.event import fireEvent from couchpotato.core.helpers.encoding import toUnicode, tryUrlencode from couchpotato.core.helpers.rss import RSS from couchpotato.core.helpers.variable import tryInt from couchpotato.core.logger import CPLog from couchpotato.core.media._base.providers.nzb.base import NZBProvider -from dateutil.parser import parse log = CPLog(__name__) @@ -16,8 +12,7 @@ log = CPLog(__name__) class Base(NZBProvider, RSS): urls = { - 'search': 'https://rss.omgwtfnzbs.org/rss-search.php?%s', - 'detail_url': 'https://omgwtfnzbs.org/details.php?id=%s', + 'search': 'https://api.omgwtfnzbs.org/json/?%s', } http_time_between_calls = 1 # Seconds @@ -47,21 +42,18 @@ class Base(NZBProvider, RSS): 'api': self.conf('api_key', default = ''), }) - nzbs = self.getRSSData(self.urls['search'] % params) + nzbs = self.getJsonData(self.urls['search'] % params) for nzb in nzbs: - enclosure = self.getElement(nzb, 'enclosure').attrib - nzb_id = parse_qs(urlparse(self.getTextElement(nzb, 'link')).query).get('id')[0] - results.append({ - 'id': nzb_id, - 'name': toUnicode(self.getTextElement(nzb, 'title')), - 'age': self.calculateAge(int(time.mktime(parse(self.getTextElement(nzb, 'pubDate')).timetuple()))), - 'size': tryInt(enclosure['length']) / 1024 / 1024, - 'url': enclosure['url'], - 'detail_url': self.urls['detail_url'] % nzb_id, - 'description': self.getTextElement(nzb, 'description') + 'id': nzb.get('nzbid'), + 'name': toUnicode(nzb.get('release')), + 'age': self.calculateAge(tryInt(nzb.get('usenetage'))), + 'size': tryInt(nzb.get('sizebytes')) / 1024 / 1024, + 'url': nzb.get('getnzb'), + 'detail_url': nzb.get('details'), + 'description': nzb.get('weblink') }) From 2c080fec3d3a2fdcf63de5b641ad92dd088ae1e3 Mon Sep 17 00:00:00 2001 From: Ruud Date: Thu, 8 Jan 2015 16:56:38 +0100 Subject: [PATCH 2/6] TorrentBytes nbsp issue fix #4026 --- couchpotato/core/media/_base/providers/torrent/torrentbytes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/couchpotato/core/media/_base/providers/torrent/torrentbytes.py b/couchpotato/core/media/_base/providers/torrent/torrentbytes.py index 8e2becb2..fadd2ea0 100644 --- a/couchpotato/core/media/_base/providers/torrent/torrentbytes.py +++ b/couchpotato/core/media/_base/providers/torrent/torrentbytes.py @@ -56,7 +56,7 @@ class Base(TorrentProvider): full_id = link['href'].replace('details.php?id=', '') torrent_id = full_id[:6] - name = toUnicode(link.contents[0]) + name = toUnicode(link.contents[0].encode('ISO-8859-1')).strip() results.append({ 'id': torrent_id, From e7b089edf596294e8a3bf8b14981517f8171e038 Mon Sep 17 00:00:00 2001 From: Ruud Date: Fri, 9 Jan 2015 20:13:17 +0100 Subject: [PATCH 3/6] Give better XML issues --- couchpotato/core/media/_base/providers/base.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/couchpotato/core/media/_base/providers/base.py b/couchpotato/core/media/_base/providers/base.py index 587545c8..1062a1a8 100644 --- a/couchpotato/core/media/_base/providers/base.py +++ b/couchpotato/core/media/_base/providers/base.py @@ -94,6 +94,8 @@ class Provider(Plugin): try: data = XMLTree.fromstring(ss(data)) return self.getElements(data, item_path) + except XMLTree.ParseError: + log.error('Invalid XML returned, check "%s" manually for issues', url) except: log.error('Failed to parsing %s: %s', (self.getName(), traceback.format_exc())) From 1827c2e4cd43de2f5e74d6076ab6a8d2520e2af7 Mon Sep 17 00:00:00 2001 From: Ruud Date: Sat, 10 Jan 2015 12:17:30 +0100 Subject: [PATCH 4/6] Don't parse omgwtfnzb if no results are returned --- .../media/_base/providers/nzb/omgwtfnzbs.py | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/couchpotato/core/media/_base/providers/nzb/omgwtfnzbs.py b/couchpotato/core/media/_base/providers/nzb/omgwtfnzbs.py index 21799787..ea5f90f7 100644 --- a/couchpotato/core/media/_base/providers/nzb/omgwtfnzbs.py +++ b/couchpotato/core/media/_base/providers/nzb/omgwtfnzbs.py @@ -44,17 +44,18 @@ class Base(NZBProvider, RSS): nzbs = self.getJsonData(self.urls['search'] % params) - for nzb in nzbs: + if isinstance(nzbs, list): + for nzb in nzbs: - results.append({ - 'id': nzb.get('nzbid'), - 'name': toUnicode(nzb.get('release')), - 'age': self.calculateAge(tryInt(nzb.get('usenetage'))), - 'size': tryInt(nzb.get('sizebytes')) / 1024 / 1024, - 'url': nzb.get('getnzb'), - 'detail_url': nzb.get('details'), - 'description': nzb.get('weblink') - }) + results.append({ + 'id': nzb.get('nzbid'), + 'name': toUnicode(nzb.get('release')), + 'age': self.calculateAge(tryInt(nzb.get('usenetage'))), + 'size': tryInt(nzb.get('sizebytes')) / 1024 / 1024, + 'url': nzb.get('getnzb'), + 'detail_url': nzb.get('details'), + 'description': nzb.get('weblink') + }) config = [{ From 132fa12ef4d5f12493e2c60ae1d2afbd2e67ed1d Mon Sep 17 00:00:00 2001 From: Ruud Date: Sat, 10 Jan 2015 12:17:47 +0100 Subject: [PATCH 5/6] Late list not loaded on home --- couchpotato/core/media/movie/charts/static/charts.js | 3 ++- couchpotato/core/media/movie/suggestion/static/suggest.js | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/couchpotato/core/media/movie/charts/static/charts.js b/couchpotato/core/media/movie/charts/static/charts.js index 3d70f7f8..d70a1c64 100644 --- a/couchpotato/core/media/movie/charts/static/charts.js +++ b/couchpotato/core/media/movie/charts/static/charts.js @@ -44,11 +44,12 @@ var Charts = new Class({ if( Cookie.read('suggestions_charts_menu_selected') === 'charts'){ self.show(); - self.fireEvent.delay(0, self, 'created'); } else self.el.hide(); + self.fireEvent.delay(0, self, 'created'); + }, fill: function(json){ diff --git a/couchpotato/core/media/movie/suggestion/static/suggest.js b/couchpotato/core/media/movie/suggestion/static/suggest.js index ca4b07c2..ace7f387 100644 --- a/couchpotato/core/media/movie/suggestion/static/suggest.js +++ b/couchpotato/core/media/movie/suggestion/static/suggest.js @@ -51,8 +51,8 @@ var SuggestList = new Class({ self.show(); else self.hide(); - - self.fireEvent('created'); + + self.fireEvent.delay(0, self, 'created'); }, From 12148217a292c2836a8bed28de7c97cf0cf70ec7 Mon Sep 17 00:00:00 2001 From: Ruud Date: Sat, 10 Jan 2015 13:41:17 +0100 Subject: [PATCH 6/6] Log failed notification --- couchpotato/core/notifications/core/main.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/couchpotato/core/notifications/core/main.py b/couchpotato/core/notifications/core/main.py index 771d9696..4c39fb77 100644 --- a/couchpotato/core/notifications/core/main.py +++ b/couchpotato/core/notifications/core/main.py @@ -149,16 +149,15 @@ class CoreNotifier(Notification): def notify(self, message = '', data = None, listener = None): if not data: data = {} + n = { + '_t': 'notification', + 'time': int(time.time()), + } + try: db = get_db() - data['notification_type'] = listener if listener else 'unknown' - - n = { - '_t': 'notification', - 'time': int(time.time()), - 'message': toUnicode(message) - } + n['message'] = toUnicode(message) if data.get('sticky'): n['sticky'] = True @@ -171,7 +170,7 @@ class CoreNotifier(Notification): return True except: - log.error('Failed notify: %s', traceback.format_exc()) + log.error('Failed notify "%s": %s', (n, traceback.format_exc())) def frontend(self, type = 'notification', data = None, message = None): if not data: data = {}