Browse Source

Added "types" parameter to "quality.single", support for property matching in getCatId()

pull/3761/head
Dean Gardiner 11 years ago
parent
commit
a0b0e3055e
  1. 36
      couchpotato/core/media/_base/providers/base.py
  2. 5
      couchpotato/core/media/_base/quality/base.py
  3. 9
      couchpotato/core/media/_base/quality/main.py
  4. 9
      couchpotato/core/media/_base/searcher/main.py

36
couchpotato/core/media/_base/providers/base.py

@ -259,8 +259,8 @@ class YarrProvider(Provider):
if quality.get('custom'): if quality.get('custom'):
want_3d = quality['custom'].get('3d') want_3d = quality['custom'].get('3d')
for ids, qualities in self.cat_ids: for ids, value in self.cat_ids:
if identifier in qualities or (want_3d and '3d' in qualities): if self.categoryMatch(value, quality, identifier, want_3d):
return ids return ids
if self.cat_backup_id: if self.cat_backup_id:
@ -268,6 +268,38 @@ class YarrProvider(Provider):
return [] return []
def categoryMatch(self, value, quality, identifier, want_3d):
if type(value) is list:
# Basic identifier matching
if identifier in value:
return True
if want_3d and '3d' in value:
return True
return False
if type(value) is dict:
# Property matching
for key in ['codec', 'resolution', 'source']:
if key not in quality:
continue
for required in quality.get(key):
# Ensure category contains property list
if key not in value:
return False
# Ensure required property is in category
if required not in value[key]:
return False
# Valid
return True
# Unknown failure
return False
class ResultList(list): class ResultList(list):

5
couchpotato/core/media/_base/quality/base.py

@ -50,7 +50,10 @@ class QualityBase(Plugin):
return self.pre_releases return self.pre_releases
def get(self, identifier): def get(self, identifier, types = None):
if types and self.type not in types:
return
for q in self.qualities: for q in self.qualities:
if identifier == q.get('identifier'): if identifier == q.get('identifier'):
return q return q

9
couchpotato/core/media/_base/quality/main.py

@ -31,13 +31,18 @@ class Quality(Plugin):
addApiView('quality.size.save', self.saveSize) addApiView('quality.size.save', self.saveSize)
def single(self, identifier = ''): def single(self, identifier = '', types = None):
db = get_db() db = get_db()
quality = db.get('quality', identifier, with_doc = True)['doc'] quality = db.get('quality', identifier, with_doc = True)['doc']
if quality: if quality:
return mergeDicts( return mergeDicts(
fireEvent('quality.get', quality['identifier'], single = True), fireEvent(
'quality.get',
quality['identifier'],
types = types,
single = True
),
quality quality
) )

9
couchpotato/core/media/_base/searcher/main.py

@ -90,7 +90,14 @@ class Searcher(SearcherBase):
found = {} found = {}
# Try guessing via quality tags # Try guessing via quality tags
guess = fireEvent('quality.guess', files = [nzb.get('name')], size = nzb.get('size', None), types = types, single = True) guess = fireEvent(
'quality.guess',
files = [nzb.get('name')],
size = nzb.get('size', None),
types = types,
single = True
)
if guess: if guess:
found[guess['identifier']] = True found[guess['identifier']] = True

Loading…
Cancel
Save