Don't look for unreleased movies. closes #123
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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({
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user