/
/
/
1"""Constants for Built-in/generic provider."""
2
3from __future__ import annotations
4
5from typing import NotRequired, TypedDict
6
7from music_assistant_models.config_entries import ConfigEntry
8from music_assistant_models.enums import ConfigEntryType, ImageType
9from music_assistant_models.media_items import MediaItemImage
10
11from music_assistant.constants import (
12 CONF_ENTRY_LIBRARY_SYNC_BACK,
13 CONF_ENTRY_LIBRARY_SYNC_PLAYLISTS,
14 CONF_ENTRY_LIBRARY_SYNC_RADIOS,
15 CONF_ENTRY_LIBRARY_SYNC_TRACKS,
16 CONF_ENTRY_PROVIDER_SYNC_INTERVAL_PLAYLISTS,
17 CONF_ENTRY_PROVIDER_SYNC_INTERVAL_RADIOS,
18 CONF_ENTRY_PROVIDER_SYNC_INTERVAL_TRACKS,
19)
20
21
22class StoredItem(TypedDict):
23 """Definition of an media item (for the builtin provider) stored in persistent storage."""
24
25 item_id: str # url or (locally accessible) file path (or id in case of playlist)
26 name: str
27 image_url: NotRequired[str]
28 last_updated: NotRequired[int]
29
30
31CONF_KEY_RADIOS = "stored_radios"
32CONF_KEY_TRACKS = "stored_tracks"
33CONF_KEY_PLAYLISTS = "stored_playlists"
34
35
36ALL_FAVORITE_TRACKS = "all_favorite_tracks"
37RANDOM_ARTIST = "random_artist"
38RANDOM_ALBUM = "random_album"
39RANDOM_TRACKS = "random_tracks"
40RECENTLY_PLAYED = "recently_played"
41RECENTLY_ADDED_TRACKS = "recently_added_tracks"
42
43BUILTIN_PLAYLISTS = {
44 ALL_FAVORITE_TRACKS: "All favorited tracks",
45 RANDOM_ARTIST: "Random Artist (from library)",
46 RANDOM_ALBUM: "Random Album (from library)",
47 RANDOM_TRACKS: "500 Random tracks (from library)",
48 RECENTLY_PLAYED: "Recently played tracks",
49 RECENTLY_ADDED_TRACKS: "Recently added tracks",
50}
51BUILTIN_PLAYLISTS_ENTRIES = [
52 ConfigEntry(
53 key=key,
54 type=ConfigEntryType.BOOLEAN,
55 label=name,
56 default_value=True,
57 category="generic",
58 )
59 for key, name in BUILTIN_PLAYLISTS.items()
60]
61
62COLLAGE_IMAGE_PLAYLISTS = (ALL_FAVORITE_TRACKS, RANDOM_TRACKS)
63
64DEFAULT_THUMB = MediaItemImage(
65 type=ImageType.THUMB,
66 path="logo.png",
67 provider="builtin",
68 remotely_accessible=False,
69)
70
71DEFAULT_FANART = MediaItemImage(
72 type=ImageType.FANART,
73 path="fanart.jpg",
74 provider="builtin",
75 remotely_accessible=False,
76)
77
78CONF_ENTRY_LIBRARY_SYNC_TRACKS_HIDDEN = ConfigEntry.from_dict(
79 {
80 **CONF_ENTRY_LIBRARY_SYNC_TRACKS.to_dict(),
81 "hidden": True,
82 "default_value": True,
83 }
84)
85CONF_ENTRY_LIBRARY_SYNC_PLAYLISTS_HIDDEN = ConfigEntry.from_dict(
86 {
87 **CONF_ENTRY_LIBRARY_SYNC_PLAYLISTS.to_dict(),
88 "hidden": True,
89 "default_value": True,
90 }
91)
92CONF_ENTRY_LIBRARY_SYNC_TRACKS_HIDDEN = ConfigEntry.from_dict(
93 {
94 **CONF_ENTRY_LIBRARY_SYNC_TRACKS.to_dict(),
95 "hidden": True,
96 "default_value": True,
97 }
98)
99CONF_ENTRY_LIBRARY_SYNC_RADIOS_HIDDEN = ConfigEntry.from_dict(
100 {
101 **CONF_ENTRY_LIBRARY_SYNC_RADIOS.to_dict(),
102 "hidden": True,
103 "default_value": True,
104 }
105)
106CONF_ENTRY_PROVIDER_SYNC_INTERVAL_PLAYLISTS_MOD = ConfigEntry.from_dict(
107 {
108 **CONF_ENTRY_PROVIDER_SYNC_INTERVAL_PLAYLISTS.to_dict(),
109 "default_value": 180,
110 "label": "Playlists refresh interval",
111 "description": "The interval at which the builtin generated playlists are refreshed.",
112 }
113)
114
115
116CONF_ENTRY_PROVIDER_SYNC_INTERVAL_TRACKS_HIDDEN = ConfigEntry.from_dict(
117 {
118 **CONF_ENTRY_PROVIDER_SYNC_INTERVAL_TRACKS.to_dict(),
119 "hidden": True,
120 "default_value": 180,
121 }
122)
123CONF_ENTRY_PROVIDER_SYNC_INTERVAL_RADIOS_HIDDEN = ConfigEntry.from_dict(
124 {
125 **CONF_ENTRY_PROVIDER_SYNC_INTERVAL_RADIOS.to_dict(),
126 "hidden": True,
127 "default_value": 180,
128 }
129)
130CONF_ENTRY_LIBRARY_SYNC_BACK_HIDDEN = ConfigEntry.from_dict(
131 {
132 **CONF_ENTRY_LIBRARY_SYNC_BACK.to_dict(),
133 "hidden": True,
134 "default_value": True,
135 }
136)
137