/
/
1"""Setup flow for the AriaCast Receiver plugin."""
2
3from __future__ import annotations
4
5from typing import TYPE_CHECKING, Any
6
7from music_assistant_models.config_entries import ConfigEntry
8from music_assistant_models.enums import ConfigEntryType
9
10from music_assistant.constants import CONF_ENTRY_WARN_PREVIEW
11from music_assistant.helpers.config_entries import create_player_selector
12from music_assistant.models.setup_flow import SetupFlowError
13
14from . import (
15 CONF_ARIACAST_NAME,
16 CONF_MASS_PLAYER_ID,
17 DEFAULT_ARIACAST_NAME,
18 PLAYER_ID_AUTO,
19)
20
21if TYPE_CHECKING:
22 from music_assistant.models.setup_flow import SetupSession
23
24
25async def run_setup(session: SetupSession) -> None:
26 """
27 Configure the player that receives AriaCast audio.
28
29 :param session: The setup session driving the flow.
30 """
31 setup_data = dict(session.context.setup_data)
32 errors: dict[str, str] | None = None
33 while True:
34 prefill: dict[str, Any] = {**session.context.values, **setup_data}
35 ariacast_name = str(prefill.get(CONF_ARIACAST_NAME) or DEFAULT_ARIACAST_NAME)
36
37 values = await session.form(
38 [
39 CONF_ENTRY_WARN_PREVIEW,
40 create_player_selector(
41 session.mass,
42 CONF_MASS_PLAYER_ID,
43 prefill.get(CONF_MASS_PLAYER_ID),
44 PLAYER_ID_AUTO,
45 ),
46 ConfigEntry(
47 key=CONF_ARIACAST_NAME,
48 type=ConfigEntryType.STRING,
49 required=True,
50 default_value=ariacast_name,
51 value=ariacast_name,
52 ),
53 ],
54 step_id="user",
55 errors=errors,
56 last_step=True,
57 )
58 setup_data.update(values)
59 try:
60 await session.finish(setup_data)
61 return
62 except SetupFlowError as err:
63 errors = {"base": err.translation_key or str(err)}
64