/
/
/
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)
17
18
19class StoredItem(TypedDict):
20 """Definition of an media item (for the builtin provider) stored in persistent storage."""
21
22 item_id: str # url or (locally accessible) file path (or id in case of playlist)
23 name: str
24 image_url: NotRequired[str]
25 last_updated: NotRequired[int]
26
27
28CONF_KEY_RADIOS = "stored_radios"
29CONF_KEY_TRACKS = "stored_tracks"
30CONF_KEY_PLAYLISTS = "stored_playlists"
31
32
33ALL_FAVORITE_TRACKS = "all_favorite_tracks"
34RANDOM_ARTIST = "random_artist"
35RANDOM_ALBUM = "random_album"
36RANDOM_TRACKS = "random_tracks"
37RECENTLY_PLAYED = "recently_played"
38RECENTLY_ADDED_TRACKS = "recently_added_tracks"
39INFINITE_MIX = "infinite_mix"
40INFINITE_MIX_FAVORITES = "infinite_mix_favorites"
41
42BUILTIN_PLAYLISTS = {
43 ALL_FAVORITE_TRACKS: "All favorited tracks",
44 RANDOM_ARTIST: "Random Artist (from library)",
45 RANDOM_ALBUM: "Random Album (from library)",
46 RANDOM_TRACKS: "500 Random tracks (from library)",
47 RECENTLY_PLAYED: "Recently played tracks",
48 RECENTLY_ADDED_TRACKS: "Recently added tracks",
49 INFINITE_MIX: "Infinite Mix (library)",
50 INFINITE_MIX_FAVORITES: "Infinite Mix (favorites)",
51}
52
53# Playlists that are dynamic: tracks are fetched on demand, never pre-loaded.
54DYNAMIC_BUILTIN_PLAYLISTS = frozenset({INFINITE_MIX, INFINITE_MIX_FAVORITES})
55
56BUILTIN_PLAYLISTS_ENTRIES = [
57 ConfigEntry(
58 key=key,
59 type=ConfigEntryType.BOOLEAN,
60 label=name,
61 default_value=True,
62 category="generic",
63 )
64 for key, name in BUILTIN_PLAYLISTS.items()
65]
66
67COLLAGE_IMAGE_PLAYLISTS = (ALL_FAVORITE_TRACKS, RANDOM_TRACKS)
68
69DEFAULT_THUMB = MediaItemImage(
70 type=ImageType.THUMB,
71 path="logo.png",
72 provider="builtin",
73 remotely_accessible=False,
74)
75
76DEFAULT_FANART = MediaItemImage(
77 type=ImageType.FANART,
78 path="fanart.jpg",
79 provider="builtin",
80 remotely_accessible=False,
81)
82
83CONF_ENTRY_LIBRARY_SYNC_TRACKS_HIDDEN = ConfigEntry.from_dict(
84 {
85 **CONF_ENTRY_LIBRARY_SYNC_TRACKS.to_dict(),
86 "hidden": True,
87 "default_value": True,
88 }
89)
90CONF_ENTRY_LIBRARY_SYNC_PLAYLISTS_HIDDEN = ConfigEntry.from_dict(
91 {
92 **CONF_ENTRY_LIBRARY_SYNC_PLAYLISTS.to_dict(),
93 "hidden": True,
94 "default_value": True,
95 }
96)
97CONF_ENTRY_LIBRARY_SYNC_RADIOS_HIDDEN = ConfigEntry.from_dict(
98 {
99 **CONF_ENTRY_LIBRARY_SYNC_RADIOS.to_dict(),
100 "hidden": True,
101 "default_value": True,
102 }
103)
104CONF_ENTRY_LIBRARY_SYNC_BACK_HIDDEN = ConfigEntry.from_dict(
105 {
106 **CONF_ENTRY_LIBRARY_SYNC_BACK.to_dict(),
107 "hidden": True,
108 "default_value": True,
109 }
110)
111