Fix resume of playqueue initiated by companion
This commit is contained in:
parent
5b020910d3
commit
49b5131dbb
3 changed files with 49 additions and 5 deletions
|
@ -86,10 +86,13 @@ class PlexCompanion(Thread):
|
|||
playqueue = self.mgr.playqueue.get_playqueue_from_type(
|
||||
data['type'])
|
||||
if ID != playqueue.ID:
|
||||
# playqueue changed somehow
|
||||
self.mgr.playqueue.update_playqueue_from_PMS(
|
||||
playqueue, ID, int(query['repeat']), data['offset'])
|
||||
else:
|
||||
log.error('This has never happened before!')
|
||||
# No change to the playqueue
|
||||
self.mgr.playqueue.start_playqueue_initiated_by_companion(
|
||||
playqueue, int(query['repeat']), data['offset'])
|
||||
|
||||
def run(self):
|
||||
httpd = False
|
||||
|
|
|
@ -375,7 +375,21 @@ def get_PMS_playlist(playlist, playlist_id=None):
|
|||
return xml
|
||||
|
||||
|
||||
def update_playlist_from_PMS(playlist, playlist_id=None, repeat=None):
|
||||
def refresh_playlist_from_PMS(playlist):
|
||||
"""
|
||||
Only updates the selected item from the PMS side (e.g.
|
||||
playQueueSelectedItemID). Will NOT check whether items still make sense.
|
||||
"""
|
||||
xml = get_PMS_playlist(playlist)
|
||||
try:
|
||||
xml.attrib['%sVersion' % playlist.kind]
|
||||
except:
|
||||
log.error('Could not download Plex playlist.')
|
||||
return
|
||||
_get_playlist_details_from_xml(playlist, xml)
|
||||
|
||||
|
||||
def update_playlist_from_PMS(playlist, playlist_id=None):
|
||||
"""
|
||||
Updates Kodi playlist using a new PMS playlist. Pass in playlist_id if we
|
||||
need to fetch a new playqueue
|
||||
|
@ -390,8 +404,6 @@ def update_playlist_from_PMS(playlist, playlist_id=None, repeat=None):
|
|||
playlist.clear()
|
||||
# Set new values
|
||||
_get_playlist_details_from_xml(playlist, xml)
|
||||
if repeat:
|
||||
playlist.repeat = repeat
|
||||
for plex_item in xml:
|
||||
playlist.items.append(add_to_Kodi_playlist(playlist, plex_item))
|
||||
|
||||
|
|
|
@ -93,7 +93,8 @@ class Playqueue(Thread):
|
|||
offset = time offset in Plextime
|
||||
"""
|
||||
log.info('New playqueue received from the PMS, updating!')
|
||||
PL.update_playlist_from_PMS(playqueue, playqueue_id, repeat)
|
||||
PL.update_playlist_from_PMS(playqueue, playqueue_id)
|
||||
playqueue.repeat = repeat
|
||||
log.debug('Updated playqueue: %s' % playqueue)
|
||||
|
||||
window('plex_customplaylist', value="true")
|
||||
|
@ -112,6 +113,34 @@ class Playqueue(Thread):
|
|||
self.player.play(playqueue.kodi_pl)
|
||||
playqueue.log_Kodi_playlist()
|
||||
|
||||
@lockmethod.lockthis
|
||||
def start_playqueue_initiated_by_companion(self,
|
||||
playqueue,
|
||||
playqueue_id=None,
|
||||
repeat=None,
|
||||
offset=None):
|
||||
log.info('Plex companion wants to restart playback of playqueue %s'
|
||||
% playqueue)
|
||||
# Still need to get new playQueue from the server - don't know what has
|
||||
# been selected
|
||||
PL.refresh_playlist_from_PMS(playqueue)
|
||||
playqueue.repeat = repeat
|
||||
window('plex_customplaylist', value="true")
|
||||
if offset not in (None, "0"):
|
||||
window('plex_customplaylist.seektime',
|
||||
str(ConvertPlexToKodiTime(offset)))
|
||||
for startpos, item in enumerate(playqueue.items):
|
||||
if item.ID == playqueue.selectedItemID:
|
||||
break
|
||||
else:
|
||||
startpos = None
|
||||
# Start playback
|
||||
if startpos:
|
||||
self.player.play(playqueue.kodi_pl, startpos=startpos)
|
||||
else:
|
||||
self.player.play(playqueue.kodi_pl)
|
||||
playqueue.log_Kodi_playlist()
|
||||
|
||||
@lockmethod.lockthis
|
||||
def kodi_onadd(self, data):
|
||||
"""
|
||||
|
|
Loading…
Reference in a new issue