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.client = client.APIClient(config) self.library = library.FunkwhaleLibraryProvider(backend=self) self.playback = FunkwhalePlaybackProvider(audio=audio, backend=self) self.uri_schemes = ["funkwhale", "fw"] def on_start(self): if self.config["funkwhale"]["client_id"]: logger.info('Using OAuth2 connection"') 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.client.get_track(id) if track is None: return None url = track["listen_url"] if url.startswith("/"): url = self.backend.config["funkwhale"]["url"] + url if self.backend.client.use_oauth: url += "?token=" + self.backend.client.oauth_token["access_token"] return url