diff --git a/couchpotato/core/media/_base/searcher/main.py b/couchpotato/core/media/_base/searcher/main.py index a986f3d..1f6e9f3 100644 --- a/couchpotato/core/media/_base/searcher/main.py +++ b/couchpotato/core/media/_base/searcher/main.py @@ -7,7 +7,6 @@ from couchpotato.core.logger import CPLog from couchpotato.core.media._base.searcher.base import SearcherBase from couchpotato.core.settings.model import Media, Release, ReleaseInfo from couchpotato.environment import Env -from sqlalchemy.exc import InterfaceError from inspect import ismethod, isfunction import datetime import re @@ -28,7 +27,6 @@ class Searcher(SearcherBase): addEvent('searcher.try_download_result', self.tryDownloadResult) addEvent('searcher.download', self.download) addEvent('searcher.search', self.search) - addEvent('searcher.create_releases', self.createReleases) addApiView('searcher.full_search', self.searchAllView, docs = { 'desc': 'Starts a full search for all media', @@ -174,52 +172,6 @@ class Searcher(SearcherBase): return sorted_results - def createReleases(self, search_results, media, quality_type): - - available_status, ignored_status, failed_status = fireEvent('status.get', ['available', 'ignored', 'failed'], single = True) - db = get_session() - - found_releases = [] - - for rel in search_results: - - rel_identifier = md5(rel['url']) - found_releases.append(rel_identifier) - - rls = db.query(Release).filter_by(identifier = rel_identifier).first() - if not rls: - rls = Release( - identifier = rel_identifier, - media_id = media.get('id'), - quality_id = quality_type.get('quality_id'), - status_id = available_status.get('id') - ) - db.add(rls) - else: - [db.delete(old_info) for old_info in rls.info] - rls.last_edit = int(time.time()) - - db.commit() - - for info in rel: - try: - if not isinstance(rel[info], (str, unicode, int, long, float)): - continue - - rls_info = ReleaseInfo( - identifier = info, - value = toUnicode(rel[info]) - ) - rls.info.append(rls_info) - except InterfaceError: - log.debug('Couldn\'t add %s to ReleaseInfo: %s', (info, traceback.format_exc())) - - db.commit() - - rel['status_id'] = rls.status_id - - return found_releases - def getSearchProtocols(self): download_protocols = fireEvent('download.enabled_protocols', merge = True) diff --git a/couchpotato/core/media/movie/searcher/main.py b/couchpotato/core/media/movie/searcher/main.py index 70b0278..0020c86 100644 --- a/couchpotato/core/media/movie/searcher/main.py +++ b/couchpotato/core/media/movie/searcher/main.py @@ -176,7 +176,7 @@ class MovieSearcher(SearcherBase, MovieTypeBase): break # Add them to this movie releases list - found_releases += fireEvent('searcher.create_releases', results, movie, quality_type, single = True) + found_releases += fireEvent('release.create_from_search', results, movie, quality_type, single = True) # Try find a valid result and download it if fireEvent('searcher.try_download_result', results, movie, quality_type, manual, single = True): diff --git a/couchpotato/core/media/show/searcher/main.py b/couchpotato/core/media/show/searcher/main.py index 3e7b576..1cf1718 100644 --- a/couchpotato/core/media/show/searcher/main.py +++ b/couchpotato/core/media/show/searcher/main.py @@ -106,7 +106,7 @@ class ShowSearcher(Plugin): break # Add them to this movie releases list - found_releases += fireEvent('searcher.create_releases', results, media, quality_type, single = True) + found_releases += fireEvent('release.create_from_search', results, media, quality_type, single = True) # Try find a valid result and download it if fireEvent('searcher.try_download_result', results, media, quality_type, manual, single = True): diff --git a/couchpotato/core/plugins/release/main.py b/couchpotato/core/plugins/release/main.py index 833ceec..aa7ed50 100644 --- a/couchpotato/core/plugins/release/main.py +++ b/couchpotato/core/plugins/release/main.py @@ -1,11 +1,12 @@ -from couchpotato import get_session +from couchpotato import get_session, md5 from couchpotato.api import addApiView from couchpotato.core.event import fireEvent, addEvent -from couchpotato.core.helpers.encoding import ss +from couchpotato.core.helpers.encoding import ss, toUnicode from couchpotato.core.logger import CPLog 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, Media +from couchpotato.core.settings.model import File, Release as Relea, Media, ReleaseInfo +from sqlalchemy.exc import InterfaceError from sqlalchemy.orm import joinedload_all from sqlalchemy.sql.expression import and_, or_ import os @@ -45,6 +46,7 @@ class Release(Plugin): } }) + addEvent('release.create_from_search', self.createFromSearch) addEvent('release.for_movie', self.forMovie) addEvent('release.delete', self.delete) addEvent('release.clean', self.clean) @@ -213,6 +215,52 @@ class Release(Plugin): 'success': False } + def createFromSearch(self, search_results, media, quality_type): + + available_status, ignored_status, failed_status = fireEvent('status.get', ['available', 'ignored', 'failed'], single = True) + db = get_session() + + found_releases = [] + + for rel in search_results: + + rel_identifier = md5(rel['url']) + found_releases.append(rel_identifier) + + rls = db.query(Relea).filter_by(identifier = rel_identifier).first() + if not rls: + rls = Relea( + identifier = rel_identifier, + media_id = media.get('id'), + quality_id = quality_type.get('quality_id'), + status_id = available_status.get('id') + ) + db.add(rls) + else: + [db.delete(old_info) for old_info in rls.info] + rls.last_edit = int(time.time()) + + db.commit() + + for info in rel: + try: + if not isinstance(rel[info], (str, unicode, int, long, float)): + continue + + rls_info = ReleaseInfo( + identifier = info, + value = toUnicode(rel[info]) + ) + rls.info.append(rls_info) + except InterfaceError: + log.debug('Couldn\'t add %s to ReleaseInfo: %s', (info, traceback.format_exc())) + + db.commit() + + rel['status_id'] = rls.status_id + + return found_releases + def forMovie(self, id = None): db = get_session()