From e62c637aa03456e77dc6d8c902e5c97fb55feeb9 Mon Sep 17 00:00:00 2001 From: krateng Date: Fri, 31 Dec 2021 23:13:08 +0100 Subject: [PATCH] Implemented initial support for importing scrobbles --- maloja/apis/native_v1.py | 6 ++++++ maloja/jinjaenv/context.py | 3 ++- maloja/thirdparty/__init__.py | 16 +++++++++++++-- maloja/web/jinja/abstracts/admin.jinja | 3 ++- maloja/web/jinja/admin_import.jinja | 28 ++++++++++++++++++++++++++ 5 files changed, 52 insertions(+), 4 deletions(-) create mode 100644 maloja/web/jinja/admin_import.jinja diff --git a/maloja/apis/native_v1.py b/maloja/apis/native_v1.py index eb4eba5..b90ea37 100644 --- a/maloja/apis/native_v1.py +++ b/maloja/apis/native_v1.py @@ -337,6 +337,12 @@ def set_settings(**keys): def set_apikeys(**keys): apikeystore.update(keys) +@api.post("import") +@authenticated_api +def import_scrobbles(identifier): + from ..thirdparty import import_scrobbles + import_scrobbles(identifier) + @api.get("backup") @authenticated_api def get_backup(**keys): diff --git a/maloja/jinjaenv/context.py b/maloja/jinjaenv/context.py index 323d669..f39755b 100644 --- a/maloja/jinjaenv/context.py +++ b/maloja/jinjaenv/context.py @@ -2,7 +2,7 @@ from .. import database_packed from . import filters from ..globalconf import malojaconfig -from .. import database, database_packed, malojatime, utilities, malojauri +from .. import database, database_packed, malojatime, utilities, malojauri, thirdparty from doreah.regular import repeatdaily import urllib @@ -31,6 +31,7 @@ def update_jinja_environment(): "utilities": utilities, "mlj_uri": malojauri, "settings": malojaconfig, + "thirdparty": thirdparty, # external "urllib": urllib, "math":math, diff --git a/maloja/thirdparty/__init__.py b/maloja/thirdparty/__init__.py index 9cc2647..3b6e515 100644 --- a/maloja/thirdparty/__init__.py +++ b/maloja/thirdparty/__init__.py @@ -13,6 +13,7 @@ import base64 from doreah.logging import log from ..globalconf import malojaconfig +from .. import database services = { @@ -22,6 +23,12 @@ services = { } +def import_scrobbles(identifier): + for service in services['import']: + if service.identifier == identifier: + return service.import_scrobbles() + return False + def proxy_scrobble_all(artists,title,timestamp): for service in services["proxyscrobble"]: service.scrobble(artists,title,timestamp) @@ -140,10 +147,15 @@ class ImportInterface(GenericInterface,abstract=True): # necessary auth settings exist def active_import(self): return ( - all(self.settings[key] not in [None,"ASK",False] for key in self.scrobbleimport["required_settings"]) and - malojaconfig[self.scrobbleimport["activated_setting"]] + all(self.settings[key] not in [None,"ASK",False] for key in self.scrobbleimport["required_settings"]) + #and malojaconfig[self.scrobbleimport["activated_setting"]] + # registering as import source doesnt do anything on its own, so no need for a setting ) + # wrapper so that all the inheriting classes can scrobble + def self_scrobble(self,artists,title,timestamp): + database.createScrobble(artists=artists,title=title,time=timestamp) + # metadata class MetadataInterface(GenericInterface,abstract=True): diff --git a/maloja/web/jinja/abstracts/admin.jinja b/maloja/web/jinja/abstracts/admin.jinja index 3fd6180..060c169 100644 --- a/maloja/web/jinja/abstracts/admin.jinja +++ b/maloja/web/jinja/abstracts/admin.jinja @@ -22,7 +22,8 @@ ['settings','Settings'], ['apikeys','API Keys'], ['manual','Manual Scrobbling'], - ['issues','Database Maintenance'] + ['issues','Database Maintenance'], + ['import','Scrobble Import'] ] %} {% if page=='admin_' + tab_url %} {{ tab_name }} diff --git a/maloja/web/jinja/admin_import.jinja b/maloja/web/jinja/admin_import.jinja new file mode 100644 index 0000000..7bd15dd --- /dev/null +++ b/maloja/web/jinja/admin_import.jinja @@ -0,0 +1,28 @@ +{% set page ='admin_import' %} +{% extends "abstracts/admin.jinja" %} +{% block title %}Maloja - Import Scrobbles{% endblock %} + + +{% block scripts %} + +{% endblock %} + + +{% block maincontent %} +You can import your scrobbles from other platforms. This will not overwrite scrobbles you've already made, +unless they are deemed to be equivalent (exact same timestamp). Importing multiple times from the same +source should also not lead to any duplicates.

+ +{% for importsource in thirdparty.services.import %} +

{{ importsource.name }}

+ + + +{% endfor %} + +{% endblock %}