Skip to content

Commit

Permalink
chore: mypy for template player provider
Browse files Browse the repository at this point in the history
  • Loading branch information
Jc2k committed Jan 15, 2025
1 parent 17d23c3 commit 75bc673
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 7 deletions.
20 changes: 14 additions & 6 deletions music_assistant/providers/_template_player_provider/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
from music_assistant_models.provider import ProviderManifest
from zeroconf.asyncio import AsyncServiceInfo

from music_assistant import MusicAssistant
from music_assistant.mass import MusicAssistant
from music_assistant.models import ProviderInstanceType


Expand Down Expand Up @@ -111,7 +111,7 @@ def supported_features(self) -> set[ProviderFeature]:
# you should return a tuple of provider-level features
# here that your player provider supports or an empty tuple if none.
# for example 'ProviderFeature.SYNC_PLAYERS' if you can sync players.
return (ProviderFeature.SYNC_PLAYERS,)
return {ProviderFeature.SYNC_PLAYERS}

async def loaded_in_mass(self) -> None:
"""Call after the provider has been loaded."""
Expand Down Expand Up @@ -147,13 +147,20 @@ async def on_mdns_service_state_change(
# If no mdns service type is specified, this method is omitted and you
# can completely remove it from your provider implementation.

if not info:
return

# NOTE: If you do not use mdns for discovery of players on the network,
# you must implement your own discovery mechanism and logic to add new players
# and update them on state changes when needed.
# Below is a bit of example implementation but we advise to look at existing
# player providers for more inspiration.
name = name.split("@", 1)[1] if "@" in name else name
player_id = info.decoded_properties["uuid"] # this is just an example!

if not player_id:
return

# handle removed player
if state_change == ServiceStateChange.Removed:
# check if the player manager has an existing entry for this player
Expand All @@ -173,14 +180,14 @@ async def on_mdns_service_state_change(
# this is an existing player that has been updated/reconnected
# or simply a re-announcement on mdns.
cur_address = get_primary_ip_address_from_zeroconf(info)
if cur_address and cur_address != mass_player.device_info.address:
if cur_address and cur_address != mass_player.device_info.ip_address:
self.logger.debug(
"Address updated to %s for player %s", cur_address, mass_player.display_name
)
mass_player.device_info = DeviceInfo(
model=mass_player.device_info.model,
manufacturer=mass_player.device_info.manufacturer,
address=str(cur_address),
ip_address=str(cur_address),
)
if not mass_player.available:
# if the player was marked offline and you now receive an mdns update
Expand Down Expand Up @@ -359,8 +366,9 @@ async def cmd_ungroup(self, player_id: str) -> None:
- player_id: player_id of the player to handle the command.
"""
sonos_player = self.sonos_players[player_id]
await sonos_player.client.player.leave_group()
# OPTIONAL - required only if you specified ProviderFeature.SYNC_PLAYERS
# this method should handle the ungroup command for the given player.
# you should unjoin the given player from the target_player/syncgroup.

async def play_announcement(
self, player_id: str, announcement: PlayerMedia, volume_level: int | None = None
Expand Down
1 change: 0 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,6 @@ exclude = [
'^music_assistant/controllers/.*$',
'^music_assistant/helpers/.*$',
'^music_assistant/models/.*$',
'^music_assistant/providers/_template_player_provider/.*$',
'^music_assistant/providers/apple_music/.*$',
'^music_assistant/providers/bluesound/.*$',
'^music_assistant/providers/chromecast/.*$',
Expand Down

0 comments on commit 75bc673

Please sign in to comment.