8282 FALLBACK_SOURCES ,
8383 MANUFACTURER ,
8484 VALID_MEDIA_TYPES ,
85+ BangOlufsenAttribute ,
8586 BangOlufsenMediaType ,
8687 BangOlufsenSource ,
8788 WebsocketNotification ,
@@ -224,7 +225,8 @@ def __init__(self, entry: ConfigEntry, client: MozartClient) -> None:
224225 # Beolink compatible sources
225226 self ._beolink_sources : dict [str , bool ] = {}
226227 self ._remote_leader : BeolinkLeader | None = None
227- # Extra state attributes for showing Beolink: peer(s), listener(s), leader and self
228+ # Extra state attributes:
229+ # Beolink: peer(s), listener(s), leader and self
228230 self ._beolink_attributes : dict [str , dict [str , dict [str , str ]]] = {}
229231
230232 async def async_added_to_hass (self ) -> None :
@@ -436,7 +438,10 @@ async def _async_update_name_and_beolink(self) -> None:
436438 await self ._async_update_beolink ()
437439
438440 async def _async_update_beolink (self ) -> None :
439- """Update the current Beolink leader, listeners, peers and self."""
441+ """Update the current Beolink leader, listeners, peers and self.
442+
443+ Updates Home Assistant state.
444+ """
440445
441446 self ._beolink_attributes = {}
442447
@@ -445,18 +450,24 @@ async def _async_update_beolink(self) -> None:
445450
446451 # Add Beolink self
447452 self ._beolink_attributes = {
448- "beolink" : {"self" : {self .device_entry .name : self ._beolink_jid }}
453+ BangOlufsenAttribute .BEOLINK : {
454+ BangOlufsenAttribute .BEOLINK_SELF : {
455+ self .device_entry .name : self ._beolink_jid
456+ }
457+ }
449458 }
450459
451460 # Add Beolink peers
452461 peers = await self ._client .get_beolink_peers ()
453462
454463 if len (peers ) > 0 :
455- self ._beolink_attributes ["beolink" ]["peers" ] = {}
464+ self ._beolink_attributes [BangOlufsenAttribute .BEOLINK ][
465+ BangOlufsenAttribute .BEOLINK_PEERS
466+ ] = {}
456467 for peer in peers :
457- self ._beolink_attributes ["beolink" ][ "peers" ][ peer . friendly_name ] = (
458- peer . jid
459- )
468+ self ._beolink_attributes [BangOlufsenAttribute . BEOLINK ][
469+ BangOlufsenAttribute . BEOLINK_PEERS
470+ ][ peer . friendly_name ] = peer . jid
460471
461472 # Add Beolink listeners / leader
462473 self ._remote_leader = self ._playback_metadata .remote_leader
@@ -477,7 +488,9 @@ async def _async_update_beolink(self) -> None:
477488 # Add self
478489 group_members .append (self .entity_id )
479490
480- self ._beolink_attributes ["beolink" ]["leader" ] = {
491+ self ._beolink_attributes [BangOlufsenAttribute .BEOLINK ][
492+ BangOlufsenAttribute .BEOLINK_LEADER
493+ ] = {
481494 self ._remote_leader .friendly_name : self ._remote_leader .jid ,
482495 }
483496
@@ -514,9 +527,9 @@ async def _async_update_beolink(self) -> None:
514527 beolink_listener .jid
515528 )
516529 break
517- self ._beolink_attributes ["beolink" ][ "listeners" ] = (
518- beolink_listeners_attribute
519- )
530+ self ._beolink_attributes [BangOlufsenAttribute . BEOLINK ][
531+ BangOlufsenAttribute . BEOLINK_LISTENERS
532+ ] = beolink_listeners_attribute
520533
521534 self ._attr_group_members = group_members
522535
@@ -615,11 +628,18 @@ def is_volume_muted(self) -> bool | None:
615628 return None
616629
617630 @property
618- def media_content_type (self ) -> str :
631+ def media_content_type (self ) -> MediaType | str | None :
619632 """Return the current media type."""
620- # Hard to determine content type
621- if self ._source_change .id == BangOlufsenSource .URI_STREAMER .id :
622- return MediaType .URL
633+ content_type = {
634+ BangOlufsenSource .URI_STREAMER .id : MediaType .URL ,
635+ BangOlufsenSource .DEEZER .id : BangOlufsenMediaType .DEEZER ,
636+ BangOlufsenSource .TIDAL .id : BangOlufsenMediaType .TIDAL ,
637+ BangOlufsenSource .NET_RADIO .id : BangOlufsenMediaType .RADIO ,
638+ }
639+ # Hard to determine content type.
640+ if self ._source_change .id in content_type :
641+ return content_type [self ._source_change .id ]
642+
623643 return MediaType .MUSIC
624644
625645 @property
@@ -632,6 +652,11 @@ def media_position(self) -> int | None:
632652 """Return the current playback progress."""
633653 return self ._playback_progress .progress
634654
655+ @property
656+ def media_content_id (self ) -> str | None :
657+ """Return internal ID of Deezer, Tidal and radio stations."""
658+ return self ._playback_metadata .source_internal_id
659+
635660 @property
636661 def media_image_url (self ) -> str | None :
637662 """Return URL of the currently playing music."""
0 commit comments