Files
jellycon/resources/lib/playnext.py
2022-03-09 22:51:38 +01:00

98 lines
3.3 KiB
Python

from __future__ import division, absolute_import, print_function, unicode_literals
import os
import threading
import xbmc
import xbmcaddon
from .lazylogger import LazyLogger
from .dialogs import PlayNextDialog
from .utils import translate_path
log = LazyLogger(__name__)
class PlayNextService(threading.Thread):
stop_thread = False
monitor = None
def __init__(self, play_monitor):
super(PlayNextService, self).__init__()
self.monitor = play_monitor
def run(self):
from .play_utils import get_playing_data
settings = xbmcaddon.Addon()
play_next_trigger_time = int(settings.getSetting('play_next_trigger_time'))
play_next_dialog = None
play_next_triggered = False
is_playing = False
now_playing = None
while not xbmc.Monitor().abortRequested() and not self.stop_thread:
player = xbmc.Player()
if player.isPlaying():
if not is_playing:
settings = xbmcaddon.Addon()
play_next_trigger_time = int(settings.getSetting('play_next_trigger_time'))
log.debug("New play_next_trigger_time value: {0}".format(play_next_trigger_time))
now_playing_file = player.getPlayingFile()
if now_playing_file != now_playing:
# If the playing file has changed, reset the play next values
play_next_dialog = None
play_next_triggered = False
now_playing = now_playing_file
duration = player.getTotalTime()
position = player.getTime()
trigger_time = play_next_trigger_time # 300
time_to_end = (duration - position)
if not play_next_triggered and (trigger_time > time_to_end) and play_next_dialog is None:
play_next_triggered = True
log.debug("play_next_triggered hit at {0} seconds from end".format(time_to_end))
play_data = get_playing_data()
log.debug("play_next_triggered play_data : {0}".format(play_data))
next_episode = play_data.get("next_episode")
item_type = play_data.get("item_type")
if next_episode is not None and item_type == "Episode":
settings = xbmcaddon.Addon()
plugin_path = settings.getAddonInfo('path')
plugin_path_real = translate_path(os.path.join(plugin_path))
play_next_dialog = PlayNextDialog("PlayNextDialog.xml", plugin_path_real, "default", "720p")
play_next_dialog.set_episode_info(next_episode)
if play_next_dialog is not None:
play_next_dialog.show()
is_playing = True
else:
play_next_triggered = False
if play_next_dialog is not None:
play_next_dialog.close()
del play_next_dialog
play_next_dialog = None
is_playing = False
now_playing = None
if xbmc.Monitor().waitForAbort(1):
break
def stop_servcie(self):
log.debug("PlayNextService Stop Called")
self.stop_thread = True