Skip to content

Commit bbdb238

Browse files
authored
Allow adding items from different server to playlist (#1411)
1 parent 4f6723c commit bbdb238

File tree

1 file changed

+16
-11
lines changed

1 file changed

+16
-11
lines changed

Diff for: plexapi/playlist.py

+16-11
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# -*- coding: utf-8 -*-
22
import re
3+
from itertools import groupby
34
from pathlib import Path
45
from urllib.parse import quote_plus, unquote
56

@@ -212,19 +213,23 @@ def addItems(self, items):
212213
if items and not isinstance(items, (list, tuple)):
213214
items = [items]
214215

215-
ratingKeys = []
216-
for item in items:
217-
if item.listType != self.playlistType: # pragma: no cover
218-
raise BadRequest(f'Can not mix media types when building a playlist: '
219-
f'{self.playlistType} and {item.listType}')
220-
ratingKeys.append(str(item.ratingKey))
216+
# Group items by server to maintain order when adding items from multiple servers
217+
for server, _items in groupby(items, key=lambda item: item._server):
221218

222-
ratingKeys = ','.join(ratingKeys)
223-
uri = f'{self._server._uriRoot()}/library/metadata/{ratingKeys}'
219+
ratingKeys = []
220+
for item in _items:
221+
if item.listType != self.playlistType: # pragma: no cover
222+
raise BadRequest(f'Can not mix media types when building a playlist: '
223+
f'{self.playlistType} and {item.listType}')
224+
ratingKeys.append(str(item.ratingKey))
225+
226+
ratingKeys = ','.join(ratingKeys)
227+
uri = f'{server._uriRoot()}/library/metadata/{ratingKeys}'
228+
229+
args = {'uri': uri}
230+
key = f"{self.key}/items{utils.joinArgs(args)}"
231+
self._server.query(key, method=self._server._session.put)
224232

225-
args = {'uri': uri}
226-
key = f"{self.key}/items{utils.joinArgs(args)}"
227-
self._server.query(key, method=self._server._session.put)
228233
return self
229234

230235
@deprecated('use "removeItems" instead')

0 commit comments

Comments
 (0)