mirror of
https://github.com/libretro/Lakka-LibreELEC.git
synced 2025-01-20 11:05:27 +00:00
72 lines
2.1 KiB
Python
72 lines
2.1 KiB
Python
import threading
|
|
import xbmc
|
|
|
|
import onevent
|
|
import service
|
|
|
|
|
|
class Player(xbmc.Player):
|
|
|
|
def __init__(self, dnd_kodi='false', librespot=None, **kwargs):
|
|
super().__init__()
|
|
self._dnd_kodi = (dnd_kodi == 'true')
|
|
self._thread = threading.Thread(daemon=True, target=self._run)
|
|
self._thread.start()
|
|
self.last_file = None
|
|
self.librespot = librespot
|
|
if not (self._dnd_kodi and self.isPlaying()):
|
|
self.librespot.start()
|
|
|
|
def onAVStarted(self):
|
|
file = self.getPlayingFile()
|
|
if file != self.librespot.file:
|
|
if self._dnd_kodi:
|
|
self.librespot.stop()
|
|
elif self.last_file == self.librespot.file:
|
|
self.librespot.restart()
|
|
self.last_file = file
|
|
|
|
def onLibrespotStopped(self):
|
|
pass
|
|
|
|
def onLibrespotTrackChanged(self, album='', art='', artist='', title=''):
|
|
pass
|
|
|
|
def onPlayBackEnded(self):
|
|
if self.last_file == self.librespot.file:
|
|
self.librespot.restart()
|
|
else:
|
|
self.librespot.start()
|
|
self.last_file = None
|
|
|
|
def onPlayBackError(self):
|
|
self.onPlayBackEnded()
|
|
|
|
def onPlayBackStopped(self):
|
|
self.onPlayBackEnded()
|
|
|
|
# fixes unexpected behaviour of Player.stop()
|
|
def stop(self):
|
|
xbmc.executebuiltin('PlayerControl(Stop)')
|
|
|
|
def _run(self):
|
|
service.log('onevent dispatcher started')
|
|
for event in onevent.receive_event():
|
|
try:
|
|
player_event = event.pop(onevent.KEY_PLAYER_EVENT)
|
|
if player_event == onevent.PLAYER_EVENT_STOPPED:
|
|
self.onLibrespotStopped()
|
|
elif player_event == onevent.PLAYER_EVENT_TRACK_CHANGED:
|
|
self.onLibrespotTrackChanged(**event)
|
|
except Exception as e:
|
|
service.log(e, True)
|
|
service.log('onevent dispatcher stopped')
|
|
|
|
def __enter__(self):
|
|
return self
|
|
|
|
def __exit__(self, *args):
|
|
onevent.send_event({})
|
|
self._thread.join()
|
|
self.onLibrespotStopped()
|