From: Marcel van der Veldt Date: Sun, 30 Mar 2025 22:35:10 +0000 (+0200) Subject: Chore: some (sonos) tweaks to didl metadata helper X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=b52ceca883e1a960bdcb08aed98c0e3e2bf5ceaf;p=music-assistant-server.git Chore: some (sonos) tweaks to didl metadata helper --- diff --git a/music_assistant/helpers/didl_lite.py b/music_assistant/helpers/didl_lite.py index 5b44a254..2e0738e2 100644 --- a/music_assistant/helpers/didl_lite.py +++ b/music_assistant/helpers/didl_lite.py @@ -4,6 +4,7 @@ from __future__ import annotations import datetime from typing import TYPE_CHECKING +from xml.sax.saxutils import escape as xmlescape from music_assistant_models.enums import MediaType @@ -25,38 +26,37 @@ def create_didl_metadata(media: PlayerMedia) -> str: return ( '' f'' - f"{escape_string(title)}" - f"{escape_string(image_url)}" + f"{xmlescape(title)}" + f"{xmlescape(image_url)}" f"{media.uri}" "object.item.audioItem.audioBroadcast" f"audio/{ext}" - f'{escape_string(media.uri)}' + f'{xmlescape(media.uri)}' "" "" ) duration_str = str(datetime.timedelta(seconds=media.duration or 0)) + ".000" + return ( '' - f'' - f"{escape_string(media.title or media.uri)}" - f"{escape_string(media.artist or '')}" - f"{escape_string(media.album or '')}" - f"{escape_string(media.artist or '')}" + f'' + f"{xmlescape(media.title or media.uri)}" + f"{xmlescape(media.artist or '')}" + f"{xmlescape(media.album or '')}" + f"{xmlescape(media.artist or '')}" f"{int(media.duration or 0)}" - f"{media.uri}" + f"{xmlescape(media.queue_item_id)}" f"Music Assistant" - f"{escape_string(image_url)}" + f"{xmlescape(image_url)}" "object.item.audioItem.musicTrack" f"audio/{ext}" - f'{escape_string(media.uri)}' + f'{xmlescape(media.uri)}' + 'RINCON_AssociatedZPUDN' "" "" ) -def escape_string(data: str) -> str: - """Create DIDL-safe string.""" - data = data.replace("&", "&") - # data = data.replace("?", "?") - data = data.replace(">", ">") - return data.replace("<", "<") +def create_didl_metadata_str(media: PlayerMedia) -> str: + """Create (xml-escaped) DIDL metadata string from url and PlayerMedia.""" + return xmlescape(create_didl_metadata(media))