| 12345678910111213141516171819202122232425262728293031323334353637 |
- from mopidy.models import Playlist
- class SmartPlaylistsProvider(PlaylistProvider):
- def __init__(self, backend, config):
- super().__init__(backend=backend)
- self.config = config
- self.max_tracks = int(config.get("max_tracks") or 50)
- raw_genres = config.get("genres") or ""
- self.fixed_genres = [g.strip() for g in raw_genres.split(",") if g.strip()]
- def as_list(self):
- """Return available playlists"""
- playlists = [
- Playlist(uri=f"smart:genre:{g}", name=f"Genre: {g.title()}")
- for g in self.fixed_genres
- ]
- return playlists
- def lookup(self, uri):
- parts = uri.split(":")
- if len(parts) < 3 or parts[1] != "genre":
- return None
- genre = ":".join(parts[2:])
- return self._playlist_for_genre(uri, genre)
- def _playlist_for_genre(self, uri, genre):
- """Search the library for tracks with the specified genre"""
- tracks = []
- query = {"genre": [genre]}
- for result in self.backend.library.search(query):
- for t in result.tracks:
- tracks.append(t)
- if len(tracks) >= self.max_tracks:
- break
- if len(tracks) >= self.max_tracks:
- break
- return Playlist(uri=uri, name=f"[Smart] Genre: {genre}", tracks=tracks[:self.max_tracks])
|