/
/
/
1"""Setup flow for the AriaCast Receiver plugin."""
2
3from __future__ import annotations
4
5from typing import TYPE_CHECKING, Any
6
7from music_assistant.constants import CONF_ENTRY_WARN_PREVIEW
8from music_assistant.helpers.config_entries import create_player_selector
9from music_assistant.models.setup_flow import AbortFlow, SetupFlowError
10
11from . import CONF_MASS_PLAYER_ID
12
13if TYPE_CHECKING:
14 from music_assistant.models.setup_flow import SetupSession
15
16
17async def run_setup(session: SetupSession) -> None:
18 """
19 Configure the player that receives AriaCast audio.
20
21 :param session: The setup session driving the flow.
22 """
23 if not session.mass.players.all_players(False, False):
24 raise AbortFlow("no_players")
25 setup_data = dict(session.context.setup_data)
26 errors: dict[str, str] | None = None
27 while True:
28 prefill: dict[str, Any] = {**session.context.values, **setup_data}
29 values = await session.form(
30 [
31 CONF_ENTRY_WARN_PREVIEW,
32 create_player_selector(
33 session.mass,
34 CONF_MASS_PLAYER_ID,
35 prefill.get(CONF_MASS_PLAYER_ID),
36 ),
37 ],
38 step_id="user",
39 errors=errors,
40 last_step=True,
41 )
42 setup_data.update(values)
43 try:
44 await session.finish(setup_data)
45 return
46 except SetupFlowError as err:
47 errors = {"base": err.translation_key or str(err)}
48