From fadbb9a7ab9244592137288d074442d0272cd592 Mon Sep 17 00:00:00 2001 From: Philipp Wolfer <ph.wolfer@gmail.com> Date: Sun, 24 Oct 2021 11:15:47 +0000 Subject: [PATCH] Added a Maloja plugin to submit listenings (!1383) --- api/config/settings/common.py | 1 + api/funkwhale_api/contrib/maloja/__init__.py | 0 .../contrib/maloja/funkwhale_ready.py | 45 +++++++++++++++++++ .../contrib/maloja/funkwhale_startup.py | 14 ++++++ changes/changelog.d/maloja.enhancement | 1 + 5 files changed, 61 insertions(+) create mode 100644 api/funkwhale_api/contrib/maloja/__init__.py create mode 100644 api/funkwhale_api/contrib/maloja/funkwhale_ready.py create mode 100644 api/funkwhale_api/contrib/maloja/funkwhale_startup.py create mode 100644 changes/changelog.d/maloja.enhancement diff --git a/api/config/settings/common.py b/api/config/settings/common.py index dd040d1454..b86b552139 100644 --- a/api/config/settings/common.py +++ b/api/config/settings/common.py @@ -88,6 +88,7 @@ sys.path.append(FUNKWHALE_PLUGINS_PATH) CORE_PLUGINS = [ "funkwhale_api.contrib.scrobbler", "funkwhale_api.contrib.listenbrainz", + "funkwhale_api.contrib.maloja", ] LOAD_CORE_PLUGINS = env.bool("FUNKWHALE_LOAD_CORE_PLUGINS", default=True) diff --git a/api/funkwhale_api/contrib/maloja/__init__.py b/api/funkwhale_api/contrib/maloja/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/api/funkwhale_api/contrib/maloja/funkwhale_ready.py b/api/funkwhale_api/contrib/maloja/funkwhale_ready.py new file mode 100644 index 0000000000..0dae6e3c6d --- /dev/null +++ b/api/funkwhale_api/contrib/maloja/funkwhale_ready.py @@ -0,0 +1,45 @@ +import json + +from config import plugins +from .funkwhale_startup import PLUGIN + + +class MalojaException(Exception): + pass + + +@plugins.register_hook(plugins.LISTENING_CREATED, PLUGIN) +def submit_listen(listening, conf, **kwargs): + server_url = conf["server_url"] + api_key = conf["api_key"] + if not server_url or not api_key: + return + + logger = PLUGIN["logger"] + logger.info("Submitting listening to Majola at %s", server_url) + payload = get_payload(listening, api_key) + logger.debug("Majola payload: %r", payload) + url = server_url.rstrip("/") + "/apis/mlj_1/newscrobble" + session = plugins.get_session() + response = session.post(url, payload) + response.raise_for_status() + details = json.loads(response.text) + if details["status"] == "success": + logger.info("Majola listening submitted successfully") + else: + raise MalojaException(response.text) + + +def get_payload(listening, api_key): + track = listening.track + payload = { + "key": api_key, + "artists": track.artist.name, + "title": track.title, + "time": int(listening.creation_date.timestamp()), + } + + if track.album: + payload["album"] = track.album.title + + return payload diff --git a/api/funkwhale_api/contrib/maloja/funkwhale_startup.py b/api/funkwhale_api/contrib/maloja/funkwhale_startup.py new file mode 100644 index 0000000000..a9dd01d43a --- /dev/null +++ b/api/funkwhale_api/contrib/maloja/funkwhale_startup.py @@ -0,0 +1,14 @@ +from config import plugins + +PLUGIN = plugins.get_plugin_config( + name="maloja", + label="Maloja", + description="A plugin that allows you to submit your listens to your Maloja server.", + homepage="https://docs.funkwhale.audio/users/builtinplugins.html#maloja-plugin", + version="0.1", + user=True, + conf=[ + {"name": "server_url", "type": "text", "label": "Maloja server URL"}, + {"name": "api_key", "type": "text", "label": "Your Maloja API key"}, + ], +) diff --git a/changes/changelog.d/maloja.enhancement b/changes/changelog.d/maloja.enhancement new file mode 100644 index 0000000000..07c3066f8d --- /dev/null +++ b/changes/changelog.d/maloja.enhancement @@ -0,0 +1 @@ +Added a Maloja plugin to submit listenings \ No newline at end of file -- GitLab