From 0adf1a82ee01574d1e6135046b7f4f3538b8357a Mon Sep 17 00:00:00 2001 From: Jason Lawrence Date: Wed, 10 Mar 2021 18:28:41 -0600 Subject: [PATCH 1/2] Handle missing key when playqueue passed to playMedia --- plexapi/client.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/plexapi/client.py b/plexapi/client.py index 44f1da52b..21fdc91f7 100644 --- a/plexapi/client.py +++ b/plexapi/client.py @@ -488,16 +488,23 @@ def playMedia(self, media, offset=0, **params): if mediatype == "audio": mediatype = "music" - playqueue = media if isinstance(media, PlayQueue) else self._server.createPlayQueue(media) + if isinstance(media, PlayQueue): + playQueueID = media.playQueueID + key = media.selectedItem.key + else: + playqueue = self._server.createPlayQueue(media) + playQueueID = playqueue.playQueueID + key = media.key + self.sendCommand('playback/playMedia', **dict({ 'machineIdentifier': self._server.machineIdentifier, 'address': server_url[1].strip('/'), 'port': server_port, 'offset': offset, - 'key': media.key, + 'key': key, 'token': media._server.createToken(), 'type': mediatype, - 'containerKey': '/playQueues/%s?window=100&own=1' % playqueue.playQueueID, + 'containerKey': '/playQueues/%s?window=100&own=1' % playQueueID, }, **params)) def setParameters(self, volume=None, shuffle=None, repeat=None, mtype=DEFAULT_MTYPE): From 58b3445f2b0e1e0aa86df2734f8541045e820844 Mon Sep 17 00:00:00 2001 From: Jason Lawrence Date: Thu, 11 Mar 2021 08:58:54 -0600 Subject: [PATCH 2/2] Simpler but less verbose fix --- plexapi/client.py | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/plexapi/client.py b/plexapi/client.py index 21fdc91f7..48a2d6488 100644 --- a/plexapi/client.py +++ b/plexapi/client.py @@ -488,23 +488,16 @@ def playMedia(self, media, offset=0, **params): if mediatype == "audio": mediatype = "music" - if isinstance(media, PlayQueue): - playQueueID = media.playQueueID - key = media.selectedItem.key - else: - playqueue = self._server.createPlayQueue(media) - playQueueID = playqueue.playQueueID - key = media.key - + playqueue = media if isinstance(media, PlayQueue) else self._server.createPlayQueue(media) self.sendCommand('playback/playMedia', **dict({ 'machineIdentifier': self._server.machineIdentifier, 'address': server_url[1].strip('/'), 'port': server_port, 'offset': offset, - 'key': key, + 'key': media.key or playqueue.selectedItem.key, 'token': media._server.createToken(), 'type': mediatype, - 'containerKey': '/playQueues/%s?window=100&own=1' % playQueueID, + 'containerKey': '/playQueues/%s?window=100&own=1' % playqueue.playQueueID, }, **params)) def setParameters(self, volume=None, shuffle=None, repeat=None, mtype=DEFAULT_MTYPE):