from __future__ import unicode_literals import logging from mopidy import backend import pykka from . import client from . import library logger = logging.getLogger(__name__) class FunkwhaleBackend(pykka.ThreadingActor, backend.Backend): def __init__(self, config, audio): super(FunkwhaleBackend, self).__init__() self.config = config self.remote = client.FunkwhaleClient(config) self.library = library.FunkwhaleLibraryProvider(backend=self) self.playback = FunkwhalePlaybackProvider(audio=audio, backend=self) self.uri_schemes = ['funkwhale', 'fw'] def on_start(self): username = self.remote.username if username is not None: logger.info('Logged in to Funkwhale as "%s" on "%s"', username, self.config['funkwhale']['url']) else: logger.info('Using "%s" anonymously', self.config['funkwhale']['url']) class FunkwhalePlaybackProvider(backend.PlaybackProvider): def translate_uri(self, uri): _, id = library.parse_uri(uri) track = self.backend.remote.http_client.get_track(id) if track is None: return None url = track['listen_url'] if url.startswith('/'): url = self.backend.config['funkwhale']['url'] + url return url