Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: mypy for template player provider #1876

Merged
merged 2 commits into from
Jan 15, 2025
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
marcelveldt marked this conversation as resolved.
Show resolved Hide resolved
# 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
Loading