mopidy-funkwhale/mopidy_funkwhale/actor.py

46 lines
1.3 KiB
Python

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