/
/
/
1"""Podcast Index provider for Music Assistant."""
2
3from __future__ import annotations
4
5from typing import TYPE_CHECKING
6
7from music_assistant_models.config_entries import ConfigEntry, ConfigValueType
8from music_assistant_models.enums import ConfigEntryType, ProviderFeature
9
10from .constants import CONF_API_KEY, CONF_API_SECRET, CONF_STORED_PODCASTS
11from .provider import PodcastIndexProvider
12
13if TYPE_CHECKING:
14 from music_assistant_models.config_entries import ProviderConfig
15 from music_assistant_models.provider import ProviderManifest
16
17 from music_assistant.mass import MusicAssistant
18 from music_assistant.models import ProviderInstanceType
19
20SUPPORTED_FEATURES = {
21 ProviderFeature.SEARCH,
22 ProviderFeature.BROWSE,
23}
24
25
26async def setup(
27 mass: MusicAssistant, manifest: ProviderManifest, config: ProviderConfig
28) -> ProviderInstanceType:
29 """Initialize provider(instance) with given configuration."""
30 return PodcastIndexProvider(mass, manifest, config, SUPPORTED_FEATURES)
31
32
33async def get_config_entries(
34 mass: MusicAssistant,
35 instance_id: str | None = None,
36 action: str | None = None,
37 values: dict[str, ConfigValueType] | None = None,
38) -> tuple[ConfigEntry, ...]:
39 """
40 Return Config entries to setup this provider.
41
42 instance_id: id of an existing provider instance (None if new instance setup).
43 action: [optional] action key called from config entries UI.
44 values: the (intermediate) raw values for config entries sent with the action.
45 """
46 # ruff: noqa: ARG001
47 return (
48 ConfigEntry(
49 key=CONF_API_KEY,
50 type=ConfigEntryType.STRING,
51 label="API Key",
52 required=True,
53 description="Your Podcast Index API key. Get your free API credentials at https://api.podcastindex.org/",
54 ),
55 ConfigEntry(
56 key=CONF_API_SECRET,
57 type=ConfigEntryType.SECURE_STRING,
58 label="API Secret",
59 required=True,
60 description="Your Podcast Index API secret",
61 ),
62 ConfigEntry(
63 key=CONF_STORED_PODCASTS,
64 type=ConfigEntryType.STRING,
65 multi_value=True,
66 label="Subscribed Podcasts",
67 default_value=[],
68 required=False,
69 hidden=True,
70 ),
71 )
72