mirror of
https://github.com/SickGear/SickGear.git
synced 2024-11-26 14:43:38 +00:00
32987134ba
Cleanup most init warnings. Cleanup some vars, pythonic instead of js. Some typos and python var/func names for Scheduler. Remove legacy handlers deprecated in 2020. Remove some legacy tagged stuff. Cleanup ConfigParser and 23.py Change cleanup vendored scandir. Remove redundant pkg_resources.py in favour of the vendor folder. Remove backports. Remove trakt checker. Change remove redundant WindowsSelectorEventLoopPolicy from webserveInit. Cleanup varnames and providers Various minor tidy ups to remove ide warnings.
148 lines
5.7 KiB
Python
148 lines
5.7 KiB
Python
#
|
|
# This file is part of SickGear.
|
|
#
|
|
# SickGear is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# SickGear is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with SickGear. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
import threading
|
|
|
|
import sickgear
|
|
from . import db
|
|
from .helpers import full_sanitize_scene_name, try_int
|
|
|
|
from six import iteritems
|
|
|
|
# noinspection PyUnreachableCode
|
|
if False:
|
|
from typing import AnyStr, Optional, Tuple, Union
|
|
from .tv import TVShow, TVShowBase
|
|
|
|
nameCache = {}
|
|
sceneNameCache = {}
|
|
nameCacheLock = threading.Lock()
|
|
|
|
|
|
def add_name_to_cache(name, tvid=0, prodid=0, season=-1):
|
|
"""Adds the show & tvdb id to the namecache
|
|
|
|
:param name: the show name to cache
|
|
:type name: AnyStr
|
|
:param tvid: the tvinfo source id that this show should be cached with (can be None/0 for unknown)
|
|
:type tvid: int
|
|
:param prodid: the production id that this show should be cached with (can be None/0 for unknown)
|
|
:type prodid: int or long
|
|
:param season: the season the name exception belongs to. -1 for generic exception
|
|
:type season: int
|
|
"""
|
|
global nameCache
|
|
|
|
with nameCacheLock:
|
|
# standardize the name we're using to account for small differences in providers
|
|
name = full_sanitize_scene_name(name)
|
|
if name not in nameCache:
|
|
nameCache[name] = [int(tvid), int(prodid), season]
|
|
|
|
|
|
def retrieve_name_from_cache(name):
|
|
# type: (AnyStr) -> Union[Tuple[int, int], Tuple[None, None]]
|
|
"""Looks up the given name in the name cache
|
|
|
|
:param name: The show name to look up.
|
|
:return: the tuple of (tvid, prodid) id resulting from a cache lookup or None if the show wasn't found
|
|
"""
|
|
global nameCache
|
|
|
|
name = full_sanitize_scene_name(name)
|
|
try:
|
|
if name in nameCache:
|
|
return int(nameCache[name][0]), int(nameCache[name][1])
|
|
except (BaseException, Exception):
|
|
pass
|
|
return None, None
|
|
|
|
|
|
def build_name_cache(show_obj=None, update_only_scene=False):
|
|
# type: (Optional[Union[TVShow, TVShowBase]], bool) -> None
|
|
"""Adds all new name exceptions to the namecache memory and flushes any removed name exceptions
|
|
|
|
:param show_obj : Only update name cache for this show object, otherwise update all
|
|
:param update_only_scene: (optional) only update scene name cache
|
|
"""
|
|
global nameCache, sceneNameCache
|
|
with nameCacheLock:
|
|
|
|
if not update_only_scene:
|
|
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 iteritems(nameCache)
|
|
if not (v[0] == show_obj.tvid and v[1] == show_obj.prodid)])
|
|
sceneNameCache = dict([(k, v) for k, v in iteritems(sceneNameCache)
|
|
if not (v[0] == show_obj.tvid and v[1] == show_obj.prodid)])
|
|
|
|
# add standard indexer name to namecache
|
|
nameCache[full_sanitize_scene_name(show_obj.unique_name or show_obj.name)] = [show_obj.tvid, show_obj.prodid, -1]
|
|
else:
|
|
# generate list of production ids to look up in cache.db
|
|
show_ids = {}
|
|
for cur_show_obj in sickgear.showList:
|
|
show_ids.setdefault(cur_show_obj.tvid, []).append(cur_show_obj.prodid)
|
|
|
|
# add all standard show indexer names to namecache
|
|
nameCache = dict(
|
|
[(full_sanitize_scene_name(cur_so.unique_name or cur_so.name), [cur_so.tvid, cur_so.prodid, -1])
|
|
for cur_so in sickgear.showList if cur_so])
|
|
sceneNameCache = {}
|
|
|
|
cache_db = db.DBConnection()
|
|
|
|
cache_results = []
|
|
if update_only_scene:
|
|
# generate list of production ids to look up in cache.db
|
|
show_ids = {}
|
|
for cur_show_obj in sickgear.showList:
|
|
show_ids.setdefault(cur_show_obj.tvid, []).append(cur_show_obj.prodid)
|
|
tmp_scene_name_cache = {}
|
|
else:
|
|
tmp_scene_name_cache = sceneNameCache.copy()
|
|
|
|
for t, s in iteritems(show_ids):
|
|
cache_results += cache_db.select(
|
|
'SELECT show_name, indexer AS tv_id, indexer_id AS prod_id, season'
|
|
' FROM scene_exceptions'
|
|
' WHERE indexer = %s AND indexer_id IN (%s)' % (t, ','.join(['%s' % i for i in s])))
|
|
|
|
if cache_results:
|
|
for cache_result in cache_results:
|
|
tvid = int(cache_result['tv_id'])
|
|
prodid = int(cache_result['prod_id'])
|
|
season = try_int(cache_result['season'], -1)
|
|
name = full_sanitize_scene_name(cache_result['show_name'])
|
|
tmp_scene_name_cache[name] = [tvid, prodid, season]
|
|
|
|
sceneNameCache = tmp_scene_name_cache
|
|
|
|
|
|
def remove_from_namecache(tvid, prodid):
|
|
"""Deletes all entries from the namecache for a particular show
|
|
|
|
:param tvid: TV info source to be removed from the namecache
|
|
:type tvid: int
|
|
:param prodid: tvdbid or rageid to be removed from the namecache
|
|
:type prodid: int or long
|
|
"""
|
|
global nameCache
|
|
|
|
with nameCacheLock:
|
|
if nameCache:
|
|
nameCache = dict([(k, v) for k, v in iteritems(nameCache) if not (v[0] == tvid and v[1] == prodid)])
|