music-assistant-server

1.7 KBPY
album.py
1.7 KB50 lines • python
1"""
2MixIn for NicovideoMusicProvider: album-related methods.
3
4In this section, we treat niconico's "series" as an album.
5"""
6
7from __future__ import annotations
8
9from typing import override
10
11from music_assistant_models.errors import MediaNotFoundError
12from music_assistant_models.media_items import Album, Track  # noqa: TC002 - used in @use_cache
13
14from music_assistant.controllers.cache import use_cache
15from music_assistant.providers.nicovideo.provider_mixins.base import (
16    NicovideoMusicProviderMixinBase,
17)
18
19
20class NicovideoMusicProviderAlbumMixin(NicovideoMusicProviderMixinBase):
21    """Album-related methods for NicovideoMusicProvider."""
22
23    @override
24    @use_cache(3600 * 24 * 7)  # Cache for 7 days
25    async def get_album(self, prov_album_id: str) -> Album:
26        """Get full album details by id (series as album)."""
27        album_with_tracks = await self.service_manager.series.get_series_or_own_series(
28            prov_album_id
29        )
30        if not album_with_tracks:
31            raise MediaNotFoundError(f"Album with id {prov_album_id} not found on nicovideo.")
32
33        return album_with_tracks.album
34
35    @override
36    @use_cache(3600 * 24 * 7)  # Cache for 7 days
37    async def get_album_tracks(self, prov_album_id: str) -> list[Track]:
38        """Get album tracks for given album id (series tracks)."""
39        album_with_tracks = await self.service_manager.series.get_series_or_own_series(
40            prov_album_id
41        )
42        if not album_with_tracks:
43            return []
44
45        # Set album information on tracks (cached by @use_cache)
46        for track in album_with_tracks.tracks:
47            track.album = album_with_tracks.album
48
49        return album_with_tracks.tracks
50