Skip to content

Commit

Permalink
LB-1395: Fix JSPF track identifier to be a list of strings
Browse files Browse the repository at this point in the history
According to the XSPF/JSPF spec [1] a track can have an arbitrary number
of identifiers. For JSPF this means the "identifier" field must be
a list [2].

[1] https://xspf.org/spec#4112141112-identifier
[2] https://xspf.org/jspf
  • Loading branch information
phw committed Nov 14, 2023
1 parent a0ca6f9 commit f5142cf
Showing 1 changed file with 11 additions and 2 deletions.
13 changes: 11 additions & 2 deletions troi/playlist.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ def _serialize_to_jspf(playlist, created_for=None, track_count=None):
track["creator"] = e.artist.name if e.artist else ""

track["title"] = e.name
track["identifier"] = "https://musicbrainz.org/recording/" + str(e.mbid)
track["identifier"] = ["https://musicbrainz.org/recording/" + str(e.mbid)]
if artist_mbids:
track["extension"] = {
PLAYLIST_TRACK_EXTENSION_URI: {
Expand Down Expand Up @@ -89,7 +89,16 @@ def _deserialize_from_jspf(data) -> Playlist:
recordings = []

for track in data["track"]:
recording = Recording(name=track["title"], mbid=track["identifier"].split("/")[-1])
identifier = track["identifier"]
if isinstance(track["identifier"], str):
identifier = [identifier]
mbid = None
for id in identifier:
if id.startswith("https://musicbrainz.org/recording/") or id.startswith("http://musicbrainz.org/recording/"):
mbid = id.split("/")[-1]
break

recording = Recording(name=track["title"], mbid=mbid)
if track.get("creator"):
artist = Artist(name=track["creator"])
extension = track["extension"][PLAYLIST_TRACK_EXTENSION_URI]
Expand Down

0 comments on commit f5142cf

Please sign in to comment.