1
0
mirror of https://github.com/moparisthebest/SickRage synced 2024-12-13 11:32:20 -05:00

Added thread locking for queues.

Fixed imdbinfo issues.
This commit is contained in:
echel0n 2014-06-07 11:36:26 -07:00
parent cfcc35ebcc
commit 2c0f3a3dc3
3 changed files with 67 additions and 49 deletions

View File

@ -61,48 +61,47 @@ class GenericQueue(object):
# only start a new task if one isn't already going
if self.thread == None or self.thread.isAlive() == False:
with self.lock:
# if the thread is dead then the current item should be finished
if self.currentItem != None:
self.currentItem.finish()
self.currentItem = None
# if the thread is dead then the current item should be finished
if self.currentItem != None:
self.currentItem.finish()
self.currentItem = None
# if there's something in the queue then run it in a thread and take it out of the queue
if len(self.queue) > 0:
# if there's something in the queue then run it in a thread and take it out of the queue
if len(self.queue) > 0:
# sort by priority
def sorter(x,y):
"""
Sorts by priority descending then time ascending
"""
if x.priority == y.priority:
if y.added == x.added:
return 0
elif y.added < x.added:
return 1
elif y.added > x.added:
return -1
else:
return y.priority-x.priority
# sort by priority
def sorter(x,y):
"""
Sorts by priority descending then time ascending
"""
if x.priority == y.priority:
if y.added == x.added:
return 0
elif y.added < x.added:
return 1
elif y.added > x.added:
return -1
else:
return y.priority-x.priority
with self.lock:
self.queue.sort(cmp=sorter)
queueItem = self.queue[0]
if queueItem.priority < self.min_priority:
return
queueItem = self.queue[0]
# launch the queue item in a thread
# TODO: improve thread name
threadName = self.queue_name + '-' + queueItem.get_thread_name()
self.thread = threading.Thread(None, queueItem.execute, threadName)
self.thread.start()
if queueItem.priority < self.min_priority:
return
self.currentItem = queueItem
# launch the queue item in a thread
# TODO: improve thread name
threadName = self.queue_name + '-' + queueItem.get_thread_name()
self.thread = threading.Thread(None, queueItem.execute, threadName)
self.thread.start()
# take it out of the queue
del self.queue[0]
self.currentItem = queueItem
# take it out of the queue
del self.queue[0]
class QueueItem:
def __init__(self, name, action_id = 0):

View File

@ -892,11 +892,21 @@ class TVShow(object):
imdb_info[key] = imdbTv.get(key.replace('_', ' '))
# Filter only the value
imdb_info['runtimes'] = re.search('\d+', imdb_info['runtimes']).group(0) or self.runtime
imdb_info['akas'] = '|'.join(imdb_info['akas']) or ''
if imdb_info['runtimes']:
imdb_info['runtimes'] = re.search('\d+', imdb_info['runtimes']).group(0)
else:
imdb_info['runtimes'] = self.runtime
if imdb_info['akas']:
imdb_info['akas'] = '|'.join(imdb_info['akas'])
else:
imdb_info['akas'] = ''
# Join all genres in a string
imdb_info['genres'] = '|'.join(imdb_info['genres']) or ''
if imdb_info['genres']:
imdb_info['genres'] = '|'.join(imdb_info['genres'])
else:
imdb_info['genres'] = ''
# Get only the production country certificate if any
if imdb_info['certificates'] and imdb_info['countries']:
@ -912,7 +922,11 @@ class TVShow(object):
else:
imdb_info['certificates'] = ''
imdb_info['country_codes'] = '|'.join(imdb_info['country_codes']) or ''
if imdb_info['country_codes']:
imdb_info['country_codes'] = '|'.join(imdb_info['country_codes'])
else:
imdb_info['country_codes'] = ''
imdb_info['last_update'] = datetime.date.today().toordinal()
# Rename dict keys without spaces for DB upsert
@ -1499,14 +1513,20 @@ class TVEpisode(object):
self.indexer = int(sqlResults[0]["indexer"])
# does one now a better way to test for NULL in the db field ?
if sqlResults[0]["scene_season"]:
self.scene_season = int(sqlResults[0]["scene_season"] or 0)
try:
self.scene_season = int(sqlResults[0]["scene_season"])
except:
self.scene_season = 0
if sqlResults[0]["scene_episode"]:
self.scene_episode = int(sqlResults[0]["scene_episode"] or 0)
try:
self.scene_episode = int(sqlResults[0]["scene_episode"])
except:
self.scene_episode = 0
if sqlResults[0]["scene_absolute_number"]:
self.scene_absolute_number = int(sqlResults[0]["scene_absolute_number"] or 0)
try:
self.scene_absolute_number = int(sqlResults[0]["scene_absolute_number"])
except:
self.scene_absolute_number = 0
if sqlResults[0]["release_name"] is not None:
self.release_name = sqlResults[0]["release_name"]
@ -2355,8 +2375,7 @@ class TVEpisode(object):
for curEp in [self] + self.relatedEps:
curEp.checkForMetaFiles()
# save any changes to the database
# save any changes to the databas
sql_l = []
with self.lock:
sql_l.append(self.get_sql())

View File

@ -3577,9 +3577,9 @@ class Home:
# mass add to database
sql_l.append(epObj.get_sql())
if sql_l:
myDB = db.DBConnection()
myDB.mass_action(sql_l)
if sql_l:
myDB = db.DBConnection()
myDB.mass_action(sql_l)
if int(status) == WANTED:
msg = "Backlog was automatically started for the following seasons of <b>" + showObj.name + "</b>:<br />"