Skip to content
Snippets Groups Projects
hooks.py 2.15 KiB
Newer Older
from funkwhale_api import plugins

from . import scrobbler

plugin = plugins.get_plugin("fw_scrobbler")

# https://listenbrainz.org/lastfm-proxy
DEFAULT_SCROBBLER_URL = "http://post.audioscrobbler.com"


@plugin.hooks.connect("history.listening.created")
def forward_to_scrobblers(listening, plugin_conf, **kwargs):
    if plugin_conf["user"] is None:
        raise plugins.Skip()

    username = plugin_conf["user"]["settings"].get("service__username")
    password = plugin_conf["user"]["settings"].get("service__password")
    url = plugin_conf["user"]["settings"].get("service__url", DEFAULT_SCROBBLER_URL)
    if username and password:
        plugin.logger.info("Forwarding scrobbler to %s", url)
        session = plugin.get_requests_session()
        session_key, _, scrobble_url = scrobbler.handshake_v1(
            session=session, url=url, username=username, password=password
        )
        scrobbler.submit_scrobble_v1(
            session=session,
            track=listening.track,
            scrobble_time=listening.creation_date,
            session_key=session_key,
            scrobble_url=scrobble_url,
        )
    else:
        plugin.logger.debug("No scrobbler configuration for user, skipping")


@plugin.hooks.connect("history.listening.now")
def forward_to_now_playing(track, user, plugin_conf, **kwargs):
    if plugin_conf["user"] is None:
        raise plugins.Skip()

    username = plugin_conf["user"]["settings"].get("service__username")
    password = plugin_conf["user"]["settings"].get("service__password")
    url = plugin_conf["user"]["settings"].get("service__url", DEFAULT_SCROBBLER_URL)
    if username and password:
        plugin.logger.info("Forwarding scrobbler to %s", url)
        session = plugin.get_requests_session()
        session_key, now_playing_url, _ = scrobbler.handshake_v1(
            session=session, url=url, username=username, password=password
        )
        scrobbler.submit_now_playing_v1(
            session=session,
            track=track,
            session_key=session_key,
            now_playing_url=now_playing_url,
        )
    else:
        plugin.logger.debug("No scrobbler configuration for user, skipping")