Add some guards in generated didl metadata
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Fri, 10 Mar 2023 22:17:22 +0000 (23:17 +0100)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Fri, 10 Mar 2023 22:17:22 +0000 (23:17 +0100)
music_assistant/server/helpers/didl_lite.py

index 7c2a634021869afa62336e62fb37d3624a11eb75..ece34b6927261bceea97b376cf0152d1011eeb84 100644 (file)
@@ -33,12 +33,13 @@ def create_didl_metadata(url: str, queue_item: QueueItem, flow_mode: bool = Fals
         )
     if is_radio:
         # radio or other non-track item
+        image = queue_item.image.url if queue_item.image else ""
         return (
             '<DIDL-Lite xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/">'
             f'<item id="{queue_item.queue_item_id}" parentID="0" restricted="1">'
             f"<dc:title>{_escape_str(queue_item.name)}</dc:title>"
             f"<upnp:albumArtURI>{queue_item.image.url}</upnp:albumArtURI>"
-            f"<dc:queueItemId>{queue_item.queue_item_id}</dc:queueItemId>"
+            f"<dc:queueItemId>{image}</dc:queueItemId>"
             "<upnp:class>object.item.audioItem.audioBroadcast</upnp:class>"
             f"<upnp:mimeType>audio/{ext}</upnp:mimeType>"
             f'<res protocolInfo="http-get:*:audio/{ext}:DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=0d500000000000000000000000000000">{url}</res>'
@@ -46,8 +47,15 @@ def create_didl_metadata(url: str, queue_item: QueueItem, flow_mode: bool = Fals
             "</DIDL-Lite>"
         )
     title = _escape_str(queue_item.media_item.name)
-    artist = _escape_str(queue_item.media_item.artist.name)
-    album = _escape_str(queue_item.media_item.album.name)
+    if queue_item.media_item.artist and queue_item.media_item.artist.name:
+        artist = _escape_str(queue_item.media_item.artist.name)
+    else:
+        artist = ""
+    if queue_item.media_item.album and queue_item.media_item.album.name:
+        album = _escape_str(queue_item.media_item.album.name)
+    else:
+        album = ""
+    image = queue_item.image.url if queue_item.image else ""
     item_class = "object.item.audioItem.musicTrack"
     duration_str = str(datetime.timedelta(seconds=queue_item.duration))
     return (
@@ -60,7 +68,7 @@ def create_didl_metadata(url: str, queue_item: QueueItem, flow_mode: bool = Fals
         f"<upnp:duration>{queue_item.duration}</upnp:duration>"
         "<upnp:playlistTitle>Music Assistant</upnp:playlistTitle>"
         f"<dc:queueItemId>{queue_item.queue_item_id}</dc:queueItemId>"
-        f"<upnp:albumArtURI>{queue_item.image.url}</upnp:albumArtURI>"
+        f"<upnp:albumArtURI>{image}</upnp:albumArtURI>"
         f"<upnp:class>{item_class}</upnp:class>"
         f"<upnp:mimeType>audio/{ext}</upnp:mimeType>"
         f'<res duration="{duration_str}" protocolInfo="http-get:*:audio/{ext}:DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=0d500000000000000000000000000000">{url}</res>'