/
/
/
1"""Constants for the Bandcamp music provider."""
2
3from bandcamp_async_api.models import CollectionType
4from music_assistant_models.enums import ProviderFeature
5
6SUPPORTED_FEATURES = {
7 ProviderFeature.LIBRARY_ARTISTS,
8 ProviderFeature.LIBRARY_ALBUMS,
9 ProviderFeature.LIBRARY_TRACKS,
10 ProviderFeature.SEARCH,
11 ProviderFeature.ARTIST_ALBUMS,
12 ProviderFeature.ARTIST_TOPTRACKS,
13 ProviderFeature.BROWSE,
14 ProviderFeature.RECOMMENDATIONS,
15}
16
17# Config keys
18CONF_IDENTITY = "identity"
19CONF_TOP_TRACKS_LIMIT = "top_tracks_limit"
20DEFAULT_TOP_TRACKS_LIMIT = 50
21
22# Cache TTLs
23CACHE_METADATA = 3600 * 24 * 30 # 30 days - artist/album/track metadata rarely changes
24CACHE_USER_LISTS = 3600 * 4 # 4 hours - wishlists/following change with user activity
25CACHE_EMPTY_RESULTS = 300 # 5 minutes - avoid hammering API for genuinely empty lists
26
27# Browse path slugs
28BROWSE_COLLECTION = "collection"
29BROWSE_FEED = "feed"
30BROWSE_WISHLIST = "wishlist"
31BROWSE_FOLLOWING = "following"
32BROWSE_FANS = "fans"
33BROWSE_FOLLOWERS = "followers"
34
35# Maps person sub-route names to (method_suffix, CollectionType).
36# "content" â _browse_person_content, "following" â _browse_person_following,
37# "people" â _browse_person_people.
38PERSON_SUB_ROUTES: dict[str, tuple[str, CollectionType]] = {
39 BROWSE_COLLECTION: ("content", CollectionType.COLLECTION),
40 BROWSE_WISHLIST: ("content", CollectionType.WISHLIST),
41 BROWSE_FOLLOWING: ("following", CollectionType.FOLLOWING),
42 BROWSE_FANS: ("people", CollectionType.FOLLOWING_FANS),
43 BROWSE_FOLLOWERS: ("people", CollectionType.FOLLOWERS),
44}
45
46# Sub-folders shown for each person's profile
47PERSON_SUB_FOLDERS = [
48 (BROWSE_COLLECTION, "Collection"),
49 (BROWSE_WISHLIST, "Wishlist"),
50 (BROWSE_FOLLOWING, "Following"),
51 (BROWSE_FANS, "Fans"),
52 (BROWSE_FOLLOWERS, "Followers"),
53]
54