Browse Source

Created 'searcher.create_releases' event to replace some shared functionality, releases are now created for TV search results.

pull/2284/head
Dean Gardiner 12 years ago
parent
commit
820588aa5f
  1. 48
      couchpotato/core/media/_base/searcher/main.py
  2. 38
      couchpotato/core/media/movie/searcher/main.py
  3. 3
      couchpotato/core/media/show/searcher/main.py

48
couchpotato/core/media/_base/searcher/main.py

@ -7,6 +7,7 @@ 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
@ -26,6 +27,7 @@ class Searcher(SearcherBase):
addEvent('searcher.correct_words', self.correctWords) addEvent('searcher.correct_words', self.correctWords)
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',
@ -154,6 +156,52 @@ 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:
nzb_identifier = md5(rel['url'])
found_releases.append(nzb_identifier)
rls = db.query(Release).filter_by(identifier = nzb_identifier).first()
if not rls:
rls = Release(
identifier = nzb_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)

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

@ -177,43 +177,7 @@ class MovieSearcher(SearcherBase, MovieTypeBase):
break break
# Add them to this movie releases list # Add them to this movie releases list
for nzb in results: found_releases += fireEvent('searcher.create_releases', results, movie, quality_type, single = True)
nzb_identifier = md5(nzb['url'])
found_releases.append(nzb_identifier)
rls = db.query(Release).filter_by(identifier = nzb_identifier).first()
if not rls:
rls = Release(
identifier = nzb_identifier,
media_id = movie.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 nzb:
try:
if not isinstance(nzb[info], (str, unicode, int, long, float)):
continue
rls_info = ReleaseInfo(
identifier = info,
value = toUnicode(nzb[info])
)
rls.info.append(rls_info)
except InterfaceError:
log.debug('Couldn\'t add %s to ReleaseInfo: %s', (info, traceback.format_exc()))
db.commit()
nzb['status_id'] = rls.status_id
for nzb in results: for nzb in results:
if not quality_type.get('finish', False) and quality_type.get('wait_for', 0) > 0 and nzb.get('age') <= quality_type.get('wait_for', 0): if not quality_type.get('finish', False) and quality_type.get('wait_for', 0) > 0 and nzb.get('age') <= quality_type.get('wait_for', 0):

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

@ -127,6 +127,9 @@ class ShowSearcher(Plugin):
if not db.query(Media).filter_by(id = media.get('id')).first(): if not db.query(Media).filter_by(id = media.get('id')).first():
break break
# Add them to this movie releases list
found_releases += fireEvent('searcher.create_releases', results, media, quality_type, single = True)
log.info('%d results found' % len(results)) log.info('%d results found' % len(results))
def correctRelease(self, release = None, media = None, quality = None, **kwargs): def correctRelease(self, release = None, media = None, quality = None, **kwargs):

Loading…
Cancel
Save