Browse Source

Merge branch 'hotfix/0.21.8'

tags/release_0.21.8^0 release_0.21.8
JackDandy 5 years ago
parent
commit
c48659025c
  1. 9
      CHANGES.md
  2. 32
      sickbeard/name_cache.py
  3. 8
      sickbeard/postProcessor.py
  4. 3
      sickbeard/providers/omgwtfnzbs.py
  5. 4
      sickbeard/tv_base.py

9
CHANGES.md

@ -1,4 +1,11 @@
### 0.21.7 (2020-01-24 15:05:00 UTC)
### 0.21.8 (2020-01-27 09:00:00 UTC)
* Fix issue processing files with no quality parsed
* Change remove nonsense text that quality of pp item is from snatch history given that it may not be
* Fix update NameCache in case show name changes
### 0.21.7 (2020-01-24 15:05:00 UTC)
* Fix rTorrent py3 compat
* Fix edit show with multiple list values under py3

32
sickbeard/name_cache.py

@ -22,12 +22,12 @@ import sickbeard
from . import db
from .helpers import try_int
from _23 import list_items
from six import iteritems
# noinspection PyUnreachableCode
if False:
from typing import AnyStr, Tuple, Union
from typing import AnyStr, Optional, Tuple, Union
from .tv import TVShow, TVShowBase
nameCache = {}
nameCacheLock = threading.Lock()
@ -47,10 +47,11 @@ def addNameToCache(name, tvid=0, prodid=0, season=-1):
"""
global nameCache
# standardize the name we're using to account for small differences in providers
name = sickbeard.helpers.full_sanitize_scene_name(name)
if name not in nameCache:
nameCache[name] = [int(tvid), int(prodid), season]
with nameCacheLock:
# standardize the name we're using to account for small differences in providers
name = sickbeard.helpers.full_sanitize_scene_name(name)
if name not in nameCache:
nameCache[name] = [int(tvid), int(prodid), season]
def retrieveNameFromCache(name):
@ -63,16 +64,19 @@ def retrieveNameFromCache(name):
global nameCache
name = sickbeard.helpers.full_sanitize_scene_name(name)
if name in nameCache:
return int(nameCache[name][0]), int(nameCache[name][1])
try:
if name in nameCache:
return int(nameCache[name][0]), int(nameCache[name][1])
except (BaseException, Exception):
pass
return None, None
def buildNameCache(show_obj=None):
# type: (Optional[Union[TVShow, TVShowBase]]) -> None
"""Adds all new name exceptions to the namecache memory and flushes any removed name exceptions
:param show_obj : (optional) Only update namecache for this show object
:type show_obj: sickbeard.tv.TVShow or None
:param show_obj : Only update name cache for this show object, otherwise update all
"""
global nameCache
with nameCacheLock:
@ -80,7 +84,8 @@ def buildNameCache(show_obj=None):
if show_obj:
# search for only the requested show id and flush old show entries from namecache
show_ids = {show_obj.tvid: [show_obj.prodid]}
nameCache = dict([(k, v) for k, v in list_items(nameCache) if v != (show_obj.tvid, show_obj.prodid)])
nameCache = dict([(k, v) for k, v in iteritems(nameCache)
if not (v[0] == show_obj.tvid and v[1] == show_obj.prodid)])
# add standard indexer name to namecache
nameCache[sickbeard.helpers.full_sanitize_scene_name(show_obj.name)] = [show_obj.tvid, show_obj.prodid, -1]
@ -123,5 +128,6 @@ def remove_from_namecache(tvid, prodid):
"""
global nameCache
if nameCache:
nameCache = dict([(k, v) for k, v in list_items(nameCache) if v != (tvid, prodid)])
with nameCacheLock:
if nameCache:
nameCache = dict([(k, v) for k, v in iteritems(nameCache) if not (v[0] == tvid and v[1] == prodid)])

8
sickbeard/postProcessor.py

@ -66,7 +66,8 @@ class PostProcessor(object):
nzb_name: The name of the NZB which resulted in this file being downloaded (optional)
"""
# absolute path to the folder that is being processed
self.folder_path = long_path(ek.ek(os.path.dirname, long_path(ek.ek(os.path.abspath, long_path(file_path))))) # type: AnyStr
self.folder_path = long_path(ek.ek(os.path.dirname, long_path(
ek.ek(os.path.abspath, long_path(file_path))))) # type: AnyStr
# full path to file
self.file_path = long_path(file_path) # type: AnyStr
@ -1032,12 +1033,11 @@ class PostProcessor(object):
ep_obj = self._get_ep_obj(show_obj, season_number, episode_numbers)
# get the quality of the episode we're processing
if common.Quality.UNKNOWN == quality:
if quality in (None, common.Quality.UNKNOWN):
new_ep_quality = self._get_quality(ep_obj)
else:
new_ep_quality = quality
self._log(u'Using "%s" quality from the snatch history'
% common.Quality.qualityStrings[new_ep_quality], logger.DEBUG)
self._log(u'Using "%s" quality' % common.Quality.qualityStrings[new_ep_quality], logger.DEBUG)
# see if it's safe to replace existing episode (is download snatched, PROPER, better quality)
if not self._safe_replace(ep_obj, new_ep_quality):

3
sickbeard/providers/omgwtfnzbs.py

@ -55,6 +55,7 @@ class OmgwtfnzbsProvider(generic.NZBProvider):
'search_html': self.url_base + 'browse.php?cat=tv&search=%s'} # type: Dict[AnyStr, AnyStr]
self.needs_auth = True # type: bool
self.nn = True # type: bool
self.username, self.api_key, self.cookies = 3 * [None]
self.cache = OmgwtfnzbsCache(self)
@ -395,6 +396,8 @@ class OmgwtfnzbsProvider(generic.NZBProvider):
self.cookies = re.sub(r'(?i)([\s\']+|cookie\s*:)', '', api_key)
success, msg = self._check_cookie()
if success and self.nn:
success, msg = None, 'pm dev in irc about this feature'
if not success:
logger.log(u'%s: %s' % (msg, self.cookies), logger.WARNING)
self.cookies = None

4
sickbeard/tv_base.py

@ -20,6 +20,7 @@ import sickbeard
from . import logger
from ._legacy_classes import LegacyTVShow, LegacyTVEpisode
from .common import UNKNOWN
from .name_cache import buildNameCache
from six import string_types
@ -92,7 +93,10 @@ class TVShowBase(LegacyTVShow, TVBase):
@name.setter
def name(self, *arg):
_current_name = self._name
self.dirty_setter('_name')(self, *arg)
if _current_name != self._name:
buildNameCache(self)
# imdbid = property(lambda self: self._imdbid, dirty_setter('_imdbid'))
@property

Loading…
Cancel
Save