From 60439d45bf1cd5fcd6cc1cfaa297af58c55478a1 Mon Sep 17 00:00:00 2001 From: Ruud Date: Sun, 22 Apr 2012 16:56:45 +0200 Subject: [PATCH] Don't look for unreleased movies. closes #123 --- couchpotato/core/plugins/library/main.py | 20 +++++++++++++ couchpotato/core/plugins/quality/main.py | 4 +++ couchpotato/core/plugins/searcher/main.py | 35 ++++++++++++++++++++++ .../core/providers/movie/couchpotatoapi/main.py | 25 +++++++++++----- 4 files changed, 76 insertions(+), 8 deletions(-) diff --git a/couchpotato/core/plugins/library/main.py b/couchpotato/core/plugins/library/main.py index 8d6c319..af77a5b 100644 --- a/couchpotato/core/plugins/library/main.py +++ b/couchpotato/core/plugins/library/main.py @@ -2,10 +2,12 @@ from couchpotato import get_session from couchpotato.core.event import addEvent, fireEventAsync, fireEvent from couchpotato.core.helpers.encoding import toUnicode, simplifyString, \ tryUrlencode +from couchpotato.core.helpers.variable import mergeDicts from couchpotato.core.logger import CPLog from couchpotato.core.plugins.base import Plugin from couchpotato.core.settings.model import Library, LibraryTitle, File from string import ascii_letters +import time import traceback log = CPLog(__name__) @@ -17,6 +19,8 @@ class LibraryPlugin(Plugin): def __init__(self): addEvent('library.add', self.add) addEvent('library.update', self.update) + addEvent('library.update_release_date', self.updateReleaseDates) + def add(self, attrs = {}, update_after = True): @@ -119,6 +123,22 @@ class LibraryPlugin(Plugin): return library_dict + def updateReleaseDates(self, identifier): + + db = get_session() + library = db.query(Library).filter_by(identifier = identifier).first() + + if library.info.get('release_date', {}).get('expires', 0) < time.time(): + dates = fireEvent('movie.release_date', identifier = identifier, merge = True) + library.info = mergeDicts(library.info, {'release_date': dates}) + db.commit() + + dates = library.info.get('release_date', {}) + db.remove() + + return dates + + def simplifyTitle(self, title): title = toUnicode(title) diff --git a/couchpotato/core/plugins/quality/main.py b/couchpotato/core/plugins/quality/main.py index ae33caf..e6fa1b6 100644 --- a/couchpotato/core/plugins/quality/main.py +++ b/couchpotato/core/plugins/quality/main.py @@ -34,6 +34,7 @@ class QualityPlugin(Plugin): addEvent('quality.all', self.all) addEvent('quality.single', self.single) addEvent('quality.guess', self.guess) + addEvent('quality.pre_releases', self.preReleases) addApiView('quality.size.save', self.saveSize) addApiView('quality.list', self.allView, docs = { @@ -46,6 +47,9 @@ class QualityPlugin(Plugin): addEvent('app.initialize', self.fill, priority = 10) + def preReleases(self): + return self.pre_releases + def allView(self): return jsonified({ diff --git a/couchpotato/core/plugins/searcher/main.py b/couchpotato/core/plugins/searcher/main.py index d0f4420..a4050b0 100644 --- a/couchpotato/core/plugins/searcher/main.py +++ b/couchpotato/core/plugins/searcher/main.py @@ -9,6 +9,7 @@ from couchpotato.environment import Env from sqlalchemy.exc import InterfaceError import datetime import re +import time import traceback log = CPLog(__name__) @@ -27,6 +28,8 @@ class Searcher(Plugin): # Schedule cronjob fireEvent('schedule.cron', 'searcher.all', self.all_movies, day = self.conf('cron_day'), hour = self.conf('cron_hour'), minute = self.conf('cron_minute')) + addEvent('app.load', self.all_movies) + def all_movies(self): if self.in_progress: @@ -64,10 +67,15 @@ class Searcher(Plugin): def single(self, movie): + pre_releases = fireEvent('quality.pre_releases', single = True) + release_dates = fireEvent('library.update_release_date', identifier = movie['library']['identifier'], merge = True) available_status = fireEvent('status.get', 'available', single = True) default_title = movie['library']['titles'][0]['title'] for quality_type in movie['profile']['types']: + if not self.couldBeReleased(quality_type['quality']['identifier'], release_dates, pre_releases): + log.info('To early to search for %s, %s' % (quality_type['quality']['identifier'], default_title)) + continue has_better_quality = 0 @@ -329,3 +337,30 @@ class Searcher(Plugin): pass return nfo and getImdb(nfo) == imdb_id + + def couldBeReleased(self, wanted_quality, dates, pre_releases): + + now = int(time.time()) + + if not dates or (dates.get('theater', 0) == 0 and dates.get('dvd', 0) == 0): + return True + else: + if wanted_quality in pre_releases: + # Prerelease 1 week before theaters + if dates.get('theater') >= now - 604800 and wanted_quality in pre_releases: + return True + else: + # 6 weeks after theater release + if dates.get('theater') < now - 3628800: + return True + + # 6 weeks before dvd release + if dates.get('dvd') > now - 3628800: + return True + + # Dvd should be released + if dates.get('dvd') < now: + return True + + + return False diff --git a/couchpotato/core/providers/movie/couchpotatoapi/main.py b/couchpotato/core/providers/movie/couchpotatoapi/main.py index aca80cc..dd8d36d 100644 --- a/couchpotato/core/providers/movie/couchpotatoapi/main.py +++ b/couchpotato/core/providers/movie/couchpotatoapi/main.py @@ -1,6 +1,6 @@ from couchpotato import get_session from couchpotato.api import addApiView -from couchpotato.core.event import addEvent +from couchpotato.core.event import addEvent, fireEvent from couchpotato.core.helpers.request import jsonified, getParams from couchpotato.core.logger import CPLog from couchpotato.core.providers.movie.base import MovieProvider @@ -15,19 +15,28 @@ class CouchPotatoApi(MovieProvider): apiUrl = 'http://couchpota.to/api/%s/' def __init__(self): - addEvent('movie.release_date', self.releaseDate) - addApiView('movie.suggest', self.suggestView) + #addApiView('movie.suggest', self.suggestView) - def releaseDate(self, imdb_id): + addEvent('movie.info', self.getInfo) + addEvent('movie.release_date', self.getReleaseDate) + + def getInfo(self, identifier = None): + return { + 'release_date': self.getReleaseDate(identifier) + } + + def getReleaseDate(self, identifier = None): try: - data = self.urlopen((self.apiUrl % ('eta')) + (id + '/')) + headers = {'X-CP-Version': fireEvent('app.version', single = True)} + data = self.urlopen((self.apiUrl % ('eta')) + (identifier + '/'), headers = headers) dates = json.loads(data) - log.info('Found ETA for %s: %s' % (imdb_id, dates)) + log.debug('Found ETA for %s: %s' % (identifier, dates)) + return dates except Exception, e: - log.error('Error getting ETA for %s: %s' % (imdb_id, e)) + log.error('Error getting ETA for %s: %s' % (identifier, e)) - return dates + return {} def suggest(self, movies = [], ignore = []): try: