/
/
/
1"""Setup flow for the Jellyfin provider."""
2
3from __future__ import annotations
4
5from dataclasses import replace
6from typing import TYPE_CHECKING
7
8from music_assistant_models.config_entries import ConfigEntry
9from music_assistant_models.enums import ConfigEntryType
10
11from music_assistant.models.setup_flow import SetupFlowError
12from music_assistant.providers.jellyfin import (
13 CONF_PASSWORD,
14 CONF_URL,
15 CONF_USERNAME,
16 CONF_VERIFY_SSL,
17)
18
19if TYPE_CHECKING:
20 from music_assistant.models.setup_flow import SetupSession
21
22_ENTRIES = (
23 ConfigEntry(key=CONF_URL, type=ConfigEntryType.STRING, required=True),
24 ConfigEntry(key=CONF_USERNAME, type=ConfigEntryType.STRING, required=True),
25 ConfigEntry(key=CONF_PASSWORD, type=ConfigEntryType.SECURE_STRING, required=False),
26 ConfigEntry(
27 key=CONF_VERIFY_SSL,
28 type=ConfigEntryType.BOOLEAN,
29 required=False,
30 advanced=True,
31 default_value=True,
32 ),
33)
34
35
36async def run_setup(session: SetupSession) -> None:
37 """Run the setup flow: collect the connection details and create the provider."""
38 errors: dict[str, str] | None = None
39 setup_data = dict(session.context.setup_data)
40 while True:
41 entries = [
42 replace(entry, value=setup_data.get(entry.key, entry.value)) for entry in _ENTRIES
43 ]
44 submitted = await session.form(entries, step_id="user", errors=errors, last_step=True)
45 setup_data.update(submitted)
46 try:
47 await session.finish(setup_data)
48 return
49 except SetupFlowError as err:
50 errors = {"base": err.translation_key or str(err)}
51