46 lines
1.3 KiB
Python
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
|