PlexKodiConnect/resources/lib/library_sync/fanart.py

101 lines
3.8 KiB
Python
Raw Normal View History

2017-04-03 01:02:41 +10:00
# -*- coding: utf-8 -*-
from logging import getLogger
from threading import Thread
from Queue import Empty
import xbmc
2017-04-03 01:02:41 +10:00
2018-06-22 03:24:37 +10:00
from .. import utils
from .. import plexdb_functions as plexdb
from .. import itemtypes
from .. import artwork
from .. import variables as v
from .. import state
2017-04-03 01:02:41 +10:00
###############################################################################
LOG = getLogger("PLEX." + __name__)
2017-04-03 01:02:41 +10:00
###############################################################################
2018-06-22 03:24:37 +10:00
@utils.thread_methods(add_suspends=['SUSPEND_LIBRARY_THREAD',
'DB_SCAN',
'STOP_SYNC',
'SUSPEND_SYNC'])
class ThreadedProcessFanart(Thread):
2017-04-03 01:02:41 +10:00
"""
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):
"""
Do the work
"""
LOG.debug("---===### Starting FanartSync ###===---")
2018-02-12 00:57:39 +11:00
stopped = self.stopped
suspended = self.suspended
2017-04-03 01:02:41 +10:00
queue = self.queue
counter = 0
set_zero = False
2018-02-12 00:57:39 +11:00
while not stopped():
2017-04-03 01:02:41 +10:00
# In the event the server goes offline
2018-02-12 00:57:39 +11:00
while suspended():
2017-04-03 01:02:41 +10:00
# Set in service.py
2018-02-12 00:57:39 +11:00
if stopped():
2017-04-03 01:02:41 +10:00
# Abort was requested while waiting. We should exit
LOG.info("---===### Stopped FanartSync ###===---")
2017-04-03 01:02:41 +10:00
return
xbmc.sleep(1000)
2017-04-03 01:02:41 +10:00
# grabs Plex item from queue
try:
item = queue.get(block=False)
except Empty:
if not set_zero and not xbmc.getCondVisibility(
2018-05-30 16:29:33 +10:00
'Window.IsVisible(DialogAddonSettings.xml)'):
# Avoid saving '0' all the time
set_zero = True
2018-06-22 03:24:37 +10:00
utils.settings('fanarttv_lookups', value='0')
xbmc.sleep(200)
2017-04-03 01:02:41 +10:00
continue
set_zero = False
2018-06-22 03:24:37 +10:00
if isinstance(item, artwork.ArtworkSyncMessage):
if state.IMAGE_SYNC_NOTIFICATIONS:
2018-06-22 03:24:37 +10:00
utils.dialog('notification',
heading=utils.lang(29999),
message=item.message,
icon='{plex}',
sound=False)
queue.task_done()
continue
LOG.debug('Get additional fanart for Plex id %s', item['plex_id'])
2017-04-03 01:02:41 +10:00
with getattr(itemtypes,
v.ITEMTYPE_FROM_PLEXTYPE[item['plex_type']])() as item_type:
result = item_type.getfanart(item['plex_id'],
refresh=item['refresh'])
2017-04-03 01:02:41 +10:00
if result is True:
LOG.debug('Done getting fanart for Plex id %s', item['plex_id'])
2017-04-03 01:02:41 +10:00
with plexdb.Get_Plex_DB() as plex_db:
plex_db.set_fanart_synched(item['plex_id'])
# Update the caching state in the PKC settings. Avoid saving '0'
counter += 1
if (counter > 20 and not xbmc.getCondVisibility(
'Window.IsVisible(DialogAddonSettings.xml)')):
counter = 0
2018-06-22 03:24:37 +10:00
utils.settings('fanarttv_lookups', value=str(queue.qsize()))
2017-04-03 01:02:41 +10:00
queue.task_done()
LOG.debug("---===### Stopped FanartSync ###===---")