From: Quentin Bray Date: Fri, 2 May 2025 15:33:20 +0000 (+0200) Subject: [Airplay] Handle mDNS remove messages without service info (#2154) X-Git-Url: https://git.kitaultman.com/?a=commitdiff_plain;h=0dd9d5b4c49c5fe35d46aa04059cef2f2def6b13;p=music-assistant-server.git [Airplay] Handle mDNS remove messages without service info (#2154) --- diff --git a/music_assistant/providers/airplay/provider.py b/music_assistant/providers/airplay/provider.py index 14e9a5e6..f683895f 100644 --- a/music_assistant/providers/airplay/provider.py +++ b/music_assistant/providers/airplay/provider.py @@ -187,8 +187,14 @@ class AirPlayProvider(PlayerProvider): ) -> None: """Handle MDNS service state callback.""" if not info: - return - if "@" in info.name: + # When info are not provided for the service + if state_change == ServiceStateChange.Removed and "@" in name: + # Service name is enough to mark the player as unavailable on 'Removed' notification + raw_id, display_name = name.split(".")[0].split("@", 1) + else: + # If we are not in a 'Removed' state, we need info to be filled to update the player + return + elif "@" in info.name: raw_id, display_name = info.name.split(".")[0].split("@", 1) elif deviceid := info.decoded_properties.get("deviceid"): raw_id = deviceid.replace(":", "") @@ -207,6 +213,7 @@ class AirPlayProvider(PlayerProvider): self.mass.players.update(player_id) return # handle update for existing device + assert info is not None # type guard if airplay_player := self._players.get(player_id): if mass_player := self.mass.players.get(player_id): cur_address = get_primary_ip_address(info)