|
|
|
@ -111,6 +111,36 @@ class _ProviderConfigs(dict):
|
|
|
|
|
return super().update(items)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class _Banlist:
|
|
|
|
|
def __init__(self, must_not_contain, must_contain):
|
|
|
|
|
self.must_not_contain = must_not_contain
|
|
|
|
|
self.must_contain = must_contain
|
|
|
|
|
|
|
|
|
|
def is_valid(self, subtitle):
|
|
|
|
|
if subtitle.release_info is None:
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
if any([x for x in self.must_not_contain
|
|
|
|
|
if re.search(x, subtitle.release_info, flags=re.IGNORECASE) is not None]):
|
|
|
|
|
logger.info("Skipping subtitle because release name contains prohibited string: %s", subtitle)
|
|
|
|
|
return False
|
|
|
|
|
if any([x for x in self.must_contain
|
|
|
|
|
if re.search(x, subtitle.release_info, flags=re.IGNORECASE) is None]):
|
|
|
|
|
logger.info("Skipping subtitle because release name does not contains required string: %s", subtitle)
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class _Blacklist(list):
|
|
|
|
|
def is_valid(self, provider, subtitle):
|
|
|
|
|
blacklisted = not (str(provider), str(subtitle.id)) in self
|
|
|
|
|
if blacklisted:
|
|
|
|
|
logger.debug("Skipping blacklisted subtitle: %s", subtitle)
|
|
|
|
|
|
|
|
|
|
return blacklisted
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SZProviderPool(ProviderPool):
|
|
|
|
|
def __init__(self, providers=None, provider_configs=None, blacklist=None, ban_list=None, throttle_callback=None,
|
|
|
|
|
pre_download_hook=None, post_download_hook=None, language_hook=None):
|
|
|
|
@ -123,10 +153,10 @@ class SZProviderPool(ProviderPool):
|
|
|
|
|
#: Discarded providers
|
|
|
|
|
self.discarded_providers = set()
|
|
|
|
|
|
|
|
|
|
self.blacklist = blacklist or []
|
|
|
|
|
self.blacklist = _Blacklist(blacklist or [])
|
|
|
|
|
|
|
|
|
|
#: Should be a dict of 2 lists of strings
|
|
|
|
|
self.ban_list = ban_list or {'must_contain': [], 'must_not_contain': []}
|
|
|
|
|
self.ban_list = _Banlist(**(ban_list or {'must_contain': [], 'must_not_contain': []}))
|
|
|
|
|
|
|
|
|
|
self.throttle_callback = throttle_callback
|
|
|
|
|
|
|
|
|
@ -175,8 +205,8 @@ class SZProviderPool(ProviderPool):
|
|
|
|
|
# self.provider_configs = provider_configs
|
|
|
|
|
self.provider_configs.update(provider_configs)
|
|
|
|
|
|
|
|
|
|
self.blacklist = blacklist or []
|
|
|
|
|
self.ban_list = ban_list or {'must_contain': [], 'must_not_contain': []}
|
|
|
|
|
self.blacklist = _Blacklist(blacklist or [])
|
|
|
|
|
self.ban_list = _Banlist(**ban_list or {'must_contain': [], 'must_not_contain': []})
|
|
|
|
|
|
|
|
|
|
return updated
|
|
|
|
|
|
|
|
|
@ -267,18 +297,12 @@ class SZProviderPool(ProviderPool):
|
|
|
|
|
seen = []
|
|
|
|
|
out = []
|
|
|
|
|
for s in results:
|
|
|
|
|
if (str(provider), str(s.id)) in self.blacklist:
|
|
|
|
|
logger.info("Skipping blacklisted subtitle: %s", s)
|
|
|
|
|
if not self.blacklist.is_valid(provider, s):
|
|
|
|
|
continue
|
|
|
|
|
if s.release_info is not None:
|
|
|
|
|
if any([x for x in self.ban_list["must_not_contain"]
|
|
|
|
|
if re.search(x, s.release_info, flags=re.IGNORECASE) is not None]):
|
|
|
|
|
logger.info("Skipping subtitle because release name contains prohibited string: %s", s)
|
|
|
|
|
continue
|
|
|
|
|
if any([x for x in self.ban_list["must_contain"]
|
|
|
|
|
if re.search(x, s.release_info, flags=re.IGNORECASE) is None]):
|
|
|
|
|
logger.info("Skipping subtitle because release name does not contains required string: %s", s)
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
if not self.ban_list.is_valid(s):
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
if s.id in seen:
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|