Skip to content

Commit

Permalink
Merge branch 'develop' into issue-379
Browse files Browse the repository at this point in the history
  • Loading branch information
medariox committed Apr 15, 2016
2 parents 24a8bb9 + 25ecf9a commit 38cb231
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 15 deletions.
13 changes: 12 additions & 1 deletion sickbeard/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,11 +106,13 @@
versionCheckScheduler = None
showQueueScheduler = None
searchQueueScheduler = None
manualSnatchScheduler = None
properFinderScheduler = None
autoPostProcesserScheduler = None
subtitlesFinderScheduler = None
traktCheckerScheduler = None


showList = []

providerList = []
Expand Down Expand Up @@ -628,7 +630,7 @@ def initialize(consoleLogging=True): # pylint: disable=too-many-locals, too-man
USE_PUSHBULLET, PUSHBULLET_NOTIFY_ONSNATCH, PUSHBULLET_NOTIFY_ONDOWNLOAD, PUSHBULLET_NOTIFY_ONSUBTITLEDOWNLOAD, PUSHBULLET_API, PUSHBULLET_DEVICE, \
versionCheckScheduler, VERSION_NOTIFY, AUTO_UPDATE, NOTIFY_ON_UPDATE, PROCESS_AUTOMATICALLY, NO_DELETE, UNPACK, CPU_PRESET, \
KEEP_PROCESSED_DIR, PROCESS_METHOD, DELRARCONTENTS, TV_DOWNLOAD_DIR, UPDATE_FREQUENCY, \
showQueueScheduler, searchQueueScheduler, ROOT_DIRS, CACHE_DIR, ACTUAL_CACHE_DIR, TIMEZONE_DISPLAY, \
showQueueScheduler, searchQueueScheduler, manualSnatchScheduler, ROOT_DIRS, CACHE_DIR, ACTUAL_CACHE_DIR, TIMEZONE_DISPLAY, \
NAMING_PATTERN, NAMING_MULTI_EP, NAMING_ANIME_MULTI_EP, NAMING_FORCE_FOLDERS, NAMING_ABD_PATTERN, NAMING_CUSTOM_ABD, NAMING_SPORTS_PATTERN, NAMING_CUSTOM_SPORTS, NAMING_ANIME_PATTERN, NAMING_CUSTOM_ANIME, NAMING_STRIP_YEAR, \
RENAME_EPISODES, AIRDATE_EPISODES, FILE_TIMESTAMP_TIMEZONE, properFinderScheduler, PROVIDER_ORDER, autoPostProcesserScheduler, \
providerList, newznabProviderList, torrentRssProviderList, \
Expand Down Expand Up @@ -1467,6 +1469,10 @@ def path_leaf(path):
threadName="SHOWUPDATER",
start_time=datetime.time(hour=SHOWUPDATE_HOUR, minute=random.randint(0, 59)))

# snatcher used for manual search, manual picked results
manualSnatchScheduler = scheduler.Scheduler(search_queue.SnatchQueue(),
cycleTime=datetime.timedelta(seconds=3),
threadName="MANUALSNATCHQUEUE")
# searchers
searchQueueScheduler = scheduler.Scheduler(search_queue.SearchQueue(),
cycleTime=datetime.timedelta(seconds=3),
Expand Down Expand Up @@ -1556,6 +1562,10 @@ def start():
searchQueueScheduler.enable = True
searchQueueScheduler.start()

# start the search queue checker
manualSnatchScheduler.enable = True
manualSnatchScheduler.start()

# start the proper finder
if DOWNLOAD_PROPERS:
properFinderScheduler.silent = False
Expand Down Expand Up @@ -1611,6 +1621,7 @@ def halt():
versionCheckScheduler,
showQueueScheduler,
searchQueueScheduler,
manualSnatchScheduler,
autoPostProcesserScheduler,
traktCheckerScheduler,
properFinderScheduler,
Expand Down
4 changes: 2 additions & 2 deletions sickbeard/search.py
Original file line number Diff line number Diff line change
Expand Up @@ -503,10 +503,10 @@ def searchProviders(show, episodes, forced_search=False, downCurQuality=False, m
if manual_search:
logger.log("Using manual search providers")
providers = [x for x in sickbeard.providers.sortedProviderList(sickbeard.RANDOMIZE_PROVIDERS)
if x.is_active() and x.enable_manualsearch]
if x.is_active() and x.enable_manualsearch]
else:
providers = [x for x in sickbeard.providers.sortedProviderList(sickbeard.RANDOMIZE_PROVIDERS)
if x.is_active() and x.enable_backlog]
if x.is_active() and x.enable_backlog]

if not forced_search:
for cur_provider in providers:
Expand Down
65 changes: 55 additions & 10 deletions sickbeard/search_queue.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def is_in_queue(self, show, segment):

def is_ep_in_queue(self, segment):
for cur_item in self.queue:
if isinstance(cur_item, (ForcedSearchQueueItem, FailedQueueItem, ManualSearchQueueItem)) and cur_item.segment == segment:
if isinstance(cur_item, (ForcedSearchQueueItem, FailedQueueItem)) and cur_item.segment == segment:
return True
return False

