Merge branch 'refs/heads/develop'
This commit is contained in:
@@ -3,6 +3,7 @@ from couchpotato.core.helpers.encoding import isInt
|
||||
from couchpotato.core.logger import CPLog
|
||||
import json
|
||||
import requests
|
||||
import traceback
|
||||
|
||||
log = CPLog(__name__)
|
||||
|
||||
@@ -34,12 +35,12 @@ class Synology(Downloader):
|
||||
elif data['protocol'] in ['nzb', 'torrent']:
|
||||
log.info('Adding %s' % data['protocol'])
|
||||
if not filedata:
|
||||
log.error('No %s data found' % data['protocol'])
|
||||
log.error('No %s data found', data['protocol'])
|
||||
else:
|
||||
filename = data['name'] + '.' + data['protocol']
|
||||
response = srpc.create_task(filename = filename, filedata = filedata)
|
||||
except Exception, err:
|
||||
log.error('Exception while adding torrent: %s', err)
|
||||
except:
|
||||
log.error('Exception while adding torrent: %s', traceback.format_exc())
|
||||
finally:
|
||||
return response
|
||||
|
||||
|
||||
@@ -147,7 +147,7 @@ class Searcher(SearcherBase):
|
||||
except: pass
|
||||
|
||||
# Match longest name between []
|
||||
try: check_names.append(max(check_name.split('['), key = len))
|
||||
try: check_names.append(max(re.findall(r'[^[]*\[([^]]*)\]', check_name), key = len).strip())
|
||||
except: pass
|
||||
|
||||
for check_name in list(set(check_names)):
|
||||
|
||||
@@ -151,7 +151,7 @@ class MovieLibraryPlugin(LibraryBase):
|
||||
else:
|
||||
dates = library.info.get('release_date')
|
||||
|
||||
if dates and dates.get('expires', 0) < time.time() or not dates:
|
||||
if dates and (dates.get('expires', 0) < time.time() or dates.get('expires', 0) > time.time() + (604800 * 4)) or not dates:
|
||||
dates = fireEvent('movie.release_date', identifier = identifier, merge = True)
|
||||
library.info.update({'release_date': dates })
|
||||
db.commit()
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
from couchpotato.core.event import addEvent
|
||||
from couchpotato.core.event import addEvent, fireEvent
|
||||
from couchpotato.core.helpers.encoding import toUnicode
|
||||
from couchpotato.core.helpers.variable import getTitle, splitString
|
||||
from couchpotato.core.logger import CPLog
|
||||
from couchpotato.core.plugins.base import Plugin
|
||||
from couchpotato.core.plugins.score.scores import nameScore, nameRatioScore, \
|
||||
sizeScore, providerScore, duplicateScore, partialIgnoredScore, namePositionScore, \
|
||||
halfMultipartScore
|
||||
halfMultipartScore, sceneScore
|
||||
from couchpotato.environment import Env
|
||||
|
||||
log = CPLog(__name__)
|
||||
@@ -62,4 +62,7 @@ class Score(Plugin):
|
||||
if extra_score:
|
||||
score += extra_score(nzb)
|
||||
|
||||
# Scene / Nuke scoring
|
||||
score += sceneScore(nzb['name'])
|
||||
|
||||
return score
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
from couchpotato.core.event import fireEvent
|
||||
from couchpotato.core.helpers.encoding import simplifyString
|
||||
from couchpotato.core.helpers.variable import tryInt
|
||||
from couchpotato.core.logger import CPLog
|
||||
from couchpotato.environment import Env
|
||||
import re
|
||||
import traceback
|
||||
|
||||
log = CPLog(__name__)
|
||||
|
||||
|
||||
name_scores = [
|
||||
# Tags
|
||||
@@ -160,3 +165,38 @@ def halfMultipartScore(nzb_name):
|
||||
return -30
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
def sceneScore(nzb_name):
|
||||
|
||||
check_names = [nzb_name]
|
||||
|
||||
# Match names between "
|
||||
try: check_names.append(re.search(r'([\'"])[^\1]*\1', nzb_name).group(0))
|
||||
except: pass
|
||||
|
||||
# Match longest name between []
|
||||
try: check_names.append(max(re.findall(r'[^[]*\[([^]]*)\]', nzb_name), key = len).strip())
|
||||
except: pass
|
||||
|
||||
for name in check_names:
|
||||
|
||||
# Strip twice, remove possible file extensions
|
||||
name = name.lower().strip(' "\'\.-_\[\]')
|
||||
name = re.sub('\.([a-z0-9]{0,4})$', '', name)
|
||||
name = name.strip(' "\'\.-_\[\]')
|
||||
|
||||
# Make sure year and groupname is in there
|
||||
year = re.findall('(?P<year>19[0-9]{2}|20[0-9]{2})', name)
|
||||
group = re.findall('\-([a-z0-9]+)$', name)
|
||||
|
||||
if len(year) > 0 and len(group) > 0:
|
||||
try:
|
||||
validate = fireEvent('release.validate', name, single = True)
|
||||
if validate and tryInt(validate.get('score')) != 0:
|
||||
log.debug('Release "%s" scored %s, reason: %s', (nzb_name, validate['score'], validate['reasons']))
|
||||
return tryInt(validate.get('score'))
|
||||
except:
|
||||
log.error('Failed scoring scene: %s', traceback.format_exc())
|
||||
|
||||
return 0
|
||||
|
||||
@@ -3,6 +3,7 @@ from couchpotato.core.helpers.encoding import tryUrlencode
|
||||
from couchpotato.core.logger import CPLog
|
||||
from couchpotato.core.providers.info.base import MovieProvider
|
||||
from couchpotato.environment import Env
|
||||
import base64
|
||||
import time
|
||||
|
||||
log = CPLog(__name__)
|
||||
@@ -11,6 +12,7 @@ log = CPLog(__name__)
|
||||
class CouchPotatoApi(MovieProvider):
|
||||
|
||||
urls = {
|
||||
'validate': 'https://api.couchpota.to/validate/%s/',
|
||||
'search': 'https://api.couchpota.to/search/%s/',
|
||||
'info': 'https://api.couchpota.to/info/%s/',
|
||||
'is_movie': 'https://api.couchpota.to/ismovie/%s/',
|
||||
@@ -30,6 +32,8 @@ class CouchPotatoApi(MovieProvider):
|
||||
addEvent('movie.suggest', self.getSuggestions)
|
||||
addEvent('movie.is_movie', self.isMovie)
|
||||
|
||||
addEvent('release.validate', self.validate)
|
||||
|
||||
addEvent('cp.source_url', self.getSourceUrl)
|
||||
addEvent('cp.messages', self.getMessages)
|
||||
|
||||
@@ -51,6 +55,14 @@ class CouchPotatoApi(MovieProvider):
|
||||
def search(self, q, limit = 5):
|
||||
return self.getJsonData(self.urls['search'] % tryUrlencode(q) + ('?limit=%s' % limit), headers = self.getRequestHeaders())
|
||||
|
||||
def validate(self, name = None):
|
||||
|
||||
if not name:
|
||||
return
|
||||
|
||||
name_enc = base64.b64encode(name)
|
||||
return self.getJsonData(self.urls['validate'] % name_enc, headers = self.getRequestHeaders())
|
||||
|
||||
def isMovie(self, identifier = None):
|
||||
|
||||
if not identifier:
|
||||
|
||||
Reference in New Issue
Block a user