| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- from mopidy.backend import LibraryProvider
- from mopidy.models import Ref
- class SmartLibrary(LibraryProvider):
- def __init__(self, backend, config):
- super().__init__(backend)
- self.config = config
- def browse(self, uri):
- if uri == "smart:":
- return [
- Ref.directory(uri="smart:genres", name="Genres"),
- Ref.directory(uri="smart:artists", name="Artists"),
- ]
- if uri == "smart:genres":
- return [
- Ref.directory(uri=f"smart:genre:{g}", name=g.title())
- for g in ["rock", "jazz", "blues"]
- ]
- if uri.startswith("smart:genre:"):
- genre = uri.split(":", 2)[2]
- tracks = self._tracks_for_genre(genre)
- return [
- Ref.track(uri=t.uri, name=t.name)
- for t in tracks
- ]
- return []
- def lookup(self, uri):
- # return full Track models for playback
- if uri.startswith("smart:genre:"):
- genre = uri.split(":", 2)[2]
- return self._tracks_for_genre(genre)
- return []
- def _tracks_for_genre(self, genre):
- # WORKS: Use Mopidy’s global search API
- results = self.backend.actor.root.actor.library.search(
- {"genre": [genre]}
- )
- tracks = []
- for r in results:
- if r.tracks:
- tracks.extend(r.tracks)
- return tracks[:50] # enforce max
|