Browse Source

Change only cache entries to name cache if regex type (anime/normal) matches parsed show_obj setting.

Change add flushing of name parser cache when switching anime settings of a show.
tags/release_0.24.7^2
Prinz23 4 years ago
committed by JackDandy
parent
commit
0fe35f1706
  1. 19
      sickbeard/name_parser/parser.py
  2. 3
      sickbeard/providers/generic.py
  3. 3
      sickbeard/webserve.py

19
sickbeard/name_parser/parser.py

@ -44,12 +44,13 @@ from ..classes import OrderedDefaultdict
from .._legacy_classes import LegacyParseResult
from _23 import decode_str, list_keys, list_range
from six import iterkeys, itervalues, PY2, string_types, text_type
from six import iteritems, iterkeys, itervalues, PY2, string_types, text_type
# noinspection PyUnreachableCode
if False:
# noinspection PyUnresolvedReferences
from typing import Any, AnyStr, Dict, List, Optional
from ..tv import TVShow
class NameParser(object):
@ -632,7 +633,8 @@ class NameParser(object):
and not final_result.release_group and None is not release_group:
final_result.release_group = release_group # use provider ID otherwise pick_best_result fails
if cache_result:
if cache_result \
and any('anime' in wr for wr in final_result.which_regex) == bool(final_result.show_obj.is_anime):
name_parser_cache.add(name, final_result)
logger.log(u'Parsed %s into %s' % (name, final_result), logger.DEBUG)
@ -828,7 +830,7 @@ class ParseResult(LegacyParseResult):
class NameParserCache(object):
def __init__(self):
super(NameParserCache, self).__init__()
self._previous_parsed = OrderedDefaultdict()
self._previous_parsed = OrderedDefaultdict() # type: Dict[AnyStr, ParseResult]
self._cache_size = 1000
self.lock = threading.Lock()
@ -868,6 +870,17 @@ class NameParserCache(object):
self._previous_parsed.move_to_end(name)
return self._previous_parsed[name]
def flush(self, show_obj):
# type: (TVShow) -> None
"""
removes all entries corresponding to the given show_obj
:param show_obj: TVShow object
"""
with self.lock:
self._previous_parsed = OrderedDefaultdict(None, [(k, v) for k, v in iteritems(self._previous_parsed)
if v.show_obj != show_obj])
name_parser_cache = NameParserCache()

3
sickbeard/providers/generic.py

@ -1131,8 +1131,7 @@ class GenericProvider(object):
parser = NameParser(False, show_obj=self.get_show(item, **kwargs), convert=True, indexer_lookup=False)
# parse the file name
try:
cache_result = not (show_obj and show_obj.is_anime)
parse_result = parser.parse(title, cache_result=cache_result, release_group=self.get_id())
parse_result = parser.parse(title, release_group=self.get_id())
except InvalidNameException:
logger.log(u'Unable to parse the filename %s into a valid episode' % title, logger.DEBUG)
continue

3
sickbeard/webserve.py

@ -2673,6 +2673,9 @@ class Home(MainHandler):
except exceptions_helper.CantRefreshException as e:
errors.append('Unable to refresh this show: ' + ex(e))
if bool(anime) != show_obj.is_anime:
sickbeard.name_parser.parser.name_parser_cache.flush(show_obj)
show_obj.paused = paused
show_obj.scene = scene
show_obj.anime = anime

Loading…
Cancel
Save