Expand Down Expand Up @@ -106,11 +106,11 @@ def queue_length(self):
length['daily'] += 1
elif isinstance(cur_item, BacklogQueueItem):
length['backlog'] += 1
elif isinstance(cur_item, ForcedSearchQueueItem):
length['forced_search'] += 1
elif isinstance(cur_item, FailedQueueItem):
length['failed'] += 1
elif isinstance(cur_item, ManualSearchQueueItem):
elif isinstance(cur_item, ForcedSearchQueueItem) and not cur_item.manual_search:
length['forced_search'] += 1
elif isinstance(cur_item, ForcedSearchQueueItem) and cur_item.manual_search:
length['manual_search'] += 1
return length

Expand All @@ -121,13 +121,60 @@ def add_item(self, item):
elif isinstance(item, BacklogQueueItem) and not self.is_in_queue(item.show, item.segment):
# backlog searches
generic_queue.GenericQueue.add_item(self, item)
elif isinstance(item, (ForcedSearchQueueItem, ManualSearchQueueItem, FailedQueueItem)) and not self.is_ep_in_queue(item.segment):
elif isinstance(item, (ForcedSearchQueueItem, FailedQueueItem)) and not self.is_ep_in_queue(item.segment):
# manual, snatch and failed searches
generic_queue.GenericQueue.add_item(self, item)
else:
logger.log(u"Not adding item, it's already in the queue", logger.DEBUG)


class SnatchQueue(generic_queue.GenericQueue):
"""Queue for queuing ManualSnatchQueueItem objects (snatch jobs)"""
def __init__(self):
"""Initialize the SnatchQueue object"""
generic_queue.GenericQueue.__init__(self)
self.queue_name = "SNATCHQUEUE"

def is_in_queue(self, show, segment):
"""Check if the passed show and segment (episode of list of episodes) is in the queue
@param show: show object
@param segment: list of episode objects
@return: True or False
"""
for cur_item in self.queue:
if cur_item.show == show and cur_item.segment == segment:
return True
return False

def is_ep_in_queue(self, segment):
"""Check if the passed segment (episode of list of episodes) is in the queue
@param segment: list of episode objects
@return: True or False
"""
for cur_item in self.queue:
if cur_item.segment == segment:
return True
return False

def queue_length(self):
"""Get the length of the current queue
@return: length of queue
"""
return {'manual_snatch': len(self.queue)}

def add_item(self, item):
"""Add a ManualSnatchQueueItem queue item
@param item: ManualSnatchQueueItem gueue object
"""
if not self.is_in_queue(item.show, item.segment):
# backlog searches
generic_queue.GenericQueue.add_item(self, item)
else:
logger.log(u"Not adding item, it's already in the queue", logger.DEBUG)


class DailySearchQueueItem(generic_queue.QueueItem):
def __init__(self):
generic_queue.QueueItem.__init__(self, u'Daily Search', DAILY_SEARCH)
Expand Down Expand Up @@ -160,8 +207,6 @@ def run(self):

# give the CPU a break
time.sleep(common.cpu_presets[sickbeard.CPU_PRESET])
# What is this for ?!
generic_queue.QueueItem.finish(self)

except Exception:
self.success = False
Expand Down Expand Up @@ -234,7 +279,7 @@ def run(self):
self.finish()


class ManualSearchQueueItem(generic_queue.QueueItem):
class ManualSnatchQueueItem(generic_queue.QueueItem):
"""
A queue item that can be used to queue the snatch of a search result.
Currently used for the snatchSelection feature.
Expand All @@ -249,7 +294,7 @@ class ManualSearchQueueItem(generic_queue.QueueItem):
def __init__(self, show, segment, provider, cached_result):
generic_queue.QueueItem.__init__(self, u'Manual Search', MANUAL_SEARCH)
self.priority = generic_queue.QueuePriorities.HIGH
self.name = 'MANUALSEARCH-' + str(show.indexerid)
self.name = 'MANUALSNATCH-' + str(show.indexerid)
self.success = None
self.started = None
self.results = None
Expand All @@ -260,7 +305,7 @@ def __init__(self, show, segment, provider, cached_result):

def run(self):
"""
Run manual search thread
Run manual snatch job
"""
generic_queue.QueueItem.run(self)
self.started = True
Expand Down
4 changes: 2 additions & 2 deletions sickbeard/webserve.py
Original file line number Diff line number Diff line change
Expand Up @@ -1455,10 +1455,10 @@ def pickManualSearch(self, provider=None, rowid=None):
ep_objs.append(TVEpisode(show_obj, int(cached_result['season']), int(episode)))

# Create the queue item
snatch_queue_item = search_queue.ManualSearchQueueItem(show_obj, ep_objs, provider, cached_result)
snatch_queue_item = search_queue.ManualSnatchQueueItem(show_obj, ep_objs, provider, cached_result)

# Add the queue item to the queue
sickbeard.searchQueueScheduler.action.add_item(snatch_queue_item)
sickbeard.manualSnatchScheduler.action.add_item(snatch_queue_item)

while snatch_queue_item.success is not False:
if snatch_queue_item.started and snatch_queue_item.success:
Expand Down

0 comments on commit 38cb231

Please sign in to comment.