From f0f843f746feb3e7363cad8bcf3e16cb85c05ffc Mon Sep 17 00:00:00 2001 From: mano3m Date: Fri, 30 Aug 2013 12:15:28 +0200 Subject: [PATCH 1/9] Add release.update event Proof of concept commit. It updates the database and calls movie.update.id to refresh the entire movie in the frontend. It would be better to crease a static js file in the release folder and add release functionality there including updating one release only. --- .../media/movie/_base/static/movie.actions.js | 11 ----- couchpotato/core/plugins/release/main.py | 41 ++++++++++++++++--- couchpotato/core/plugins/renamer/main.py | 35 +++++----------- 3 files changed, 45 insertions(+), 42 deletions(-) diff --git a/couchpotato/core/media/movie/_base/static/movie.actions.js b/couchpotato/core/media/movie/_base/static/movie.actions.js index e9f6141f..542287fa 100644 --- a/couchpotato/core/media/movie/_base/static/movie.actions.js +++ b/couchpotato/core/media/movie/_base/static/movie.actions.js @@ -397,17 +397,6 @@ MA.Release = new Class({ 'data': { 'id': release.id }, - 'onComplete': function(){ - var el = release.el; - if(el && (el.hasClass('failed') || el.hasClass('ignored'))){ - el.removeClass('failed').removeClass('ignored'); - el.getElement('.release_status').set('text', 'available'); - } - else if(el) { - el.addClass('ignored'); - el.getElement('.release_status').set('text', 'ignored'); - } - } }) }, diff --git a/couchpotato/core/plugins/release/main.py b/couchpotato/core/plugins/release/main.py index 46857adf..fe41d06e 100644 --- a/couchpotato/core/plugins/release/main.py +++ b/couchpotato/core/plugins/release/main.py @@ -10,12 +10,21 @@ from sqlalchemy.orm import joinedload_all from sqlalchemy.sql.expression import and_, or_ import os import traceback +import time log = CPLog(__name__) class Release(Plugin): + default_movie_dict = { + 'profile': {'types': {'quality': {}}}, + 'releases': {'status': {}, 'quality': {}, 'files':{}, 'info': {}}, + 'library': {'titles': {}, 'files':{}}, + 'files': {}, + 'status': {} + } + def __init__(self): addEvent('release.add', self.add) @@ -47,6 +56,7 @@ class Release(Plugin): addEvent('release.for_movie', self.forMovie) addEvent('release.delete', self.delete) addEvent('release.clean', self.clean) + addEvent('release.update', self.update_status) def add(self, group): @@ -159,8 +169,7 @@ class Release(Plugin): rel = db.query(Relea).filter_by(id = id).first() if rel: ignored_status, failed_status, available_status = fireEvent('status.get', ['ignored', 'failed', 'available'], single = True) - rel.status_id = available_status.get('id') if rel.status_id in [ignored_status.get('id'), failed_status.get('id')] else ignored_status.get('id') - db.commit() + self.update_status(id, available_status if rel.status_id in [ignored_status.get('id'), failed_status.get('id')] else ignored_status) return { 'success': True @@ -199,14 +208,12 @@ class Release(Plugin): if success: db.expunge_all() - rel = db.query(Relea).filter_by(id = id).first() # Get release again + rel = db.query(Relea).filter_by(id = id).first() # Get release again @RuudBurger why do we need to get it again?? if rel.status_id != done_status.get('id'): - rel.status_id = snatched_status.get('id') - db.commit() + fireEvent('release.update', id = id, status = snatched_status, single = True) fireEvent('notify.frontend', type = 'release.download', data = True, message = 'Successfully snatched "%s"' % item['name']) - return { 'success': success } @@ -241,3 +248,25 @@ class Release(Plugin): 'success': True } + def update_status(self, id = None, status = None): + + db = get_session() + + rel = db.query(Relea).filter_by(id = id).first() + if rel and status and rel.status_id != status.get('id'): + + item = {} + for info in rel.info: + item[info.identifier] = info.value + + #update status in Db + log.debug('Marking release %s as %s', (item['name'], status.get("label"))) + rel.status_id = status.get('id') + rel.last_edit = int(time.time()) + db.commit() + + #Notify frontend + fireEvent('notify.frontend', type = 'release.download', data = True, message = '"%s" updated to %s' % (item['name'], status.get("label"))) + + #Update all movie info as there is no release update function + fireEvent('notify.frontend', type = 'movie.update.%s' % rel.movie.id, data = rel.movie.to_dict(self.default_movie_dict)) diff --git a/couchpotato/core/plugins/renamer/main.py b/couchpotato/core/plugins/renamer/main.py index ad7df1cf..6a070f01 100755 --- a/couchpotato/core/plugins/renamer/main.py +++ b/couchpotato/core/plugins/renamer/main.py @@ -395,14 +395,8 @@ class Renamer(Plugin): break elif release.status_id is snatched_status.get('id'): if release.quality.id is group['meta_data']['quality']['id']: - log.debug('Marking release as downloaded') - try: - release.status_id = downloaded_status.get('id') - release.last_edit = int(time.time()) - except Exception, e: - log.error('Failed marking release as finished: %s %s', (e, traceback.format_exc())) - - db.commit() + # Set the release to downloaded + fireEvent('release.update', id = release.id, status = downloaded_status, single = True) # Remove leftover files if not remove_leftovers: # Don't remove anything @@ -677,7 +671,6 @@ Remove it if you want it to be renamed (again, or at least let it try again) try: for rel in rels: rel_dict = rel.to_dict({'info': {}}) - movie_dict = fireEvent('movie.get', rel.movie_id, single = True) # check status @@ -712,26 +705,22 @@ Remove it if you want it to be renamed (again, or at least let it try again) # Remove the downloading tag self.untagDir(item['folder'], 'downloading') - rel.status_id = seeding_status.get('id') - rel.last_edit = int(time.time()) - db.commit() + # Set the release to seeding + fireEvent('release.update', id = rel.id, status = seeding_status, single = True) # Scan and set the torrent to paused if required item.update({'pause': True, 'scan': True, 'process_complete': False}) scan_items.append(item) else: - if rel.status_id != seeding_status.get('id'): - rel.status_id = seeding_status.get('id') - rel.last_edit = int(time.time()) - db.commit() + # Set the release to seeding + fireEvent('release.update', id = rel.id, status = seeding_status, single = True) #let it seed log.debug('%s is seeding with ratio: %s', (item['name'], item['seed_ratio'])) elif item['status'] == 'failed': fireEvent('download.remove_failed', item, single = True) - rel.status_id = failed_status.get('id') - rel.last_edit = int(time.time()) - db.commit() + # Set the release to failed + fireEvent('release.update', id = rel.id, status = failed_status, single = True) if self.conf('next_on_failed'): fireEvent('movie.searcher.try_next_release', movie_id = rel.movie_id) @@ -743,18 +732,14 @@ Remove it if you want it to be renamed (again, or at least let it try again) if rel.status_id == seeding_status.get('id'): if rel.movie.status_id == done_status.get('id'): # Set the release to done as the movie has already been renamed - rel.status_id = downloaded_status.get('id') - rel.last_edit = int(time.time()) - db.commit() + fireEvent('release.update', id = rel.id, status = downloaded_status, single = True) # Allow the downloader to clean-up item.update({'pause': False, 'scan': False, 'process_complete': True}) scan_items.append(item) else: # Set the release to snatched so that the renamer can process the release as if it was never seeding - rel.status_id = snatched_status.get('id') - rel.last_edit = int(time.time()) - db.commit() + fireEvent('release.update', id = rel.id, status = snatched_status, single = True) # Scan and Allow the downloader to clean-up item.update({'pause': False, 'scan': True, 'process_complete': True}) From 1bddadf3a4809ef72156517d6e645ce6cf0f09ea Mon Sep 17 00:00:00 2001 From: mano3m Date: Fri, 30 Aug 2013 13:16:15 +0200 Subject: [PATCH 2/9] clean-up searcher --- couchpotato/core/media/_base/searcher/main.py | 16 +++------------- couchpotato/core/plugins/release/main.py | 3 --- 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/couchpotato/core/media/_base/searcher/main.py b/couchpotato/core/media/_base/searcher/main.py index f09be64b..662ed80f 100644 --- a/couchpotato/core/media/_base/searcher/main.py +++ b/couchpotato/core/media/_base/searcher/main.py @@ -60,7 +60,7 @@ class Searcher(SearcherBase): if downloader_enabled: - snatched_status = fireEvent('status.get', 'snatched', single = True) + snatched_status, done_status, active_status = fireEvent('status.get', ['snatched', 'done', 'active'], single = True) # Download movie to temp filedata = None @@ -79,9 +79,7 @@ class Searcher(SearcherBase): rls = db.query(Release).filter_by(identifier = md5(data['url'])).first() if rls: renamer_enabled = Env.setting('enabled', 'renamer') - - done_status = fireEvent('status.get', 'done', single = True) - rls.status_id = done_status.get('id') if not renamer_enabled else snatched_status.get('id') + fireEvent('release.update', id = rls.id, status = done_status if not renamer_enabled else snatched_status, single = True) # Save download-id info if returned if isinstance(download_result, dict): @@ -100,20 +98,12 @@ class Searcher(SearcherBase): # If renamer isn't used, mark movie done if not renamer_enabled: - active_status = fireEvent('status.get', 'active', single = True) - done_status = fireEvent('status.get', 'done', single = True) try: if movie['status_id'] == active_status.get('id'): for profile_type in movie['profile']['types']: if profile_type['quality_id'] == rls.quality.id and profile_type['finish']: - log.info('Renamer disabled, marking movie as finished: %s', log_movie) - - # Mark release done - rls.status_id = done_status.get('id') - rls.last_edit = int(time.time()) - db.commit() - # Mark movie done + log.info('Renamer disabled, marking movie as finished: %s', log_movie) mvie = db.query(Movie).filter_by(id = movie['id']).first() mvie.status_id = done_status.get('id') mvie.last_edit = int(time.time()) diff --git a/couchpotato/core/plugins/release/main.py b/couchpotato/core/plugins/release/main.py index fe41d06e..0466a19e 100644 --- a/couchpotato/core/plugins/release/main.py +++ b/couchpotato/core/plugins/release/main.py @@ -210,9 +210,6 @@ class Release(Plugin): db.expunge_all() rel = db.query(Relea).filter_by(id = id).first() # Get release again @RuudBurger why do we need to get it again?? - if rel.status_id != done_status.get('id'): - fireEvent('release.update', id = id, status = snatched_status, single = True) - fireEvent('notify.frontend', type = 'release.download', data = True, message = 'Successfully snatched "%s"' % item['name']) return { 'success': success From a2cb0ec8adbac5b7ae2802d51531c86d9064b960 Mon Sep 17 00:00:00 2001 From: mano3m Date: Sat, 31 Aug 2013 10:18:41 +0200 Subject: [PATCH 3/9] frontend release.update --- .../core/media/movie/_base/static/movie.actions.js | 10 +++++++++- couchpotato/core/plugins/release/main.py | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/couchpotato/core/media/movie/_base/static/movie.actions.js b/couchpotato/core/media/movie/_base/static/movie.actions.js index 542287fa..6dca1141 100644 --- a/couchpotato/core/media/movie/_base/static/movie.actions.js +++ b/couchpotato/core/media/movie/_base/static/movie.actions.js @@ -241,7 +241,6 @@ MA.Release = new Class({ } }) ).inject(self.release_container); - release['el'] = item; if(status.identifier == 'ignored' || status.identifier == 'failed' || status.identifier == 'snatched'){ @@ -251,6 +250,15 @@ MA.Release = new Class({ else if(!self.next_release && status.identifier == 'available'){ self.next_release = release; } + + App.addEvent('release.update.'+release.id, function(notification){ + var new_status=Status.get(notification.data); + release.el.className='item '+new_status.identifier; + var status_el=release.el.getElement('.release_status'); + status_el.className='release_status '+new_status.identifier; + status_el.set('text', new_status.identifier); + }); + }); if(self.last_release) diff --git a/couchpotato/core/plugins/release/main.py b/couchpotato/core/plugins/release/main.py index 0466a19e..2c1e2f54 100644 --- a/couchpotato/core/plugins/release/main.py +++ b/couchpotato/core/plugins/release/main.py @@ -266,4 +266,4 @@ class Release(Plugin): fireEvent('notify.frontend', type = 'release.download', data = True, message = '"%s" updated to %s' % (item['name'], status.get("label"))) #Update all movie info as there is no release update function - fireEvent('notify.frontend', type = 'movie.update.%s' % rel.movie.id, data = rel.movie.to_dict(self.default_movie_dict)) + fireEvent('notify.frontend', type = 'release.update.%s' % rel.id, data = status.get('id')) From d11f9d26c007076443000162fc4235c14762123b Mon Sep 17 00:00:00 2001 From: mano3m Date: Sat, 31 Aug 2013 22:24:02 +0200 Subject: [PATCH 4/9] Add missing status --- .../core/media/movie/_base/static/movie.css | 1 + couchpotato/core/plugins/renamer/main.py | 26 ++++++++++++------- couchpotato/core/plugins/status/main.py | 1 + 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/couchpotato/core/media/movie/_base/static/movie.css b/couchpotato/core/media/movie/_base/static/movie.css index 0200417c..0b3162e3 100644 --- a/couchpotato/core/media/movie/_base/static/movie.css +++ b/couchpotato/core/media/movie/_base/static/movie.css @@ -426,6 +426,7 @@ .movies .data .quality .available { background-color: #578bc3; } .movies .data .quality .failed { background-color: #a43d34; } + .movies .data .quality .missing { background-color: #a43d34; } .movies .data .quality .snatched { background-color: #a2a232; } .movies .data .quality .seeding { background-color: #0a6819; } .movies .data .quality .done { diff --git a/couchpotato/core/plugins/renamer/main.py b/couchpotato/core/plugins/renamer/main.py index 6a070f01..344fe55f 100755 --- a/couchpotato/core/plugins/renamer/main.py +++ b/couchpotato/core/plugins/renamer/main.py @@ -650,12 +650,13 @@ Remove it if you want it to be renamed (again, or at least let it try again) self.checking_snatched = True - snatched_status, ignored_status, failed_status, done_status, seeding_status, downloaded_status = \ - fireEvent('status.get', ['snatched', 'ignored', 'failed', 'done', 'seeding', 'downloaded'], single = True) + snatched_status, ignored_status, failed_status, done_status, seeding_status, downloaded_status, missing_status = \ + fireEvent('status.get', ['snatched', 'ignored', 'failed', 'done', 'seeding', 'downloaded', 'missing'], single = True) db = get_session() rels = db.query(Release).filter_by(status_id = snatched_status.get('id')).all() rels.extend(db.query(Release).filter_by(status_id = seeding_status.get('id')).all()) + rels.extend(db.query(Release).filter_by(status_id = missing_status.get('id')).all()) scan_items = [] scan_required = False @@ -692,11 +693,16 @@ Remove it if you want it to be renamed (again, or at least let it try again) log.debug('Found %s: %s, time to go: %s', (item['name'], item['status'].upper(), timeleft)) if item['status'] == 'busy': + # Set the release to snatched if it was missing before + fireEvent('release.update', id = rel.id, status = snatched_status, single = True) + # Tag folder if it is in the 'from' folder and it will not be processed because it is still downloading if item['folder'] and self.conf('from') in item['folder']: self.tagDir(item['folder'], 'downloading') elif item['status'] == 'seeding': + # Set the release to seeding + fireEvent('release.update', id = rel.id, status = seeding_status, single = True) #If linking setting is enabled, process release if self.conf('file_action') != 'move' and not rel.movie.status_id == done_status.get('id') and self.statusInfoComplete(item): @@ -705,23 +711,19 @@ Remove it if you want it to be renamed (again, or at least let it try again) # Remove the downloading tag self.untagDir(item['folder'], 'downloading') - # Set the release to seeding - fireEvent('release.update', id = rel.id, status = seeding_status, single = True) - # Scan and set the torrent to paused if required item.update({'pause': True, 'scan': True, 'process_complete': False}) scan_items.append(item) else: - # Set the release to seeding - fireEvent('release.update', id = rel.id, status = seeding_status, single = True) - #let it seed log.debug('%s is seeding with ratio: %s', (item['name'], item['seed_ratio'])) + elif item['status'] == 'failed': - fireEvent('download.remove_failed', item, single = True) # Set the release to failed fireEvent('release.update', id = rel.id, status = failed_status, single = True) + fireEvent('download.remove_failed', item, single = True) + if self.conf('next_on_failed'): fireEvent('movie.searcher.try_next_release', movie_id = rel.movie_id) elif item['status'] == 'completed': @@ -746,6 +748,9 @@ Remove it if you want it to be renamed (again, or at least let it try again) scan_items.append(item) else: + # Set the release to snatched if it was missing before + fireEvent('release.update', id = rel.id, status = snatched_status, single = True) + # Remove the downloading tag self.untagDir(item['folder'], 'downloading') @@ -761,6 +766,9 @@ Remove it if you want it to be renamed (again, or at least let it try again) if not found: log.info('%s not found in downloaders', nzbname) + # Set the release to missing + fireEvent('release.update', id = rel.id, status = missing_status, single = True) + except: log.error('Failed checking for release in downloader: %s', traceback.format_exc()) diff --git a/couchpotato/core/plugins/status/main.py b/couchpotato/core/plugins/status/main.py index 7546c651..b3b37bdc 100644 --- a/couchpotato/core/plugins/status/main.py +++ b/couchpotato/core/plugins/status/main.py @@ -24,6 +24,7 @@ class StatusPlugin(Plugin): 'available': 'Available', 'suggest': 'Suggest', 'seeding': 'Seeding', + 'missing': 'Missing', } status_cached = {} From 0c6c172d6af56d083a52dc10d3c701cecda347fb Mon Sep 17 00:00:00 2001 From: mano3m Date: Sat, 31 Aug 2013 23:48:38 +0200 Subject: [PATCH 5/9] Update movie quality status colour and text It isnt perfect this way. I think we need to add a sepperate function to do this and call that from both when CPS is loading the page and when it updates a release (e.g. just rebuild the icons) --- .../core/media/movie/_base/static/movie.actions.js | 13 +++++++++++++ couchpotato/core/media/movie/_base/static/movie.js | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/couchpotato/core/media/movie/_base/static/movie.actions.js b/couchpotato/core/media/movie/_base/static/movie.actions.js index 6dca1141..2a979574 100644 --- a/couchpotato/core/media/movie/_base/static/movie.actions.js +++ b/couchpotato/core/media/movie/_base/static/movie.actions.js @@ -252,11 +252,24 @@ MA.Release = new Class({ } App.addEvent('release.update.'+release.id, function(notification){ + var q = self.movie.quality.getElement('.q_id'+ release.quality_id), + status = Status.get(release.status_id); + var new_status=Status.get(notification.data); + release.status_id = new_status.id release.el.className='item '+new_status.identifier; + var status_el=release.el.getElement('.release_status'); status_el.className='release_status '+new_status.identifier; status_el.set('text', new_status.identifier); + + if(!q && (new_status.identifier == 'snatched' || new_status.identifier == 'seeding' || new_status.identifier == 'done')) + var q = self.addQuality(release.quality_id); + + if (new_status && q && !q.hasClass(new_status.identifier)){ + q.removeClass(status.identifier).addClass(new_status.identifier); + q.set('title', q.get('title').replace(status.label, new_status.label)); + } }); }); diff --git a/couchpotato/core/media/movie/_base/static/movie.js b/couchpotato/core/media/movie/_base/static/movie.js index 6defc2ad..a865325b 100644 --- a/couchpotato/core/media/movie/_base/static/movie.js +++ b/couchpotato/core/media/movie/_base/static/movie.js @@ -185,7 +185,7 @@ var Movie = new Class({ var q = self.quality.getElement('.q_id'+ release.quality_id), status = Status.get(release.status_id); - if(!q && (status.identifier == 'snatched' || status.identifier == 'done')) + if(!q && (status.identifier == 'snatched' || status.identifier == 'seeding' || status.identifier == 'done')) var q = self.addQuality(release.quality_id) if (status && q && !q.hasClass(status.identifier)){ From 516447a1048470433e10efdb6ac657464f9d5f06 Mon Sep 17 00:00:00 2001 From: mano3m Date: Sun, 1 Sep 2013 00:30:11 +0200 Subject: [PATCH 6/9] Remove movie_dict --- couchpotato/core/plugins/release/main.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/couchpotato/core/plugins/release/main.py b/couchpotato/core/plugins/release/main.py index 2c1e2f54..97e350c5 100644 --- a/couchpotato/core/plugins/release/main.py +++ b/couchpotato/core/plugins/release/main.py @@ -17,14 +17,6 @@ log = CPLog(__name__) class Release(Plugin): - default_movie_dict = { - 'profile': {'types': {'quality': {}}}, - 'releases': {'status': {}, 'quality': {}, 'files':{}, 'info': {}}, - 'library': {'titles': {}, 'files':{}}, - 'files': {}, - 'status': {} - } - def __init__(self): addEvent('release.add', self.add) From 27fdbff619b6df5bee97544f8fed31bb389af1fd Mon Sep 17 00:00:00 2001 From: mano3m Date: Thu, 5 Sep 2013 18:49:19 +0200 Subject: [PATCH 7/9] Set missing to ignored after 1 week --- couchpotato/core/plugins/renamer/main.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/couchpotato/core/plugins/renamer/main.py b/couchpotato/core/plugins/renamer/main.py index 344fe55f..7e2fdbcc 100755 --- a/couchpotato/core/plugins/renamer/main.py +++ b/couchpotato/core/plugins/renamer/main.py @@ -766,8 +766,13 @@ Remove it if you want it to be renamed (again, or at least let it try again) if not found: log.info('%s not found in downloaders', nzbname) - # Set the release to missing - fireEvent('release.update', id = rel.id, status = missing_status, single = True) + #Check status if already missing and for how long, if > 1 week, set to ignored else to missing + if rel.status_id == missing_status.get('id'): + if rel.last_edit < int(time.time()) - 7*24*60*60: + fireEvent('release.update', id = rel.id, status = ignored_status, single = True) + else: + # Set the release to missing + fireEvent('release.update', id = rel.id, status = missing_status, single = True) except: log.error('Failed checking for release in downloader: %s', traceback.format_exc()) From 7c5616cc79ecb092a712eb8aa1d829013930b183 Mon Sep 17 00:00:00 2001 From: mano3m Date: Fri, 6 Sep 2013 23:03:12 +0200 Subject: [PATCH 8/9] fix colour order --- .../core/media/movie/_base/static/movie.css | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/couchpotato/core/media/movie/_base/static/movie.css b/couchpotato/core/media/movie/_base/static/movie.css index 0b3162e3..c72eb136 100644 --- a/couchpotato/core/media/movie/_base/static/movie.css +++ b/couchpotato/core/media/movie/_base/static/movie.css @@ -419,23 +419,25 @@ } .movies .data .quality .available, - .movies .data .quality .snatched { + .movies .data .quality .snatched, + .movies .data .quality .seeding { opacity: 1; cursor: pointer; } .movies .data .quality .available { background-color: #578bc3; } - .movies .data .quality .failed { background-color: #a43d34; } - .movies .data .quality .missing { background-color: #a43d34; } + .movies .data .quality .failed, + .movies .data .quality .missing, + .movies .data .quality .ignored { background-color: #a43d34; } .movies .data .quality .snatched { background-color: #a2a232; } - .movies .data .quality .seeding { background-color: #0a6819; } .movies .data .quality .done { background-color: #369545; opacity: 1; } + .movies .data .quality .seeding { background-color: #0a6819; } .movies .data .quality .finish { background-image: url('../images/sprite.png'); - background-repeat: no-repeat; + background-repeat: no-repeat; background-position: 0 2px; padding-left: 14px; background-size: 14px @@ -647,7 +649,7 @@ margin-top: 25px; } } - + .trailer_container.hide { height: 0 !important; } @@ -1030,7 +1032,7 @@ .movies .progress > div .folder { display: inline-block; padding: 5px 20px 5px 0; - white-space: nowrap; + white-space: nowrap; text-overflow: ellipsis; overflow: hidden; width: 85%; From 0876d1ff8e6f88e5eb40f656ba4e7b863d58b186 Mon Sep 17 00:00:00 2001 From: Ruud Date: Mon, 30 Sep 2013 20:52:04 +0200 Subject: [PATCH 9/9] Rename release.update to update_status --- couchpotato/core/media/_base/searcher/main.py | 2 +- .../media/movie/_base/static/movie.actions.js | 36 ++++++++++--------- couchpotato/core/plugins/release/main.py | 12 +++---- couchpotato/core/plugins/renamer/main.py | 20 +++++------ 4 files changed, 35 insertions(+), 35 deletions(-) diff --git a/couchpotato/core/media/_base/searcher/main.py b/couchpotato/core/media/_base/searcher/main.py index 662ed80f..934a1472 100644 --- a/couchpotato/core/media/_base/searcher/main.py +++ b/couchpotato/core/media/_base/searcher/main.py @@ -79,7 +79,7 @@ class Searcher(SearcherBase): rls = db.query(Release).filter_by(identifier = md5(data['url'])).first() if rls: renamer_enabled = Env.setting('enabled', 'renamer') - fireEvent('release.update', id = rls.id, status = done_status if not renamer_enabled else snatched_status, single = True) + fireEvent('release.update_status', rls.id, status = done_status if not renamer_enabled else snatched_status, single = True) # Save download-id info if returned if isinstance(download_result, dict): diff --git a/couchpotato/core/media/movie/_base/static/movie.actions.js b/couchpotato/core/media/movie/_base/static/movie.actions.js index 2a979574..9dd6bdfe 100644 --- a/couchpotato/core/media/movie/_base/static/movie.actions.js +++ b/couchpotato/core/media/movie/_base/static/movie.actions.js @@ -250,27 +250,29 @@ MA.Release = new Class({ else if(!self.next_release && status.identifier == 'available'){ self.next_release = release; } + + var update_handle = function(notification) { + var q = self.movie.quality.getElement('.q_id' + release.quality_id), + status = Status.get(release.status_id), + new_status = Status.get(notification.data); + + release.status_id = new_status.id + release.el.set('class', 'item ' + new_status.identifier); - App.addEvent('release.update.'+release.id, function(notification){ - var q = self.movie.quality.getElement('.q_id'+ release.quality_id), - status = Status.get(release.status_id); + var status_el = release.el.getElement('.release_status'); + status_el.set('class', 'release_status ' + new_status.identifier); + status_el.set('text', new_status.identifier); - var new_status=Status.get(notification.data); - release.status_id = new_status.id - release.el.className='item '+new_status.identifier; + if(!q && (new_status.identifier == 'snatched' || new_status.identifier == 'seeding' || new_status.identifier == 'done')) + var q = self.addQuality(release.quality_id); - var status_el=release.el.getElement('.release_status'); - status_el.className='release_status '+new_status.identifier; - status_el.set('text', new_status.identifier); + if(new_status && q && !q.hasClass(new_status.identifier)) { + q.removeClass(status.identifier).addClass(new_status.identifier); + q.set('title', q.get('title').replace(status.label, new_status.label)); + } + } - if(!q && (new_status.identifier == 'snatched' || new_status.identifier == 'seeding' || new_status.identifier == 'done')) - var q = self.addQuality(release.quality_id); - - if (new_status && q && !q.hasClass(new_status.identifier)){ - q.removeClass(status.identifier).addClass(new_status.identifier); - q.set('title', q.get('title').replace(status.label, new_status.label)); - } - }); + App.addEvent('release.update_status.' + release.id, update_handle); }); diff --git a/couchpotato/core/plugins/release/main.py b/couchpotato/core/plugins/release/main.py index 97e350c5..e8d1815f 100644 --- a/couchpotato/core/plugins/release/main.py +++ b/couchpotato/core/plugins/release/main.py @@ -48,7 +48,7 @@ class Release(Plugin): addEvent('release.for_movie', self.forMovie) addEvent('release.delete', self.delete) addEvent('release.clean', self.clean) - addEvent('release.update', self.update_status) + addEvent('release.update_status', self.updateStatus) def add(self, group): @@ -161,7 +161,7 @@ class Release(Plugin): rel = db.query(Relea).filter_by(id = id).first() if rel: ignored_status, failed_status, available_status = fireEvent('status.get', ['ignored', 'failed', 'available'], single = True) - self.update_status(id, available_status if rel.status_id in [ignored_status.get('id'), failed_status.get('id')] else ignored_status) + self.updateStatus(id, available_status if rel.status_id in [ignored_status.get('id'), failed_status.get('id')] else ignored_status) return { 'success': True @@ -237,7 +237,8 @@ class Release(Plugin): 'success': True } - def update_status(self, id = None, status = None): + def updateStatus(self, id, status = None): + if not status: return db = get_session() @@ -254,8 +255,5 @@ class Release(Plugin): rel.last_edit = int(time.time()) db.commit() - #Notify frontend - fireEvent('notify.frontend', type = 'release.download', data = True, message = '"%s" updated to %s' % (item['name'], status.get("label"))) - #Update all movie info as there is no release update function - fireEvent('notify.frontend', type = 'release.update.%s' % rel.id, data = status.get('id')) + fireEvent('notify.frontend', type = 'release.update_status.%s' % rel.id, data = status.get('id')) diff --git a/couchpotato/core/plugins/renamer/main.py b/couchpotato/core/plugins/renamer/main.py index b0df89dd..c2b71361 100755 --- a/couchpotato/core/plugins/renamer/main.py +++ b/couchpotato/core/plugins/renamer/main.py @@ -396,7 +396,7 @@ class Renamer(Plugin): elif release.status_id is snatched_status.get('id'): if release.quality.id is group['meta_data']['quality']['id']: # Set the release to downloaded - fireEvent('release.update', id = release.id, status = downloaded_status, single = True) + fireEvent('release.update_status', release.id, status = downloaded_status, single = True) # Remove leftover files if not remove_leftovers: # Don't remove anything @@ -701,7 +701,7 @@ Remove it if you want it to be renamed (again, or at least let it try again) if item['status'] == 'busy': # Set the release to snatched if it was missing before - fireEvent('release.update', id = rel.id, status = snatched_status, single = True) + fireEvent('release.update_status', rel.id, status = snatched_status, single = True) # Tag folder if it is in the 'from' folder and it will not be processed because it is still downloading if item['folder'] and self.conf('from') in item['folder']: @@ -709,7 +709,7 @@ Remove it if you want it to be renamed (again, or at least let it try again) elif item['status'] == 'seeding': # Set the release to seeding - fireEvent('release.update', id = rel.id, status = seeding_status, single = True) + fireEvent('release.update_status', rel.id, status = seeding_status, single = True) #If linking setting is enabled, process release if self.conf('file_action') != 'move' and not rel.status_id == seeding_status.get('id') and self.statusInfoComplete(item): @@ -727,7 +727,7 @@ Remove it if you want it to be renamed (again, or at least let it try again) elif item['status'] == 'failed': # Set the release to failed - fireEvent('release.update', id = rel.id, status = failed_status, single = True) + fireEvent('release.update_status', rel.id, status = failed_status, single = True) fireEvent('download.remove_failed', item, single = True) @@ -741,14 +741,14 @@ Remove it if you want it to be renamed (again, or at least let it try again) if rel.status_id == seeding_status.get('id'): if rel.movie.status_id == done_status.get('id'): # Set the release to done as the movie has already been renamed - fireEvent('release.update', id = rel.id, status = downloaded_status, single = True) + fireEvent('release.update_status', rel.id, status = downloaded_status, single = True) # Allow the downloader to clean-up item.update({'pause': False, 'scan': False, 'process_complete': True}) scan_items.append(item) else: # Set the release to snatched so that the renamer can process the release as if it was never seeding - fireEvent('release.update', id = rel.id, status = snatched_status, single = True) + fireEvent('release.update_status', rel.id, status = snatched_status, single = True) # Scan and Allow the downloader to clean-up item.update({'pause': False, 'scan': True, 'process_complete': True}) @@ -756,7 +756,7 @@ Remove it if you want it to be renamed (again, or at least let it try again) else: # Set the release to snatched if it was missing before - fireEvent('release.update', id = rel.id, status = snatched_status, single = True) + fireEvent('release.update_status', rel.id, status = snatched_status, single = True) # Remove the downloading tag self.untagDir(item['folder'], 'downloading') @@ -775,11 +775,11 @@ Remove it if you want it to be renamed (again, or at least let it try again) #Check status if already missing and for how long, if > 1 week, set to ignored else to missing if rel.status_id == missing_status.get('id'): - if rel.last_edit < int(time.time()) - 7*24*60*60: - fireEvent('release.update', id = rel.id, status = ignored_status, single = True) + if rel.last_edit < int(time.time()) - 7 * 24 * 60 * 60: + fireEvent('release.update_status', rel.id, status = ignored_status, single = True) else: # Set the release to missing - fireEvent('release.update', id = rel.id, status = missing_status, single = True) + fireEvent('release.update_status', rel.id, status = missing_status, single = True) except: log.error('Failed checking for release in downloader: %s', traceback.format_exc())