|
@ -3,7 +3,7 @@ from couchpotato.api import addApiView |
|
|
from couchpotato.core.event import addEvent |
|
|
from couchpotato.core.event import addEvent |
|
|
from couchpotato.core.helpers.encoding import toUnicode |
|
|
from couchpotato.core.helpers.encoding import toUnicode |
|
|
from couchpotato.core.helpers.request import jsonified, getParams |
|
|
from couchpotato.core.helpers.request import jsonified, getParams |
|
|
from couchpotato.core.helpers.variable import mergeDicts |
|
|
from couchpotato.core.helpers.variable import mergeDicts, md5 |
|
|
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 Quality, Profile, ProfileType |
|
|
from couchpotato.core.settings.model import Quality, Profile, ProfileType |
|
@ -135,6 +135,11 @@ class QualityPlugin(Plugin): |
|
|
|
|
|
|
|
|
def guess(self, files, extra = {}, loose = False): |
|
|
def guess(self, files, extra = {}, loose = False): |
|
|
|
|
|
|
|
|
|
|
|
# Create hash for cache |
|
|
|
|
|
hash = md5(str(files)) |
|
|
|
|
|
cached = self.getCache(hash) |
|
|
|
|
|
if cached: return cached |
|
|
|
|
|
|
|
|
for file in files: |
|
|
for file in files: |
|
|
size = (os.path.getsize(file) / 1024 / 1024) if os.path.isfile(file) else 0 |
|
|
size = (os.path.getsize(file) / 1024 / 1024) if os.path.isfile(file) else 0 |
|
|
words = re.split('\W+', file.lower()) |
|
|
words = re.split('\W+', file.lower()) |
|
@ -144,34 +149,34 @@ class QualityPlugin(Plugin): |
|
|
# Check tags |
|
|
# Check tags |
|
|
if quality['identifier'] in words: |
|
|
if quality['identifier'] in words: |
|
|
log.debug('Found via identifier "%s" in %s' % (quality['identifier'], file)) |
|
|
log.debug('Found via identifier "%s" in %s' % (quality['identifier'], file)) |
|
|
return quality |
|
|
return self.setCache(hash, quality) |
|
|
|
|
|
|
|
|
if list(set(quality.get('alternative', [])) & set(words)): |
|
|
if list(set(quality.get('alternative', [])) & set(words)): |
|
|
log.debug('Found %s via alt %s in %s' % (quality['identifier'], quality.get('alternative'), file)) |
|
|
log.debug('Found %s via alt %s in %s' % (quality['identifier'], quality.get('alternative'), file)) |
|
|
return quality |
|
|
return self.setCache(hash, quality) |
|
|
|
|
|
|
|
|
if list(set(quality.get('tags', [])) & set(words)): |
|
|
if list(set(quality.get('tags', [])) & set(words)): |
|
|
log.debug('Found %s via tag %s in %s' % (quality['identifier'], quality.get('tags'), file)) |
|
|
log.debug('Found %s via tag %s in %s' % (quality['identifier'], quality.get('tags'), file)) |
|
|
return quality |
|
|
return self.setCache(hash, quality) |
|
|
|
|
|
|
|
|
# Check on unreliable stuff |
|
|
# Check on unreliable stuff |
|
|
if loose: |
|
|
if loose: |
|
|
# Check extension + filesize |
|
|
# Check extension + filesize |
|
|
if list(set(quality.get('ext', [])) & set(words)) and size >= quality['size_min'] and size <= quality['size_max']: |
|
|
if list(set(quality.get('ext', [])) & set(words)) and size >= quality['size_min'] and size <= quality['size_max']: |
|
|
log.debug('Found %s via ext %s in %s' % (quality['identifier'], quality.get('ext'), words)) |
|
|
log.debug('Found %s via ext %s in %s' % (quality['identifier'], quality.get('ext'), words)) |
|
|
return quality |
|
|
return self.setCache(hash, quality) |
|
|
|
|
|
|
|
|
# Last check on resolution only |
|
|
# Last check on resolution only |
|
|
if quality.get('width', 480) == extra.get('resolution_width', 0): |
|
|
if quality.get('width', 480) == extra.get('resolution_width', 0): |
|
|
log.debug('Found %s via resolution_width: %s == %s' % (quality['identifier'], quality.get('width', 480), extra.get('resolution_width', 0))) |
|
|
log.debug('Found %s via resolution_width: %s == %s' % (quality['identifier'], quality.get('width', 480), extra.get('resolution_width', 0))) |
|
|
return quality |
|
|
return self.setCache(hash, quality) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Try again with loose testing |
|
|
# Try again with loose testing |
|
|
if not loose: |
|
|
if not loose: |
|
|
quality = self.guess(files, extra = extra, loose = True) |
|
|
quality = self.guess(files, extra = extra, loose = True) |
|
|
if quality: |
|
|
if quality: |
|
|
return quality |
|
|
return self.setCache(hash, quality) |
|
|
|
|
|
|
|
|
log.error('Could not identify quality for: %s' % files) |
|
|
log.error('Could not identify quality for: %s' % files) |
|
|
return {} |
|
|
return self.setCache(hash, quality) |
|
|