From 974f2d040dbb1b0de20977e8fcd59e19d44fae01 Mon Sep 17 00:00:00 2001 From: Ruud Date: Fri, 13 Jul 2012 23:41:53 +0200 Subject: [PATCH] Clean unavailable files on full scan. fix #455 --- couchpotato/core/plugins/manage/main.py | 7 ++++++ couchpotato/core/plugins/release/main.py | 39 ++++++++++++++++++++++++++------ 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/couchpotato/core/plugins/manage/main.py b/couchpotato/core/plugins/manage/main.py index bea2fe4..bf739a6 100644 --- a/couchpotato/core/plugins/manage/main.py +++ b/couchpotato/core/plugins/manage/main.py @@ -73,6 +73,13 @@ class Manage(Plugin): for done_movie in done_movies: if done_movie['library']['identifier'] not in added_identifiers: fireEvent('movie.delete', movie_id = done_movie['id'], delete_from = 'all') + else: + for release in done_movie.get('releases', []): + for release_file in release.get('files', []): + # Remove release not available anymore + if not os.path.isfile(release_file['path']): + fireEvent('release.clean', release['id']) + break Env.prop('manage.last_update', time.time()) diff --git a/couchpotato/core/plugins/release/main.py b/couchpotato/core/plugins/release/main.py index ff2507e..ba79d9f 100644 --- a/couchpotato/core/plugins/release/main.py +++ b/couchpotato/core/plugins/release/main.py @@ -7,6 +7,7 @@ from couchpotato.core.plugins.base import Plugin from couchpotato.core.plugins.scanner.main import Scanner from couchpotato.core.settings.model import File, Release as Relea, Movie from sqlalchemy.sql.expression import and_, or_ +import os log = CPLog(__name__) @@ -22,7 +23,7 @@ class Release(Plugin): 'id': {'type': 'id', 'desc': 'ID of the release object in release-table'} } }) - addApiView('release.delete', self.delete, docs = { + addApiView('release.delete', self.deleteView, docs = { 'desc': 'Delete releases', 'params': { 'id': {'type': 'id', 'desc': 'ID of the release object in release-table'} @@ -35,6 +36,9 @@ class Release(Plugin): } }) + addEvent('release.delete', self.delete) + addEvent('release.clean', self.clean) + def add(self, group): db = get_session() @@ -99,20 +103,41 @@ class Release(Plugin): # Check database and update/insert if necessary return fireEvent('file.add', path = filepath, part = fireEvent('scanner.partnumber', file, single = True), type_tuple = Scanner.file_types.get(type), properties = properties, single = True) - def delete(self): + def deleteView(self): + + release_id = getParam('id') + + #db.close() + return jsonified({ + 'success': self.delete(release_id) + }) + + def delete(self, id): db = get_session() - id = getParam('id') rel = db.query(Relea).filter_by(id = id).first() if rel: rel.delete() db.commit() + return True - #db.close() - return jsonified({ - 'success': True - }) + return False + + def clean(self, id): + + db = get_session() + + rel = db.query(Relea).filter_by(id = id).first() + if rel: + for release_file in rel.files: + if not os.path.isfile(release_file.path): + db.delete(release_file) + db.commit() + + return True + + return False def ignore(self):