# -*- coding: utf-8 -*- from logging import getLogger from threading import Thread from Queue import Empty from xbmc import sleep from utils import thread_methods import plexdb_functions as plexdb import itemtypes import variables as v ############################################################################### log = getLogger("PLEX."+__name__) ############################################################################### @thread_methods(add_suspends=['SUSPEND_LIBRARY_THREAD', 'DB_SCAN'], add_stops=['STOP_SYNC']) class Process_Fanart_Thread(Thread): """ Threaded download of additional fanart in the background Input: queue Queue.Queue() object that you will need to fill with dicts of the following form: { 'plex_id': the Plex id as a string 'plex_type': the Plex media type, e.g. 'movie' 'refresh': True/False if True, will overwrite any 3rd party fanart. If False, will only get missing } """ def __init__(self, queue): self.queue = queue Thread.__init__(self) def run(self): """ Catch all exceptions and log them """ try: self.__run() except Exception as e: log.error('Exception %s' % e) import traceback log.error("Traceback:\n%s" % traceback.format_exc()) def __run(self): """ Do the work """ log.debug("---===### Starting FanartSync ###===---") thread_stopped = self.thread_stopped thread_suspended = self.thread_suspended queue = self.queue while not thread_stopped(): # In the event the server goes offline while thread_suspended(): # Set in service.py if thread_stopped(): # Abort was requested while waiting. We should exit log.info("---===### Stopped FanartSync ###===---") return sleep(1000) # grabs Plex item from queue try: item = queue.get(block=False) except Empty: sleep(200) continue log.debug('Get additional fanart for Plex id %s' % item['plex_id']) with getattr(itemtypes, v.ITEMTYPE_FROM_PLEXTYPE[item['plex_type']])() as cls: result = cls.getfanart(item['plex_id'], refresh=item['refresh']) if result is True: log.debug('Done getting fanart for Plex id %s' % item['plex_id']) with plexdb.Get_Plex_DB() as plex_db: plex_db.set_fanart_synched(item['plex_id']) queue.task_done() log.debug("---===### Stopped FanartSync ###===---")