From cfc49e286bdbaa4e611a68b5b6fc30e0cf1f52cb Mon Sep 17 00:00:00 2001 From: Ruud Date: Sun, 8 Jun 2014 11:57:53 +0200 Subject: [PATCH 1/8] Allowed datadir giving false positive. fix #3399 --- couchpotato/core/_base/_core.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/couchpotato/core/_base/_core.py b/couchpotato/core/_base/_core.py index 91cb97e9..1171478d 100644 --- a/couchpotato/core/_base/_core.py +++ b/couchpotato/core/_base/_core.py @@ -8,7 +8,7 @@ import webbrowser from couchpotato.api import addApiView from couchpotato.core.event import fireEvent, addEvent -from couchpotato.core.helpers.variable import cleanHost, md5 +from couchpotato.core.helpers.variable import cleanHost, md5, isSubFolder from couchpotato.core.logger import CPLog from couchpotato.core.plugins.base import Plugin from couchpotato.environment import Env @@ -71,7 +71,7 @@ class Core(Plugin): return value if value and len(value) > 3 else uuid4().hex def checkDataDir(self): - if Env.get('app_dir') in Env.get('data_dir'): + if isSubFolder(Env.get('data_dir'), Env.get('app_dir')): log.error('You should NOT use your CouchPotato directory to save your settings in. Files will get overwritten or be deleted.') return True From 1b1c77d225c0aa96fe1690df717365bda19fe6cd Mon Sep 17 00:00:00 2001 From: Ruud Date: Tue, 10 Jun 2014 11:13:18 +0200 Subject: [PATCH 2/8] Use magnetprovider for yify #3406 --- couchpotato/core/media/_base/providers/torrent/yify.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/couchpotato/core/media/_base/providers/torrent/yify.py b/couchpotato/core/media/_base/providers/torrent/yify.py index 82413fc5..b1380cd8 100644 --- a/couchpotato/core/media/_base/providers/torrent/yify.py +++ b/couchpotato/core/media/_base/providers/torrent/yify.py @@ -2,13 +2,13 @@ import traceback from couchpotato.core.helpers.variable import tryInt, getIdentifier from couchpotato.core.logger import CPLog -from couchpotato.core.media._base.providers.torrent.base import TorrentProvider +from couchpotato.core.media._base.providers.torrent.base import TorrentMagnetProvider log = CPLog(__name__) -class Base(TorrentProvider): +class Base(TorrentMagnetProvider): urls = { 'test': '%s/api', From f5f3cfba50f26e49e8d6d5edd758543ad8505234 Mon Sep 17 00:00:00 2001 From: Ruud Date: Tue, 10 Jun 2014 11:14:19 +0200 Subject: [PATCH 3/8] More general logs --- couchpotato/core/media/_base/providers/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/couchpotato/core/media/_base/providers/base.py b/couchpotato/core/media/_base/providers/base.py index b13b279d..6bcf3332 100644 --- a/couchpotato/core/media/_base/providers/base.py +++ b/couchpotato/core/media/_base/providers/base.py @@ -181,7 +181,7 @@ class YarrProvider(Provider): try: return self.urlopen(url, headers = {'User-Agent': Env.getIdentifier()}, show_error = False) except: - log.error('Failed getting nzb from %s: %s', (self.getName(), traceback.format_exc())) + log.error('Failed getting release from %s: %s', (self.getName(), traceback.format_exc())) return 'try_next' From 2769fc28d323d3218c0d0589b01f0ca22f226141 Mon Sep 17 00:00:00 2001 From: Ruud Date: Tue, 10 Jun 2014 13:40:51 +0200 Subject: [PATCH 4/8] Catch RecordNotFound error. fix #3373 --- couchpotato/core/media/_base/media/main.py | 33 +++++++++++++--------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/couchpotato/core/media/_base/media/main.py b/couchpotato/core/media/_base/media/main.py index 6da14565..c1fdd92b 100644 --- a/couchpotato/core/media/_base/media/main.py +++ b/couchpotato/core/media/_base/media/main.py @@ -1,6 +1,7 @@ import traceback from string import ascii_lowercase +from CodernityDB.database import RecordNotFound from couchpotato import tryInt, get_db from couchpotato.api import addApiView from couchpotato.core.event import fireEvent, fireEventAsync, addEvent @@ -119,25 +120,31 @@ class MediaPlugin(MediaBase): def get(self, media_id): - db = get_db() + try: + db = get_db() - imdb_id = getImdb(str(media_id)) + imdb_id = getImdb(str(media_id)) - media = None - if imdb_id: - media = db.get('media', 'imdb-%s' % imdb_id, with_doc = True)['doc'] - else: - media = db.get('id', media_id) + media = None + if imdb_id: + media = db.get('media', 'imdb-%s' % imdb_id, with_doc = True)['doc'] + else: + media = db.get('id', media_id) - if media: + if media: - # Attach category - try: media['category'] = db.get('id', media.get('category_id')) - except: pass + # Attach category + try: media['category'] = db.get('id', media.get('category_id')) + except: pass - media['releases'] = fireEvent('release.for_media', media['_id'], single = True) + media['releases'] = fireEvent('release.for_media', media['_id'], single = True) - return media + return media + + except RecordNotFound: + log.error('Media with id "%s" not found', media_id) + except: + raise def getView(self, id = None, **kwargs): From 17ba9ee96b7ad097382215d3c24ef5c63b2a307f Mon Sep 17 00:00:00 2001 From: Ruud Date: Tue, 10 Jun 2014 13:54:31 +0200 Subject: [PATCH 5/8] Allow full library refresh interval. fix #2807 --- couchpotato/core/plugins/manage.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/couchpotato/core/plugins/manage.py b/couchpotato/core/plugins/manage.py index 54683c85..5b1cf0ef 100644 --- a/couchpotato/core/plugins/manage.py +++ b/couchpotato/core/plugins/manage.py @@ -52,6 +52,20 @@ class Manage(Plugin): if not Env.get('dev') and self.conf('startup_scan'): addEvent('app.load', self.updateLibraryQuick) + addEvent('app.load', self.setCrons) + + # Enable / disable interval + addEvent('setting.save.manage.library_refresh_interval.after', self.setCrons) + + def setCrons(self): + + fireEvent('schedule.remove', 'manage.update_library') + refresh = tryInt(self.conf('library_refresh_interval')) + if refresh > 0: + fireEvent('schedule.interval', 'manage.update_library', self.updateLibrary, hours = refresh, single = True) + + return True + def getProgress(self, **kwargs): return { 'progress': self.in_progress @@ -162,6 +176,10 @@ class Manage(Plugin): used_files[release_file] = release del used_files + # Break if CP wants to shut down + if self.shuttingDown(): + break + Env.prop(last_update_key, time.time()) except: log.error('Failed updating library: %s', (traceback.format_exc())) @@ -308,6 +326,14 @@ config = [{ 'advanced': True, 'description': 'Do a quick scan on startup. On slow systems better disable this.', }, + { + 'label': 'Full library refresh', + 'name': 'library_refresh_interval', + 'type': 'int', + 'default': 0, + 'advanced': True, + 'description': 'Do a full scan every X hours. (0 is disabled)', + }, ], }, ], From 36d82253891bad27191c96a83104c906d1cc6a32 Mon Sep 17 00:00:00 2001 From: Ruud Date: Tue, 10 Jun 2014 21:02:48 +0200 Subject: [PATCH 6/8] Trigger search change on paste. fix #3416 --- couchpotato/core/media/_base/search/static/search.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/couchpotato/core/media/_base/search/static/search.js b/couchpotato/core/media/_base/search/static/search.js index 1892ad1e..a7cd3640 100644 --- a/couchpotato/core/media/_base/search/static/search.js +++ b/couchpotato/core/media/_base/search/static/search.js @@ -13,6 +13,9 @@ Block.Search = new Class({ self.input = new Element('input', { 'placeholder': 'Search & add a new media', 'events': { + 'input': self.keyup.bind(self), + 'paste': self.keyup.bind(self), + 'change': self.keyup.bind(self), 'keyup': self.keyup.bind(self), 'focus': function(){ if(focus_timer) clearTimeout(focus_timer); From 699c562d3446985d6b39d016e0f1f366266ec7f3 Mon Sep 17 00:00:00 2001 From: Ruud Date: Tue, 10 Jun 2014 22:47:23 +0200 Subject: [PATCH 7/8] Return default resolution if nothing found --- couchpotato/core/plugins/scanner.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/couchpotato/core/plugins/scanner.py b/couchpotato/core/plugins/scanner.py index 2b8d1bd1..b75f0bcc 100644 --- a/couchpotato/core/plugins/scanner.py +++ b/couchpotato/core/plugins/scanner.py @@ -850,7 +850,9 @@ class Scanner(Plugin): if key in filename.lower() and key != 'default': return self.resolutions[key] except: - return self.resolutions['default'] + pass + + return self.resolutions['default'] def getGroup(self, file): try: From d7f6fad3dddb12e05785143219edc90515263faf Mon Sep 17 00:00:00 2001 From: Ruud Date: Tue, 10 Jun 2014 22:51:15 +0200 Subject: [PATCH 8/8] Unicode filenames before saving release. fix #3383 --- couchpotato/core/plugins/release/main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/couchpotato/core/plugins/release/main.py b/couchpotato/core/plugins/release/main.py index d84f3941..0d22c165 100644 --- a/couchpotato/core/plugins/release/main.py +++ b/couchpotato/core/plugins/release/main.py @@ -7,7 +7,7 @@ from CodernityDB.database import RecordDeleted from couchpotato import md5, get_db from couchpotato.api import addApiView from couchpotato.core.event import fireEvent, addEvent -from couchpotato.core.helpers.encoding import ss, toUnicode, sp +from couchpotato.core.helpers.encoding import toUnicode, sp from couchpotato.core.helpers.variable import getTitle from couchpotato.core.logger import CPLog from couchpotato.core.plugins.base import Plugin @@ -143,7 +143,7 @@ class Release(Plugin): }) # Empty out empty file groups - release['files'] = dict((k, v) for k, v in group['files'].items() if v) + release['files'] = dict((k, [toUnicode(x) for x in v]) for k, v in group['files'].items() if v) db.update(release) fireEvent('media.restatus', media['_id'])