diff --git a/gui/slick/interfaces/default/displayShow.tmpl b/gui/slick/interfaces/default/displayShow.tmpl
index 299b5d61..e19a0f26 100644
--- a/gui/slick/interfaces/default/displayShow.tmpl
+++ b/gui/slick/interfaces/default/displayShow.tmpl
@@ -22,7 +22,7 @@
-
+
@@ -54,7 +54,7 @@
- #end if
+ #end if
\ No newline at end of file
diff --git a/gui/slick/js/sceneExceptionsTooltip.js b/gui/slick/js/sceneExceptionsTooltip.js
index b894e739..c1ad1131 100644
--- a/gui/slick/js/sceneExceptionsTooltip.js
+++ b/gui/slick/js/sceneExceptionsTooltip.js
@@ -1,5 +1,5 @@
$(function () {
- $('.showTitle a').each(function () {
+ $('.title a').each(function () {
match = $(this).parent().attr("id").match(/^scene_exception_(\d+)$/);
$(this).qtip({
content: {
@@ -32,7 +32,7 @@ $(function () {
corner: true,
method: 'polygon'
},
- classes: 'ui-tooltip-rounded ui-tooltip-shadow ui-tooltip-sb'
+ classes: 'qtip-rounded qtip-shadow ui-tooltip-sb'
}
});
});
diff --git a/sickbeard/dailysearcher.py b/sickbeard/dailysearcher.py
index 6e311508..2df7f78b 100644
--- a/sickbeard/dailysearcher.py
+++ b/sickbeard/dailysearcher.py
@@ -42,9 +42,6 @@ class DailySearcher():
self.amActive = True
- # remove names from cache that link back to active shows that we watch
- sickbeard.name_cache.syncNameCache()
-
logger.log(u"Searching for coming episodes and 1 weeks worth of previously WANTED episodes ...")
fromDate = datetime.date.today() - datetime.timedelta(weeks=1)
@@ -88,6 +85,10 @@ class DailySearcher():
if len(todaysEps):
for show in todaysEps:
segment = todaysEps[show]
+
+ # remove show from name cache if marked invalid
+ sickbeard.name_cache.clearCache(show)
+
dailysearch_queue_item = sickbeard.search_queue.DailySearchQueueItem(show, segment)
sickbeard.searchQueueScheduler.action.add_item(dailysearch_queue_item) #@UndefinedVariable
else:
diff --git a/sickbeard/name_cache.py b/sickbeard/name_cache.py
index 3fb87ce4..a39e5192 100644
--- a/sickbeard/name_cache.py
+++ b/sickbeard/name_cache.py
@@ -59,20 +59,14 @@ def retrieveShowFromCache(name):
if indexerid:
return sickbeard.helpers.findCertainShow(sickbeard.showList, int(indexerid))
-def syncNameCache():
- cacheDB = db.DBConnection('cache.db')
-
- for curShow in sickbeard.showList:
- for show_name in set(sickbeard.show_name_helpers.allPossibleShowNames(curShow)):
- sqlResult = cacheDB.action("DELETE FROM scene_names WHERE name = ? and indexer_id = ?", [show_name, 0])
- if sqlResult.rowcount > 0:
- logger.log(u"Removing invalid record for [" + show_name + "] from cache ...")
- break
-
-def clearCache():
+def clearCache(show=None, season=-1, indexer_id=0):
"""
Deletes all "unknown" entries from the cache (names with indexer_id of 0).
"""
cacheDB = db.DBConnection('cache.db')
- cacheDB.action("DELETE FROM scene_names WHERE indexer_id = ?", [0])
-
+ if show:
+ showNames = sickbeard.show_name_helpers.allPossibleShowNames(show, season=season)
+ for showName in showNames:
+ cacheDB.action("DELETE FROM scene_names WHERE name = ? and indexer_id = ?", [showName, indexer_id])
+ else:
+ cacheDB.action("DELETE FROM scene_names WHERE indexer_id = ?", [indexer_id])
\ No newline at end of file
diff --git a/sickbeard/scene_exceptions.py b/sickbeard/scene_exceptions.py
index 0e1ccd25..9203c496 100644
--- a/sickbeard/scene_exceptions.py
+++ b/sickbeard/scene_exceptions.py
@@ -17,6 +17,7 @@
# along with SickRage. If not, see .
import re
+import threading
import sickbeard
from lib import adba
@@ -38,13 +39,17 @@ def get_scene_exceptions(indexer_id, season=-1):
if indexer_id not in exceptionCache or season not in exceptionCache[indexer_id]:
myDB = db.DBConnection("cache.db")
- exceptions = myDB.select("SELECT show_name FROM scene_exceptions WHERE indexer_id = ? and season = ?", [indexer_id, season])
- exceptionsList = [cur_exception["show_name"] for cur_exception in exceptions]
- if not indexer_id in exceptionCache:
- exceptionCache[indexer_id] = {}
- exceptionCache[indexer_id][season] = exceptionsList
+ exceptions = myDB.select("SELECT show_name FROM scene_exceptions WHERE indexer_id = ? and season = ?",
+ [indexer_id, season])
+ exceptionsList = list(set([cur_exception["show_name"] for cur_exception in exceptions]))
+
+ if len(exceptionsList):
+ try:
+ exceptionCache[indexer_id][season] = exceptionsList
+ except:
+ exceptionCache[indexer_id] = {season:exceptionsList}
else:
- exceptionsList = exceptionCache[indexer_id][season]
+ exceptionsList = list(set(exceptionCache[indexer_id][season]))
if season == 1: # if we where looking for season 1 we can add generic names
exceptionsList += get_scene_exceptions(indexer_id, season=-1)
@@ -70,14 +75,17 @@ def get_scene_seasons(indexer_id):
global exceptionSeasonCache
if indexer_id not in exceptionSeasonCache:
myDB = db.DBConnection("cache.db")
- sqlResults = myDB.select("SELECT DISTINCT(season) as season FROM scene_exceptions WHERE indexer_id = ?", [indexer_id])
+ sqlResults = myDB.select("SELECT DISTINCT(season) as season FROM scene_exceptions WHERE indexer_id = ?",
+ [indexer_id])
exceptionSeasonCache[indexer_id] = [int(x["season"]) for x in sqlResults]
return exceptionSeasonCache[indexer_id]
+
def get_scene_exception_by_name(show_name):
return get_scene_exception_by_name_multiple(show_name)[0]
+
def get_scene_exception_by_name_multiple(show_name):
"""
Given a show name, return the indexerid of the exception, None if no exception
@@ -87,7 +95,9 @@ def get_scene_exception_by_name_multiple(show_name):
myDB = db.DBConnection("cache.db")
# try the obvious case first
- exception_result = myDB.select("SELECT indexer_id, season FROM scene_exceptions WHERE LOWER(show_name) = ? ORDER BY season ASC", [show_name.lower()])
+ exception_result = myDB.select(
+ "SELECT indexer_id, season FROM scene_exceptions WHERE LOWER(show_name) = ? ORDER BY season ASC",
+ [show_name.lower()])
if exception_result:
return [(int(x["indexer_id"]), int(x["season"])) for x in exception_result]
@@ -99,7 +109,8 @@ def get_scene_exception_by_name_multiple(show_name):
cur_indexer_id = int(cur_exception["indexer_id"])
cur_season = int(cur_exception["season"])
- if show_name.lower() in (cur_exception_name.lower(), sickbeard.helpers.sanitizeSceneName(cur_exception_name).lower().replace('.', ' ')):
+ if show_name.lower() in (
+ cur_exception_name.lower(), sickbeard.helpers.sanitizeSceneName(cur_exception_name).lower().replace('.', ' ')):
logger.log(u"Scene exception lookup got indexer id " + str(cur_indexer_id) + u", using that", logger.DEBUG)
out.append((cur_indexer_id, cur_season))
if out:
@@ -107,18 +118,21 @@ def get_scene_exception_by_name_multiple(show_name):
else:
return [(None, None)]
+
def retrieve_exceptions():
"""
Looks up the exceptions on github, parses them into a dict, and inserts them into the
scene_exceptions table in cache.db. Also clears the scene name cache.
"""
- global exceptionCache, exceptionSeasonCache
+ global exceptionCache, exceptionSeasonCache, exceptionIndexerCache
exception_dict = {}
+ exceptionCache = {}
+ exceptionSeasonCache = {}
+ exceptionIndexerCache = {}
# exceptions are stored on github pages
-
for indexer in sickbeard.indexerApi().indexers:
logger.log(u"Checking for scene exception updates for " + sickbeard.indexerApi(indexer).name + "")
@@ -135,7 +149,7 @@ def retrieve_exceptions():
# each exception is on one line with the format indexer_id: 'show name 1', 'show name 2', etc
for cur_line in url_data.splitlines():
cur_line = cur_line.decode('utf-8')
- indexer_id, sep, aliases = cur_line.partition(':') #@UnusedVariable
+ indexer_id, sep, aliases = cur_line.partition(':') # @UnusedVariable
if not aliases:
continue
@@ -143,7 +157,7 @@ def retrieve_exceptions():
indexer_id = int(indexer_id)
# regex out the list of shows, taking \' into account
- #alias_list = [re.sub(r'\\(.)', r'\1', x) for x in re.findall(r"'(.*?)(?