Browse Source

Fixes issues with scene exception updating when editing a show, should resolve problems with it duplicating scene exception name over and over again.

Reduced DB sleep timer to increase overall performance of application.

Improved generic queue code for threading.
tags/release_0.1.0
echel0n 11 years ago
parent
commit
636bbfa2de
  1. 4
      sickbeard/db.py
  2. 19
      sickbeard/generic_queue.py
  3. 10
      sickbeard/name_parser/parser.py
  4. 11
      sickbeard/postProcessor.py
  5. 13
      sickbeard/scene_exceptions.py
  6. 4
      sickbeard/search.py

4
sickbeard/db.py

@ -164,7 +164,7 @@ class DBConnection(object):
logger.log(u"Fatal error executing query: " + ex(e), logger.ERROR)
raise
time.sleep(0.05)
time.sleep(0.02)
return sqlResult
@ -201,7 +201,7 @@ class DBConnection(object):
logger.log(u"Fatal error executing query: " + ex(e), logger.ERROR)
raise
time.sleep(0.05)
time.sleep(0.02)
return sqlResult

19
sickbeard/generic_queue.py

@ -31,7 +31,6 @@ class QueuePriorities:
class GenericQueue(object):
def __init__(self):
self.queueItem = None
self.currentItem = None
self.queue = []
@ -59,7 +58,7 @@ class GenericQueue(object):
def run(self, force=False):
# only start a new task if one isn't already going
if self.queueItem is None or not self.queueItem.isAlive():
if self.currentItem is None or not self.currentItem.isAlive():
# if the thread is dead then the current item should be finished
if self.currentItem:
@ -85,19 +84,13 @@ class GenericQueue(object):
return y.priority - x.priority
self.queue.sort(cmp=sorter)
queueItem = self.queue.pop(0)
if queueItem.priority < self.min_priority:
if self.queue[0].priority < self.min_priority:
return
# launch the queue item in a thread
queueItem.name = self.queue_name + '-' + queueItem.name
queueItem.start()
self.currentItem = queueItem
queueItem.join()
self.currentItem = self.queue.pop(0)
self.currentItem.name = self.queue_name + '-' + self.currentItem.name
self.currentItem.start()
class QueueItem(threading.Thread):
def __init__(self, name, action_id=0):
@ -107,8 +100,8 @@ class QueueItem(threading.Thread):
self.inProgress = False
self.priority = QueuePriorities.NORMAL
self.action_id = action_id
self.added = None
self.stop = threading.Event()
self.added = None
def run(self):
"""Implementing classes should call this"""

10
sickbeard/name_parser/parser.py

@ -104,14 +104,14 @@ class NameParser(object):
matches = []
bestResult = None
doneSearch = False
for regexMode in self.regexModes:
if doneSearch:
break
self._compile_regexes(regexMode)
for (cur_regexMode, cur_regex_name, cur_regex) in self.compiled_regexes:
time.sleep(0.02)
match = cur_regex.match(name)
if not match:
@ -140,6 +140,7 @@ class NameParser(object):
if result.show:
# confirm passed in show object indexer id matches result show object indexer id
if self.showObj and self.showObj.indexerid != result.show.indexerid:
doneSearch = True
break
# confirm we are using correct regex mode
@ -255,6 +256,9 @@ class NameParser(object):
bestResult.episode_numbers = new_episode_numbers
bestResult.season_number = new_season_numbers[0]
# CPU sleep
time.sleep(0.02)
return bestResult
def _combine_results(self, first, second, attr):

11
sickbeard/postProcessor.py

@ -410,16 +410,15 @@ class PostProcessor(object):
if len(sql_results) == 0:
continue
show = helpers.findCertainShow(sickbeard.showList, int(sql_results[0]["showid"]))
if not show:
continue
indexer_id = int(sql_results[0]["showid"])
season = int(sql_results[0]["season"])
quality = int(sql_results[0]["quality"])
if quality == common.Quality.UNKNOWN:
quality = None
show = helpers.findCertainShow(sickbeard.showList, indexer_id)
self.in_history = True
to_return = (show, season, [], quality)
self._log("Found result in history: " + str(to_return), logger.DEBUG)
@ -599,7 +598,9 @@ class PostProcessor(object):
logger.log(u"Unable to parse, skipping: " + ex(e), logger.DEBUG)
continue
if cur_show:
if not cur_show:
continue
else:
show = cur_show
if cur_quality and not (self.in_history and quality):

13
sickbeard/scene_exceptions.py

@ -259,17 +259,16 @@ def update_scene_exceptions(indexer_id, scene_exceptions):
"""
myDB = db.DBConnection('cache.db')
myDB.action('DELETE FROM scene_exceptions WHERE indexer_id=? and custom=1', [indexer_id])
myDB.action('DELETE FROM scene_exceptions WHERE indexer_id=?', [indexer_id])
logger.log(u"Updating scene exceptions", logger.MESSAGE)
for cur_season in [-1] + get_scene_seasons(indexer_id):
for cur_exception in scene_exceptions:
for cur_exception in scene_exceptions:
if not isinstance(cur_exception, unicode):
cur_exception = unicode(cur_exception, 'utf-8', 'replace')
if not isinstance(cur_exception, unicode):
cur_exception = unicode(cur_exception, 'utf-8', 'replace')
myDB.action("INSERT INTO scene_exceptions (indexer_id, show_name, season, custom) VALUES (?,?,?,?)",
[indexer_id, cur_exception, cur_season, 1])
myDB.action("INSERT INTO scene_exceptions (indexer_id, show_name, season) VALUES (?,?,?)",
[indexer_id, cur_exception, -1])
def _anidb_exceptions_fetcher():
global anidb_exception_dict

4
sickbeard/search.py

@ -427,14 +427,14 @@ def searchProviders(show, season, episodes, manualSearch=False):
logger.log(u"" + str(show.name) + " is not an anime skiping ...")
continue
foundResults.setdefault(provider.name, {})
foundResults[provider.name] = {}
searchCount = 0
search_mode = 'eponly'
if seasonSearch and provider.search_mode == 'sponly':
search_mode = provider.search_mode
while (True):
while(True):
searchCount += 1
if search_mode == 'sponly':

Loading…
Cancel
Save