Browse Source

Add support for events to generic_queue.

Add daily update finished event to show_queue.
Add kodi nfo uid updated to the event.
pull/1289/head
Prinz23 5 years ago
committed by JackDandy
parent
commit
ee47bf574e
  1. 41
      sickbeard/generic_queue.py
  2. 8
      sickbeard/metadata/kodi.py
  3. 12
      sickbeard/show_queue.py
  4. 3
      sickbeard/show_updater.py

41
sickbeard/generic_queue.py

@ -21,10 +21,12 @@ import datetime
import threading import threading
from . import logger from . import logger
from exceptions_helper import ex
from six import integer_types
# noinspection PyUnreachableCode # noinspection PyUnreachableCode
if False: if False:
from typing import AnyStr, List, Union from typing import AnyStr, Callable, Dict, List, Tuple, Union
from .search_queue import BaseSearchQueueItem from .search_queue import BaseSearchQueueItem
from .show_queue import ShowQueueItem from .show_queue import ShowQueueItem
@ -47,7 +49,9 @@ class GenericQueue(object):
self.min_priority = 0 # type: int self.min_priority = 0 # type: int
self.lock = threading.Lock() self.events = {} # type: Dict[int, List[Callable]]
self.lock = threading.RLock()
def pause(self): def pause(self):
logger.log(u'Pausing queue') logger.log(u'Pausing queue')
@ -73,6 +77,37 @@ class GenericQueue(object):
return item return item
def check_events(self):
pass
def add_event(self, event_type, method):
# type: (int, Callable) -> None
if isinstance(event_type, integer_types) and callable(method):
if event_type not in self.events:
self.events[event_type] = []
if method not in self.events[event_type]:
self.events[event_type].append(method)
def remove_event(self, event_type, method):
# type: (int, Callable) -> None
if isinstance(event_type, integer_types) and callable(method):
if event_type in self.events and method in self.events[event_type]:
try:
self.events[event_type].remove(method)
if 0 == len(self.events[event_type]):
del self.events[event_type]
except (BaseException, Exception) as e:
logger.log('Error removing event method from queue: %s' % ex(e), logger.ERROR)
def execute_events(self, event_type, *args, **kwargs):
# type: (int, Tuple, Dict) -> None
if event_type in self.events:
for event in self.events.get(event_type):
try:
event(*args, **kwargs)
except (BaseException, Exception) as e:
logger.log('Error executing Event: %s' % ex(e), logger.ERROR)
def run(self): def run(self):
# only start a new task if one isn't already going # only start a new task if one isn't already going
@ -97,6 +132,8 @@ class GenericQueue(object):
self.currentItem.name = self.queue_name + '-' + self.currentItem.name self.currentItem.name = self.queue_name + '-' + self.currentItem.name
self.currentItem.start() self.currentItem.start()
self.check_events()
class QueueItem(threading.Thread): class QueueItem(threading.Thread):
def __init__(self, name, action_id=0): def __init__(self, name, action_id=0):

8
sickbeard/metadata/kodi.py

@ -421,5 +421,13 @@ class KODIMetadata(generic.GenericMetadata):
cur_actor_thumb.text = '%s' % cur_actor_thumb_text cur_actor_thumb.text = '%s' % cur_actor_thumb_text
def set_nfo_uid_updated(*args, **kwargs):
from .. import db
if not db.DBConnection().has_flag('kodi_nfo_uid'):
db.DBConnection().set_flag('kodi_nfo_uid')
sickbeard.showQueueScheduler.action.remove_event(sickbeard.show_queue.DAILY_SHOW_UPDATE_FINISHED_EVENT,
set_nfo_uid_updated)
# present a standard "interface" from the module # present a standard "interface" from the module
metadata_class = KODIMetadata metadata_class = KODIMetadata

12
sickbeard/show_queue.py

@ -43,10 +43,22 @@ if False:
from typing import AnyStr, Dict, List from typing import AnyStr, Dict, List
DAILY_SHOW_UPDATE_FINISHED_EVENT = 1
class ShowQueue(generic_queue.GenericQueue): class ShowQueue(generic_queue.GenericQueue):
def __init__(self): def __init__(self):
generic_queue.GenericQueue.__init__(self) generic_queue.GenericQueue.__init__(self)
self.queue_name = 'SHOWQUEUE' self.queue_name = 'SHOWQUEUE'
self.daily_update_running = False
if not db.DBConnection().has_flag('kodi_nfo_uid'):
self.add_event(DAILY_SHOW_UPDATE_FINISHED_EVENT, sickbeard.metadata.kodi.set_nfo_uid_updated)
def check_events(self):
if self.daily_update_running and \
not (self.isShowUpdateRunning() or sickbeard.showUpdateScheduler.action.amActive):
self.execute_events(DAILY_SHOW_UPDATE_FINISHED_EVENT)
self.daily_update_running = False
def _isInQueue(self, show_obj, actions): def _isInQueue(self, show_obj, actions):
# type: (TVShow, tuple) -> bool # type: (TVShow, tuple) -> bool

3
sickbeard/show_updater.py

@ -158,6 +158,9 @@ class ShowUpdater(object):
except (exceptions_helper.CantUpdateException, exceptions_helper.CantRefreshException) as e: except (exceptions_helper.CantUpdateException, exceptions_helper.CantRefreshException) as e:
logger.log(u'Automatic update failed: ' + ex(e), logger.ERROR) logger.log(u'Automatic update failed: ' + ex(e), logger.ERROR)
if len(pi_list):
sickbeard.showQueueScheduler.action.daily_update_running = True
ui.ProgressIndicators.setIndicator('dailyUpdate', ui.QueueProgressIndicator('Daily Update', pi_list)) ui.ProgressIndicators.setIndicator('dailyUpdate', ui.QueueProgressIndicator('Daily Update', pi_list))
logger.log(u'Added all shows to show queue for full update') logger.log(u'Added all shows to show queue for full update')

Loading…
Cancel
Save