From 4fcba70c9a28123bc0028d6684e6753d5a85b7d3 Mon Sep 17 00:00:00 2001 From: Ruud Date: Sat, 16 Mar 2013 11:53:55 +0100 Subject: [PATCH] Cleanup dashboard snatched movies --- couchpotato/core/plugins/movie/main.py | 33 +++++++++++++----------- couchpotato/core/plugins/renamer/main.py | 6 +++++ couchpotato/core/plugins/searcher/main.py | 43 +++++++++++++++++-------------- 3 files changed, 47 insertions(+), 35 deletions(-) diff --git a/couchpotato/core/plugins/movie/main.py b/couchpotato/core/plugins/movie/main.py index c708ec4..d8e7499 100644 --- a/couchpotato/core/plugins/movie/main.py +++ b/couchpotato/core/plugins/movie/main.py @@ -12,6 +12,7 @@ from couchpotato.environment import Env from sqlalchemy.orm import joinedload_all from sqlalchemy.sql.expression import or_, asc, not_, desc from string import ascii_lowercase +import time log = CPLog(__name__) @@ -96,32 +97,33 @@ class MoviePlugin(Plugin): addEvent('movie.list', self.list) addEvent('movie.restatus', self.restatus) + # Clean releases that didn't have activity in the last week addEvent('app.load', self.cleanReleases) + fireEvent('schedule.interval', 'movie.clean_releases', self.cleanReleases, hours = 4) def cleanReleases(self): - prop_name = 'cleaned_releases' - already_cleaned = Env.prop(prop_name, default = False) - if already_cleaned: - return True + log.debug('Removing releases from dashboard') - log.info('Removing releases from library movies') - - db = get_session() - - movies = db.query(Movie).all() + now = time.time() + week = 262080 done_status = fireEvent('status.get', 'done', single = True) available_status = fireEvent('status.get', 'available', single = True) snatched_status = fireEvent('status.get', 'snatched', single = True) - for movie in movies: - if movie.status_id == done_status.get('id'): - for rel in movie.releases: - if rel.status_id in [available_status.get('id'), snatched_status.get('id')]: - fireEvent('release.delete', id = rel.id, single = True) + db = get_session() + + # get movies last_edit more than a week ago + movies = db.query(Movie) \ + .filter(Movie.status_id == done_status.get('id'), Movie.last_edit < (now - week)) \ + .all() - Env.prop(prop_name, True) + # + for movie in movies: + for rel in movie.releases: + if rel.status_id in [available_status.get('id'), snatched_status.get('id')]: + fireEvent('release.delete', id = rel.id, single = True) def getView(self): @@ -402,6 +404,7 @@ class MoviePlugin(Plugin): if force_readd: m.status_id = status_id if status_id else status_active.get('id') + m.last_edit = int(time.time()) do_search = True db.commit() diff --git a/couchpotato/core/plugins/renamer/main.py b/couchpotato/core/plugins/renamer/main.py index 7df93b8..b706215 100644 --- a/couchpotato/core/plugins/renamer/main.py +++ b/couchpotato/core/plugins/renamer/main.py @@ -13,6 +13,7 @@ import errno import os import re import shutil +import time import traceback log = CPLog(__name__) @@ -275,6 +276,7 @@ class Renamer(Plugin): for profile_type in movie.profile.types: if profile_type.quality_id == group['meta_data']['quality']['id'] and profile_type.finish: movie.status_id = done_status.get('id') + movie.last_edit = int(time.time()) db.commit() except Exception, e: log.error('Failed marking movie finished: %s %s', (e, traceback.format_exc())) @@ -316,8 +318,10 @@ class Renamer(Plugin): 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() # Remove leftover files @@ -556,6 +560,7 @@ class Renamer(Plugin): if rel.movie.status_id == done_status.get('id'): log.debug('Found a completed movie with a snatched release : %s. Setting release status to ignored...' , default_title) rel.status_id = ignored_status.get('id') + rel.last_edit = int(time.time()) db.commit() continue @@ -580,6 +585,7 @@ class Renamer(Plugin): fireEvent('searcher.try_next_release', movie_id = rel.movie_id) else: rel.status_id = failed_status.get('id') + rel.last_edit = int(time.time()) db.commit() elif item['status'] == 'completed': log.info('Download of %s completed!', item['name']) diff --git a/couchpotato/core/plugins/searcher/main.py b/couchpotato/core/plugins/searcher/main.py index c5ed138..deb3544 100644 --- a/couchpotato/core/plugins/searcher/main.py +++ b/couchpotato/core/plugins/searcher/main.py @@ -209,6 +209,7 @@ class Searcher(Plugin): db.add(rls) else: [db.delete(old_info) for old_info in rls.info] + rls.last_edit = int(time.time()) db.commit() @@ -301,26 +302,28 @@ class Searcher(Plugin): log.info(snatch_message) fireEvent('movie.snatched', message = snatch_message, data = rls.to_dict()) - # If renamer isn't used, mark movie done - if not Env.setting('enabled', 'renamer'): - 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 rls and 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') - db.commit() - - # Mark movie done - mvie = db.query(Movie).filter_by(id = movie['id']).first() - mvie.status_id = done_status.get('id') - db.commit() - except: - log.error('Failed marking movie finished, renamer disabled: %s', traceback.format_exc()) + # If renamer isn't used, mark movie done + if not Env.setting('enabled', 'renamer'): + 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 + mvie = db.query(Movie).filter_by(id = movie['id']).first() + mvie.status_id = done_status.get('id') + mvie.last_edit = int(time.time()) + db.commit() + except: + log.error('Failed marking movie finished, renamer disabled: %s', traceback.format_exc()) except: log.error('Failed marking movie finished: %s', traceback.format_exc())