Browse Source

Moved 'searcher.create_releases' from Searcher to Release.

pull/2356/head
Dean Gardiner 12 years ago
parent
commit
3fa21560be
  1. 48
      couchpotato/core/media/_base/searcher/main.py
  2. 2
      couchpotato/core/media/movie/searcher/main.py
  3. 2
      couchpotato/core/media/show/searcher/main.py
  4. 54
      couchpotato/core/plugins/release/main.py

48
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.media._base.searcher.base import SearcherBase
from couchpotato.core.settings.model import Media, Release, ReleaseInfo from couchpotato.core.settings.model import Media, Release, ReleaseInfo
from couchpotato.environment import Env from couchpotato.environment import Env
from sqlalchemy.exc import InterfaceError
from inspect import ismethod, isfunction from inspect import ismethod, isfunction
import datetime import datetime
import re import re
@ -28,7 +27,6 @@ class Searcher(SearcherBase):
addEvent('searcher.try_download_result', self.tryDownloadResult) addEvent('searcher.try_download_result', self.tryDownloadResult)
addEvent('searcher.download', self.download) addEvent('searcher.download', self.download)
addEvent('searcher.search', self.search) addEvent('searcher.search', self.search)
addEvent('searcher.create_releases', self.createReleases)
addApiView('searcher.full_search', self.searchAllView, docs = { addApiView('searcher.full_search', self.searchAllView, docs = {
'desc': 'Starts a full search for all media', 'desc': 'Starts a full search for all media',
@ -174,52 +172,6 @@ class Searcher(SearcherBase):
return sorted_results 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): def getSearchProtocols(self):
download_protocols = fireEvent('download.enabled_protocols', merge = True) download_protocols = fireEvent('download.enabled_protocols', merge = True)

2
couchpotato/core/media/movie/searcher/main.py

@ -176,7 +176,7 @@ class MovieSearcher(SearcherBase, MovieTypeBase):
break break
# Add them to this movie releases list # 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 # Try find a valid result and download it
if fireEvent('searcher.try_download_result', results, movie, quality_type, manual, single = True): if fireEvent('searcher.try_download_result', results, movie, quality_type, manual, single = True):

2
couchpotato/core/media/show/searcher/main.py

@ -106,7 +106,7 @@ class ShowSearcher(Plugin):
break break
# Add them to this movie releases list # 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 # Try find a valid result and download it
if fireEvent('searcher.try_download_result', results, media, quality_type, manual, single = True): if fireEvent('searcher.try_download_result', results, media, quality_type, manual, single = True):

54
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.api import addApiView
from couchpotato.core.event import fireEvent, addEvent 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.logger import CPLog
from couchpotato.core.plugins.base import Plugin from couchpotato.core.plugins.base import Plugin
from couchpotato.core.plugins.scanner.main import Scanner 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.orm import joinedload_all
from sqlalchemy.sql.expression import and_, or_ from sqlalchemy.sql.expression import and_, or_
import os import os
@ -45,6 +46,7 @@ class Release(Plugin):
} }
}) })
addEvent('release.create_from_search', self.createFromSearch)
addEvent('release.for_movie', self.forMovie) addEvent('release.for_movie', self.forMovie)
addEvent('release.delete', self.delete) addEvent('release.delete', self.delete)
addEvent('release.clean', self.clean) addEvent('release.clean', self.clean)
@ -213,6 +215,52 @@ class Release(Plugin):
'success': False '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): def forMovie(self, id = None):
db = get_session() db = get_session()

Loading…
Cancel
Save