Browse Source

Don't look for unreleased movies. closes #123

pull/152/head
Ruud 13 years ago
parent
commit
60439d45bf
  1. 20
      couchpotato/core/plugins/library/main.py
  2. 4
      couchpotato/core/plugins/quality/main.py
  3. 35
      couchpotato/core/plugins/searcher/main.py
  4. 25
      couchpotato/core/providers/movie/couchpotatoapi/main.py

20
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.event import addEvent, fireEventAsync, fireEvent
from couchpotato.core.helpers.encoding import toUnicode, simplifyString, \ from couchpotato.core.helpers.encoding import toUnicode, simplifyString, \
tryUrlencode tryUrlencode
from couchpotato.core.helpers.variable import mergeDicts
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.settings.model import Library, LibraryTitle, File from couchpotato.core.settings.model import Library, LibraryTitle, File
from string import ascii_letters from string import ascii_letters
import time
import traceback import traceback
log = CPLog(__name__) log = CPLog(__name__)
@ -17,6 +19,8 @@ class LibraryPlugin(Plugin):
def __init__(self): def __init__(self):
addEvent('library.add', self.add) addEvent('library.add', self.add)
addEvent('library.update', self.update) addEvent('library.update', self.update)
addEvent('library.update_release_date', self.updateReleaseDates)
def add(self, attrs = {}, update_after = True): def add(self, attrs = {}, update_after = True):
@ -119,6 +123,22 @@ class LibraryPlugin(Plugin):
return library_dict 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): def simplifyTitle(self, title):
title = toUnicode(title) title = toUnicode(title)

4
couchpotato/core/plugins/quality/main.py

@ -34,6 +34,7 @@ class QualityPlugin(Plugin):
addEvent('quality.all', self.all) addEvent('quality.all', self.all)
addEvent('quality.single', self.single) addEvent('quality.single', self.single)
addEvent('quality.guess', self.guess) addEvent('quality.guess', self.guess)
addEvent('quality.pre_releases', self.preReleases)
addApiView('quality.size.save', self.saveSize) addApiView('quality.size.save', self.saveSize)
addApiView('quality.list', self.allView, docs = { addApiView('quality.list', self.allView, docs = {
@ -46,6 +47,9 @@ class QualityPlugin(Plugin):
addEvent('app.initialize', self.fill, priority = 10) addEvent('app.initialize', self.fill, priority = 10)
def preReleases(self):
return self.pre_releases
def allView(self): def allView(self):
return jsonified({ return jsonified({

35
couchpotato/core/plugins/searcher/main.py

@ -9,6 +9,7 @@ from couchpotato.environment import Env
from sqlalchemy.exc import InterfaceError from sqlalchemy.exc import InterfaceError
import datetime import datetime
import re import re
import time
import traceback import traceback
log = CPLog(__name__) log = CPLog(__name__)
@ -27,6 +28,8 @@ class Searcher(Plugin):
# Schedule cronjob # 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')) 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): def all_movies(self):
if self.in_progress: if self.in_progress:
@ -64,10 +67,15 @@ class Searcher(Plugin):
def single(self, movie): 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) available_status = fireEvent('status.get', 'available', single = True)
default_title = movie['library']['titles'][0]['title'] default_title = movie['library']['titles'][0]['title']
for quality_type in movie['profile']['types']: 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 has_better_quality = 0
@ -329,3 +337,30 @@ class Searcher(Plugin):
pass pass
return nfo and getImdb(nfo) == imdb_id 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

25
couchpotato/core/providers/movie/couchpotatoapi/main.py

@ -1,6 +1,6 @@
from couchpotato import get_session from couchpotato import get_session
from couchpotato.api import addApiView 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.helpers.request import jsonified, getParams
from couchpotato.core.logger import CPLog from couchpotato.core.logger import CPLog
from couchpotato.core.providers.movie.base import MovieProvider from couchpotato.core.providers.movie.base import MovieProvider
@ -15,19 +15,28 @@ class CouchPotatoApi(MovieProvider):
apiUrl = 'http://couchpota.to/api/%s/' apiUrl = 'http://couchpota.to/api/%s/'
def __init__(self): 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: 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) 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: 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 = []): def suggest(self, movies = [], ignore = []):
try: try:

Loading…
Cancel
Save