From 55621ef4efdf61c3092d42565e897dfbaa0244c8 Mon Sep 17 00:00:00 2001 From: Krateng Date: Sun, 24 Nov 2019 21:47:03 +0100 Subject: [PATCH 01/60] Refactored into Python Package --- logs/dummy => .dev | 0 .gitignore | 4 +- info.py | 10 - maloja | 350 --------- maloja/__init__.py | 19 + cleanup.py => maloja/cleanup.py | 2 +- compliant_api.py => maloja/compliant_api.py | 6 +- maloja/controller.py | 165 +++++ .doreah => maloja/data_files/.doreah | 0 {cache => maloja/data_files/cache}/.gitignore | 0 .../data_files/clients}/.gitignore | 0 .../data_files/clients}/example_file.tsv | 0 .../data_files/images}/.gitignore | 0 .../data_files/images}/images.info | 0 {scrobbles => maloja/data_files/logs}/dummy | 0 .../data_files/rules}/predefined/.gitignore | 0 .../predefined/krateng_artistsingroups.tsv | 0 .../predefined/krateng_firefly-soundtrack.tsv | 0 .../rules}/predefined/krateng_jeremysoule.tsv | 0 .../predefined/krateng_kpopgirlgroups.tsv | 0 .../predefined/krateng_lotr-soundtrack.tsv | 0 .../rules}/predefined/krateng_monstercat.tsv | 0 .../rules}/predefined/predefined.info | 0 {rules => maloja/data_files/rules}/rules.info | 0 maloja/data_files/scrobbles/dummy | 0 .../data_files/settings}/.gitignore | 0 .../data_files/settings}/default.ini | 0 database.py => maloja/database.py | 15 +- maloja/doreah | 1 + external.py => maloja/external.py | 0 fixexisting.py => maloja/fixexisting.py | 2 +- htmlgenerators.py => maloja/htmlgenerators.py | 2 +- htmlmodules.py => maloja/htmlmodules.py | 10 +- maloja/info.py | 19 + .../lastfmconverter.py | 4 +- malojatime.py => maloja/malojatime.py | 0 monkey.py => maloja/monkey.py | 0 server.py => maloja/server.py | 77 +- supervisor.py => maloja/supervisor.py | 2 +- urihandler.py => maloja/urihandler.py | 2 +- utilities.py => maloja/utilities.py | 8 +- {website => maloja/website}/admin.pyhp | 0 {website => maloja/website}/artist.html | 0 {website => maloja/website}/artist.py | 12 +- {website => maloja/website}/artist.pyhp | 0 .../website}/charts_artists.html | 0 {website => maloja/website}/charts_artists.py | 8 +- .../website}/charts_tracks.html | 0 {website => maloja/website}/charts_tracks.py | 10 +- .../website}/common/footer.html | 0 .../website}/common/header.html | 0 {website => maloja/website}/compare.html | 0 {website => maloja/website}/compare.py | 6 +- maloja/website/css/style.css | 671 ++++++++++++++++++ .../website}/errors/generic.html | 0 {website => maloja/website}/favicon.ico | Bin {website => maloja/website}/favicon.png | Bin {website => maloja/website}/issues.html | 0 {website => maloja/website}/issues.py | 4 +- .../website}/javascript/cookies.js | 0 .../website}/javascript/datechange.js | 0 .../website}/javascript/neopolitan.js | 3 +- .../website}/javascript/rangeselect.js | 0 .../website}/javascript/search.js | 0 .../website}/javascript/upload.js | 0 {website => maloja/website}/less/grisons.less | 0 .../website}/less/grisonsfont.less | 0 {website => maloja/website}/less/maloja.less | 0 {website => maloja/website}/manual.html | 0 .../website}/media/chartpos_bronze.png | Bin .../website}/media/chartpos_gold.png | Bin .../website}/media/chartpos_normal.png | Bin .../website}/media/chartpos_silver.png | Bin .../website}/media/record_diamond.png | Bin .../website}/media/record_gold.png | Bin .../website}/media/record_gold_original.png | Bin .../website}/media/record_platinum.png | Bin {website => maloja/website}/media/star.png | Bin .../website}/media/star_alt.png | Bin {website => maloja/website}/performance.html | 0 {website => maloja/website}/performance.py | 12 +- {website => maloja/website}/proxy.html | 0 {website => maloja/website}/proxy.py | 4 +- {website => maloja/website}/pulse.html | 0 {website => maloja/website}/pulse.py | 12 +- {website => maloja/website}/robots.txt | 0 {website => maloja/website}/scrobbles.html | 0 {website => maloja/website}/scrobbles.py | 12 +- {website => maloja/website}/setup.html | 0 {website => maloja/website}/setup.py | 0 {website => maloja/website}/start.html | 0 {website => maloja/website}/start.py | 6 +- {website => maloja/website}/top_artists.html | 0 {website => maloja/website}/top_artists.py | 10 +- {website => maloja/website}/top_tracks.html | 0 {website => maloja/website}/top_tracks.py | 10 +- {website => maloja/website}/track.html | 0 {website => maloja/website}/track.py | 12 +- {website => maloja/website}/track.pyhp | 0 {website => maloja/website}/wait.html | 0 setup.py | 34 + update_requirements.sh | 2 - 102 files changed, 1043 insertions(+), 483 deletions(-) rename logs/dummy => .dev (100%) delete mode 100644 info.py delete mode 100755 maloja create mode 100644 maloja/__init__.py rename cleanup.py => maloja/cleanup.py (99%) rename compliant_api.py => maloja/compliant_api.py (98%) create mode 100755 maloja/controller.py rename .doreah => maloja/data_files/.doreah (100%) rename {cache => maloja/data_files/cache}/.gitignore (100%) rename {clients => maloja/data_files/clients}/.gitignore (100%) rename {clients => maloja/data_files/clients}/example_file.tsv (100%) rename {images => maloja/data_files/images}/.gitignore (100%) rename {images => maloja/data_files/images}/images.info (100%) rename {scrobbles => maloja/data_files/logs}/dummy (100%) rename {rules => maloja/data_files/rules}/predefined/.gitignore (100%) rename {rules => maloja/data_files/rules}/predefined/krateng_artistsingroups.tsv (100%) rename {rules => maloja/data_files/rules}/predefined/krateng_firefly-soundtrack.tsv (100%) rename {rules => maloja/data_files/rules}/predefined/krateng_jeremysoule.tsv (100%) rename {rules => maloja/data_files/rules}/predefined/krateng_kpopgirlgroups.tsv (100%) rename {rules => maloja/data_files/rules}/predefined/krateng_lotr-soundtrack.tsv (100%) rename {rules => maloja/data_files/rules}/predefined/krateng_monstercat.tsv (100%) rename {rules => maloja/data_files/rules}/predefined/predefined.info (100%) rename {rules => maloja/data_files/rules}/rules.info (100%) create mode 100644 maloja/data_files/scrobbles/dummy rename {settings => maloja/data_files/settings}/.gitignore (100%) rename {settings => maloja/data_files/settings}/default.ini (100%) rename database.py => maloja/database.py (99%) create mode 120000 maloja/doreah rename external.py => maloja/external.py (100%) rename fixexisting.py => maloja/fixexisting.py (97%) rename htmlgenerators.py => maloja/htmlgenerators.py (99%) rename htmlmodules.py => maloja/htmlmodules.py (98%) create mode 100644 maloja/info.py rename lastfmconverter.py => maloja/lastfmconverter.py (96%) rename malojatime.py => maloja/malojatime.py (100%) rename monkey.py => maloja/monkey.py (100%) rename server.py => maloja/server.py (79%) rename supervisor.py => maloja/supervisor.py (81%) rename urihandler.py => maloja/urihandler.py (98%) rename utilities.py => maloja/utilities.py (97%) rename {website => maloja/website}/admin.pyhp (100%) rename {website => maloja/website}/artist.html (100%) rename {website => maloja/website}/artist.py (92%) rename {website => maloja/website}/artist.pyhp (100%) rename {website => maloja/website}/charts_artists.html (100%) rename {website => maloja/website}/charts_artists.py (79%) rename {website => maloja/website}/charts_tracks.html (100%) rename {website => maloja/website}/charts_tracks.py (81%) rename {website => maloja/website}/common/footer.html (100%) rename {website => maloja/website}/common/header.html (100%) rename {website => maloja/website}/compare.html (100%) rename {website => maloja/website}/compare.py (96%) create mode 100644 maloja/website/css/style.css rename {website => maloja/website}/errors/generic.html (100%) rename {website => maloja/website}/favicon.ico (100%) rename {website => maloja/website}/favicon.png (100%) rename {website => maloja/website}/issues.html (100%) rename {website => maloja/website}/issues.py (96%) rename {website => maloja/website}/javascript/cookies.js (100%) rename {website => maloja/website}/javascript/datechange.js (100%) rename {website => maloja/website}/javascript/neopolitan.js (83%) rename {website => maloja/website}/javascript/rangeselect.js (100%) rename {website => maloja/website}/javascript/search.js (100%) rename {website => maloja/website}/javascript/upload.js (100%) rename {website => maloja/website}/less/grisons.less (100%) rename {website => maloja/website}/less/grisonsfont.less (100%) rename {website => maloja/website}/less/maloja.less (100%) rename {website => maloja/website}/manual.html (100%) rename {website => maloja/website}/media/chartpos_bronze.png (100%) rename {website => maloja/website}/media/chartpos_gold.png (100%) rename {website => maloja/website}/media/chartpos_normal.png (100%) rename {website => maloja/website}/media/chartpos_silver.png (100%) rename {website => maloja/website}/media/record_diamond.png (100%) rename {website => maloja/website}/media/record_gold.png (100%) rename {website => maloja/website}/media/record_gold_original.png (100%) rename {website => maloja/website}/media/record_platinum.png (100%) rename {website => maloja/website}/media/star.png (100%) rename {website => maloja/website}/media/star_alt.png (100%) rename {website => maloja/website}/performance.html (100%) rename {website => maloja/website}/performance.py (85%) rename {website => maloja/website}/proxy.html (100%) rename {website => maloja/website}/proxy.py (96%) rename {website => maloja/website}/pulse.html (100%) rename {website => maloja/website}/pulse.py (86%) rename {website => maloja/website}/robots.txt (100%) rename {website => maloja/website}/scrobbles.html (100%) rename {website => maloja/website}/scrobbles.py (82%) rename {website => maloja/website}/setup.html (100%) rename {website => maloja/website}/setup.py (100%) rename {website => maloja/website}/start.html (100%) rename {website => maloja/website}/start.py (94%) rename {website => maloja/website}/top_artists.html (100%) rename {website => maloja/website}/top_artists.py (75%) rename {website => maloja/website}/top_tracks.html (100%) rename {website => maloja/website}/top_tracks.py (76%) rename {website => maloja/website}/track.html (100%) rename {website => maloja/website}/track.py (91%) rename {website => maloja/website}/track.pyhp (100%) rename {website => maloja/website}/wait.html (100%) create mode 100644 setup.py delete mode 100644 update_requirements.sh diff --git a/logs/dummy b/.dev similarity index 100% rename from logs/dummy rename to .dev diff --git a/.gitignore b/.gitignore index ff3a5ed..fe27dbb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,15 @@ # generic temporary / dev files *.pyc *.sh -!/update_requirements.sh *.note *.xcf nohup.out -/.dev +/maloja.egg-info # user files *.tsv *.rulestate *.log -*.css # currently not using /screenshot*.png diff --git a/info.py b/info.py deleted file mode 100644 index 941fd4b..0000000 --- a/info.py +++ /dev/null @@ -1,10 +0,0 @@ -import os - -author = { - "name":"Johannes Krattenmacher", - "email":"maloja@krateng.dev", - "github": "krateng" -} -version = 1,5,15 -versionstr = ".".join(str(n) for n in version) -dev = os.path.exists("./.dev") diff --git a/maloja b/maloja deleted file mode 100755 index 8019e20..0000000 --- a/maloja +++ /dev/null @@ -1,350 +0,0 @@ -#!/usr/bin/env python3 - -import subprocess -import sys -import signal -import os -import stat -import pathlib - - - -neededmodules = [ - "bottle", - "waitress", - "setproctitle", - "doreah", - "nimrodel" -] - -recommendedmodules = [ - "wand" -] - -SOURCE_URL = "https://github.com/krateng/maloja/archive/master.zip" - - - -def blue(txt): return "\033[94m" + txt + "\033[0m" -def green(txt): return "\033[92m" + txt + "\033[0m" -def yellow(txt): return "\033[93m" + txt + "\033[0m" - -## GOTODIR goes to directory that seems to have a maloja install -## SETUP assumes correct directory. sets settings and key -## INSTALL ignores local files, just installs prerequisites -## START INSTALL - GOTODIR - SETUP - starts process -## RESTART STOP - START -## STOP Stops process -## UPDATE GOTODIR - updates from repo -## LOADLASTFM GOTODIR - imports csv data -## INSTALLHERE makes this directory valid - UPDATE - INSTALL - SETUP - -def gotodir(): - if os.path.exists("./server.py"): - return True - elif os.path.exists("/opt/maloja/server.py"): - os.chdir("/opt/maloja/") - return True - - print("Maloja installation could not be found.") - return False - -def setup(): - - from doreah import settings - - # EXTERNAL API KEYS - apikeys = { - "LASTFM_API_KEY":"Last.fm API Key", - "FANARTTV_API_KEY":"Fanart.tv API Key", - "SPOTIFY_API_ID":"Spotify Client ID", - "SPOTIFY_API_SECRET":"Spotify Client Secret" - } - - print("Various external services can be used to display images. If not enough of them are set up, only local images will be used.") - for k in apikeys: - key = settings.get_settings(k) - if key is None: - print("\t" + "Currently not using a " + apikeys[k] + " for image display.") - elif key == "ASK": - print("\t" + "Please enter your " + apikeys[k] + ". If you do not want to use one at this moment, simply leave this empty and press Enter.") - key = input() - if key == "": key = None - settings.update_settings("settings/settings.ini",{k:key},create_new=True) - else: - print("\t" + apikeys[k] + " found.") - - - # OWN API KEY - if os.path.exists("./clients/authenticated_machines.tsv"): - pass - else: - print("Do you want to set up a key to enable scrobbling? Your scrobble extension needs that key so that only you can scrobble tracks to your database. [Y/n]") - answer = input() - if answer.lower() in ["y","yes","yea","1","positive","true",""]: - import random - key = "" - for i in range(64): - key += str(random.choice(list(range(10)) + list("abcdefghijklmnopqrstuvwxyz") + list("ABCDEFGHIJKLMNOPQRSTUVWXYZ"))) - print("Your API Key: " + yellow(key)) - with open("./clients/authenticated_machines.tsv","w") as keyfile: - keyfile.write(key + "\t" + "Default Generated Key") - elif answer.lower() in ["n","no","nay","0","negative","false"]: - pass - -def install(): - toinstall = [] - toinstallr = [] - for m in neededmodules: - try: - exec("import " + m) #I'm sorry - except: - toinstall.append(m) - - for m in recommendedmodules: - try: - exec("import " + m) - except: - toinstallr.append(m) - - if toinstall != []: - print("The following python modules need to be installed:") - for m in toinstall: - print("\t" + yellow(m)) - if toinstallr != []: - print("The following python modules are highly recommended, some features will not work without them:") - for m in toinstallr: - print("\t" + yellow(m)) - - if toinstall != [] or toinstallr != []: - if os.geteuid() != 0: - print("You can install them with",yellow("pip install -r requirements.txt"),"or Maloja can try to install them automatically. For this, you need to run this script as a root user.") - return False - else: - print("You can install them with",yellow("pip install -r requirements.txt"),"or Maloja can try to install them automatically, This might or might not work / bloat your system / cause a nuclear war.") - fail = False - if toinstall != []: - print("Attempt to install required modules? [Y/n]") - answer = input() - - if answer.lower() in ["y","yes","yea","1","positive","true",""]: - for m in toinstall: - try: - print("Installing " + m + " with pip...") - from pip._internal import main as pipmain - #os.system("pip3 install " + m) - pipmain(["install",m]) - print("Success!") - except: - print("Failure!") - fail = True - - elif answer.lower() in ["n","no","nay","0","negative","false"]: - return False #if you dont want to auto install required, you probably dont want to install recommended - else: - print("What?") - return False - if toinstallr != []: - print("Attempt to install recommended modules? [Y/n]") - answer = input() - - if answer.lower() in ["y","yes","yea","1","positive","true",""]: - for m in toinstallr: - try: - print("Installing " + m + " with pip...") - from pip._internal import main as pipmain - #os.system("pip3 install " + m) - pipmain(["install",m]) - print("Success!") - except: - print("Failure!") - fail = True - - elif answer.lower() in ["n","no","nay","0","negative","false"]: - return False - else: - print("What?") - return False - - if fail: return False - print("All modules successfully installed!") - print("Run the script again (without root) to start Maloja.") - return False - - else: - print("All necessary modules seem to be installed.") - return True - -def getInstance(): - try: - output = subprocess.check_output(["pidof","Maloja"]) - pid = int(output) - return pid - except: - return None - -def getInstanceSupervisor(): - try: - output = subprocess.check_output(["pidof","maloja_supervisor"]) - pid = int(output) - return pid - except: - return None - -def start(): - if install(): - - if gotodir(): - setup() - p = subprocess.Popen(["python3","server.py"],stdout=subprocess.DEVNULL,stderr=subprocess.DEVNULL) - p = subprocess.Popen(["python3","supervisor.py"],stdout=subprocess.DEVNULL,stderr=subprocess.DEVNULL) - print(green("Maloja started!") + " PID: " + str(p.pid)) - - from doreah import settings - port = settings.get_settings("WEB_PORT") - - print("Visit your server address (Port " + str(port) + ") to see your web interface. Visit /setup to get started.") - print("If you're installing this on your local machine, these links should get you there:") - print("\t" + blue("http://localhost:" + str(port))) - print("\t" + blue("http://localhost:" + str(port) + "/setup")) - return True - #else: - # os.chdir("/opt/maloja/") - # p = subprocess.Popen(["python3","server.py"],stdout=subprocess.DEVNULL,stderr=subprocess.DEVNULL) - # print("Maloja started! PID: " + str(p.pid)) - # return True - - print("Error while starting Maloja.") - return False - -def restart(): - #pid = getInstance() - #if pid == None: - # print("Server is not running.") - #else: - # stop() - #start() - - wasrunning = stop() - start() - return wasrunning - -def stop(): - pid_sv = getInstanceSupervisor() - if pid_sv is not None: - os.kill(pid_sv,signal.SIGTERM) - - pid = getInstance() - if pid is None: - print("Server is not running") - return False - else: - os.kill(pid,signal.SIGTERM) - print("Maloja stopped! PID: " + str(pid)) - return True - -def update(): - - import urllib.request - import shutil - #import tempfile - import zipfile - import distutils.dir_util - - if not gotodir(): return False - - if os.path.exists("./.dev"): - print("Better not overwrite the development server!") - return - - print("Updating Maloja...") - #with urllib.request.urlopen(SOURCE_URL) as response: - # with tempfile.NamedTemporaryFile(delete=True) as tmpfile: - # shutil.copyfileobj(response,tmpfile) - # - # with zipfile.ZipFile(tmpfile.name,"r") as z: - # - # for f in z.namelist(): - # #print("extracting " + f) - # z.extract(f) - - - os.system("wget " + SOURCE_URL) - with zipfile.ZipFile("./master.zip","r") as z: - - # if we ever have a separate directory for the code - # (the calling update script is not the same version as the current - # remote repository, so we better add this check just in case) - if "source/" in z.namelist(): - for f in z.namelist(): - if f.startswith("source/"): - z.extract(f) - for dir,_,files in os.walk("source"): - for f in files: - origfile = os.path.join(dir,f) - newfile = ps.path.join(dir[7:],f) - os.renames(origfile,newfile) #also prunes empty directory - else: - for f in z.namelist(): - z.extract(f) - - os.remove("./master.zip") - - - distutils.dir_util.copy_tree("./maloja-master/","./",verbose=2) - shutil.rmtree("./maloja-master") - print("Done!") - - os.chmod("./maloja",os.stat("./maloja").st_mode | stat.S_IXUSR) - os.chmod("./update_requirements.sh",os.stat("./update_requirements.sh").st_mode | stat.S_IXUSR) - - try: - returnval = os.system("./update_requirements.sh") - assert returnval == 0 - except: - print("Make sure to update required modules! (" + yellow("./update_requirements.sh") + ")") - - if stop(): start() #stop returns whether it was running before, in which case we restart it - -def loadlastfm(): - - try: - filename = sys.argv[2] - filename = os.path.abspath(filename) - except: - print("Please specify a file!") - return - - if gotodir(): - if os.path.exists("./scrobbles/lastfmimport.tsv"): - print("Already imported Last.FM data. Overwrite? [y/N]") - if input().lower() in ["y","yes","yea","1","positive","true"]: - pass - else: - return - print("Please wait...") - os.system("python3 ./lastfmconverter.py " + filename + " ./scrobbles/lastfmimport.tsv") - print("Successfully imported your Last.FM scrobbles!") - -def installhere(): - if len(os.listdir()) > 1: - print("You should install Maloja in an empty directory.") - return False - else: - open("server.py","w").close() - # if it's cheese, but it works, it ain't cheese - update() - install() - setup() - - print("Maloja installed! Start with " + yellow("./maloja start")) - - -if __name__ == "__main__": - if sys.argv[1] == "start": restart() - elif sys.argv[1] == "restart": restart() - elif sys.argv[1] == "stop": stop() - elif sys.argv[1] == "update": update() - elif sys.argv[1] == "import": loadlastfm() - elif sys.argv[1] == "install": installhere() - else: print("Valid commands: start restart stop update import install") diff --git a/maloja/__init__.py b/maloja/__init__.py new file mode 100644 index 0000000..69868b0 --- /dev/null +++ b/maloja/__init__.py @@ -0,0 +1,19 @@ +name = "maloja" + +from .info import author,version,versionstr + +requires = [ + "bottle>=0.12.16", + "waitress>=1.3", + "doreah>=1.2.7", + "nimrodel>=0.4.9", + "setproctitle>=1.1.10", + "wand>=0.5.4", + "lesscpy>=0.13" +] +resources = [ + "website/*/*", + "website/*", + "data_files/*/*", + "data_files/.doreah" +] diff --git a/cleanup.py b/maloja/cleanup.py similarity index 99% rename from cleanup.py rename to maloja/cleanup.py index 7961940..600170a 100644 --- a/cleanup.py +++ b/maloja/cleanup.py @@ -1,5 +1,5 @@ import re -import utilities +from . import utilities from doreah import tsv, settings # need to do this as a class so it can retain loaded settings from file diff --git a/compliant_api.py b/maloja/compliant_api.py similarity index 98% rename from compliant_api.py rename to maloja/compliant_api.py index 5960efa..ae20c26 100644 --- a/compliant_api.py +++ b/maloja/compliant_api.py @@ -1,11 +1,11 @@ from doreah.logging import log import hashlib import random -import database +from . import database import datetime import itertools import sys -from cleanup import CleanerAgent +from .cleanup import CleanerAgent from bottle import response ## GNU-FM-compliant scrobbling @@ -68,7 +68,7 @@ def handle(path,keys): def scrobbletrack(artiststr,titlestr,timestamp): try: - log("Incoming scrobble (compliant API): ARTISTS: " + artiststr + ", TRACK: " + titlestr,module="debug") + log("Incoming scrobble (compliant API): ARTISTS: " + artiststr + ", TRACK: " + titlestr,module="debug") (artists,title) = cla.fullclean(artiststr,titlestr) database.createScrobble(artists,title,timestamp) database.sync() diff --git a/maloja/controller.py b/maloja/controller.py new file mode 100755 index 0000000..ba03c78 --- /dev/null +++ b/maloja/controller.py @@ -0,0 +1,165 @@ +#!/usr/bin/env python3 + +import subprocess +import sys +import signal +import os +import shutil +from distutils import dir_util +import stat +import pathlib +import pkg_resources + +from .info import DATA_DIR + + + +def blue(txt): return "\033[94m" + txt + "\033[0m" +def green(txt): return "\033[92m" + txt + "\033[0m" +def yellow(txt): return "\033[93m" + txt + "\033[0m" + + + + + +os.chdir(DATA_DIR) + +def copy_initial_local_files(): + folder = pkg_resources.resource_filename(__name__,"data_files") + #shutil.copy(folder,DATA_DIR) + dir_util.copy_tree(folder,DATA_DIR) + + +def setup(): + + copy_initial_local_files() + + from doreah import settings + + # EXTERNAL API KEYS + apikeys = { + "LASTFM_API_KEY":"Last.fm API Key", + "FANARTTV_API_KEY":"Fanart.tv API Key", + "SPOTIFY_API_ID":"Spotify Client ID", + "SPOTIFY_API_SECRET":"Spotify Client Secret" + } + + print("Various external services can be used to display images. If not enough of them are set up, only local images will be used.") + for k in apikeys: + key = settings.get_settings(k) + if key is None: + print("\t" + "Currently not using a " + apikeys[k] + " for image display.") + elif key == "ASK": + print("\t" + "Please enter your " + apikeys[k] + ". If you do not want to use one at this moment, simply leave this empty and press Enter.") + key = input() + if key == "": key = None + settings.update_settings("settings/settings.ini",{k:key},create_new=True) + else: + print("\t" + apikeys[k] + " found.") + + + # OWN API KEY + if os.path.exists("./clients/authenticated_machines.tsv"): + pass + else: + print("Do you want to set up a key to enable scrobbling? Your scrobble extension needs that key so that only you can scrobble tracks to your database. [Y/n]") + answer = input() + if answer.lower() in ["y","yes","yea","1","positive","true",""]: + import random + key = "" + for i in range(64): + key += str(random.choice(list(range(10)) + list("abcdefghijklmnopqrstuvwxyz") + list("ABCDEFGHIJKLMNOPQRSTUVWXYZ"))) + print("Your API Key: " + yellow(key)) + with open("./clients/authenticated_machines.tsv","w") as keyfile: + keyfile.write(key + "\t" + "Default Generated Key") + elif answer.lower() in ["n","no","nay","0","negative","false"]: + pass + + +def getInstance(): + try: + output = subprocess.check_output(["pidof","Maloja"]) + pid = int(output) + return pid + except: + return None + +def getInstanceSupervisor(): + try: + output = subprocess.check_output(["pidof","maloja_supervisor"]) + pid = int(output) + return pid + except: + return None + +def start(): + setup() + try: + p = subprocess.Popen(["python3","-m","maloja.server"],stdout=subprocess.DEVNULL,stderr=subprocess.DEVNULL,cwd=DATA_DIR) + sp = subprocess.Popen(["python3","-m","maloja.supervisor"],stdout=subprocess.DEVNULL,stderr=subprocess.DEVNULL,cwd=DATA_DIR) + print(green("Maloja started!") + " PID: " + str(p.pid)) + + from doreah import settings + port = settings.get_settings("WEB_PORT") + + print("Visit your server address (Port " + str(port) + ") to see your web interface. Visit /setup to get started.") + print("If you're installing this on your local machine, these links should get you there:") + print("\t" + blue("http://localhost:" + str(port))) + print("\t" + blue("http://localhost:" + str(port) + "/setup")) + return True + except: + print("Error while starting Maloja.") + return False + +def restart(): + wasrunning = stop() + start() + return wasrunning + +def stop(): + pid_sv = getInstanceSupervisor() + if pid_sv is not None: + os.kill(pid_sv,signal.SIGTERM) + + pid = getInstance() + if pid is None: + print("Server is not running") + return False + else: + os.kill(pid,signal.SIGTERM) + print("Maloja stopped! PID: " + str(pid)) + return True + + +def loadlastfm(): + + try: + filename = sys.argv[2] + filename = os.path.abspath(filename) + except: + print("Please specify a file!") + return + + if os.path.exists("./scrobbles/lastfmimport.tsv"): + print("Already imported Last.FM data. Overwrite? [y/N]") + if input().lower() in ["y","yes","yea","1","positive","true"]: + pass + else: + return + print("Please wait...") + os.system("python3 ./lastfmconverter.py " + filename + " ./scrobbles/lastfmimport.tsv") + print("Successfully imported your Last.FM scrobbles!") + + + +def main(): + if sys.argv[1] == "start": restart() + elif sys.argv[1] == "restart": restart() + elif sys.argv[1] == "stop": stop() + #elif sys.argv[1] == "update": update() + elif sys.argv[1] == "import": loadlastfm() + #elif sys.argv[1] == "install": installhere() + else: print("Valid commands: start restart stop import") + +if __name__ == "__main__": + main() diff --git a/.doreah b/maloja/data_files/.doreah similarity index 100% rename from .doreah rename to maloja/data_files/.doreah diff --git a/cache/.gitignore b/maloja/data_files/cache/.gitignore similarity index 100% rename from cache/.gitignore rename to maloja/data_files/cache/.gitignore diff --git a/clients/.gitignore b/maloja/data_files/clients/.gitignore similarity index 100% rename from clients/.gitignore rename to maloja/data_files/clients/.gitignore diff --git a/clients/example_file.tsv b/maloja/data_files/clients/example_file.tsv similarity index 100% rename from clients/example_file.tsv rename to maloja/data_files/clients/example_file.tsv diff --git a/images/.gitignore b/maloja/data_files/images/.gitignore similarity index 100% rename from images/.gitignore rename to maloja/data_files/images/.gitignore diff --git a/images/images.info b/maloja/data_files/images/images.info similarity index 100% rename from images/images.info rename to maloja/data_files/images/images.info diff --git a/scrobbles/dummy b/maloja/data_files/logs/dummy similarity index 100% rename from scrobbles/dummy rename to maloja/data_files/logs/dummy diff --git a/rules/predefined/.gitignore b/maloja/data_files/rules/predefined/.gitignore similarity index 100% rename from rules/predefined/.gitignore rename to maloja/data_files/rules/predefined/.gitignore diff --git a/rules/predefined/krateng_artistsingroups.tsv b/maloja/data_files/rules/predefined/krateng_artistsingroups.tsv similarity index 100% rename from rules/predefined/krateng_artistsingroups.tsv rename to maloja/data_files/rules/predefined/krateng_artistsingroups.tsv diff --git a/rules/predefined/krateng_firefly-soundtrack.tsv b/maloja/data_files/rules/predefined/krateng_firefly-soundtrack.tsv similarity index 100% rename from rules/predefined/krateng_firefly-soundtrack.tsv rename to maloja/data_files/rules/predefined/krateng_firefly-soundtrack.tsv diff --git a/rules/predefined/krateng_jeremysoule.tsv b/maloja/data_files/rules/predefined/krateng_jeremysoule.tsv similarity index 100% rename from rules/predefined/krateng_jeremysoule.tsv rename to maloja/data_files/rules/predefined/krateng_jeremysoule.tsv diff --git a/rules/predefined/krateng_kpopgirlgroups.tsv b/maloja/data_files/rules/predefined/krateng_kpopgirlgroups.tsv similarity index 100% rename from rules/predefined/krateng_kpopgirlgroups.tsv rename to maloja/data_files/rules/predefined/krateng_kpopgirlgroups.tsv diff --git a/rules/predefined/krateng_lotr-soundtrack.tsv b/maloja/data_files/rules/predefined/krateng_lotr-soundtrack.tsv similarity index 100% rename from rules/predefined/krateng_lotr-soundtrack.tsv rename to maloja/data_files/rules/predefined/krateng_lotr-soundtrack.tsv diff --git a/rules/predefined/krateng_monstercat.tsv b/maloja/data_files/rules/predefined/krateng_monstercat.tsv similarity index 100% rename from rules/predefined/krateng_monstercat.tsv rename to maloja/data_files/rules/predefined/krateng_monstercat.tsv diff --git a/rules/predefined/predefined.info b/maloja/data_files/rules/predefined/predefined.info similarity index 100% rename from rules/predefined/predefined.info rename to maloja/data_files/rules/predefined/predefined.info diff --git a/rules/rules.info b/maloja/data_files/rules/rules.info similarity index 100% rename from rules/rules.info rename to maloja/data_files/rules/rules.info diff --git a/maloja/data_files/scrobbles/dummy b/maloja/data_files/scrobbles/dummy new file mode 100644 index 0000000..e69de29 diff --git a/settings/.gitignore b/maloja/data_files/settings/.gitignore similarity index 100% rename from settings/.gitignore rename to maloja/data_files/settings/.gitignore diff --git a/settings/default.ini b/maloja/data_files/settings/default.ini similarity index 100% rename from settings/default.ini rename to maloja/data_files/settings/default.ini diff --git a/database.py b/maloja/database.py similarity index 99% rename from database.py rename to maloja/database.py index 1ae61db..f58f26a 100644 --- a/database.py +++ b/maloja/database.py @@ -1,12 +1,13 @@ # server from bottle import request, response, FormsDict # rest of the project -from cleanup import CleanerAgent, CollectorAgent -import utilities -from malojatime import register_scrobbletime, time_stamps, ranges -from urihandler import uri_to_internal, internal_to_uri, compose_querystring -import compliant_api -from external import proxy_scrobble +from .cleanup import CleanerAgent, CollectorAgent +from . import utilities +from .malojatime import register_scrobbletime, time_stamps, ranges +from .urihandler import uri_to_internal, internal_to_uri, compose_querystring +from . import compliant_api +from .external import proxy_scrobble +from . import info # doreah toolkit from doreah.logging import log from doreah import tsv @@ -232,7 +233,7 @@ def test_server(key=None): @dbserver.get("serverinfo") def server_info(): - import info + response.set_header("Access-Control-Allow-Origin","*") response.set_header("Content-Type","application/json") diff --git a/maloja/doreah b/maloja/doreah new file mode 120000 index 0000000..2724e86 --- /dev/null +++ b/maloja/doreah @@ -0,0 +1 @@ +../../tools/doreah/doreah \ No newline at end of file diff --git a/external.py b/maloja/external.py similarity index 100% rename from external.py rename to maloja/external.py diff --git a/fixexisting.py b/maloja/fixexisting.py similarity index 97% rename from fixexisting.py rename to maloja/fixexisting.py index 5c4538e..45cb36c 100644 --- a/fixexisting.py +++ b/maloja/fixexisting.py @@ -1,6 +1,6 @@ import os import re -from cleanup import CleanerAgent +from .cleanup import CleanerAgent from doreah.logging import log import difflib diff --git a/htmlgenerators.py b/maloja/htmlgenerators.py similarity index 99% rename from htmlgenerators.py rename to maloja/htmlgenerators.py index e443fd7..6c0c16b 100644 --- a/htmlgenerators.py +++ b/maloja/htmlgenerators.py @@ -1,7 +1,7 @@ import urllib from bottle import FormsDict import datetime -from urihandler import compose_querystring +from .urihandler import compose_querystring import urllib.parse from doreah.settings import get_settings diff --git a/htmlmodules.py b/maloja/htmlmodules.py similarity index 98% rename from htmlmodules.py rename to maloja/htmlmodules.py index 6182af2..be173e8 100644 --- a/htmlmodules.py +++ b/maloja/htmlmodules.py @@ -1,8 +1,8 @@ -from htmlgenerators import * -import database -from utilities import getArtistImage, getTrackImage -from malojatime import * -from urihandler import compose_querystring, internal_to_uri, uri_to_internal +from .htmlgenerators import * +from . import database +from .utilities import getArtistImage, getTrackImage +from .malojatime import * +from .urihandler import compose_querystring, internal_to_uri, uri_to_internal import urllib import datetime import math diff --git a/maloja/info.py b/maloja/info.py new file mode 100644 index 0000000..55c2894 --- /dev/null +++ b/maloja/info.py @@ -0,0 +1,19 @@ +import os + +author = { + "name":"Johannes Krattenmacher", + "email":"maloja@krateng.dev", + "github": "krateng" +} +version = 2,0,0 +versionstr = ".".join(str(n) for n in version) + + +try: + DATA_DIR = os.environ["XDG_DATA_HOME"].split(":")[0] + assert os.path.exists(DATA_DIR) +except: + DATA_DIR = os.path.join(os.environ["HOME"],".local/share/") + +DATA_DIR = os.path.join(DATA_DIR,"maloja") +os.makedirs(DATA_DIR,exist_ok=True) diff --git a/lastfmconverter.py b/maloja/lastfmconverter.py similarity index 96% rename from lastfmconverter.py rename to maloja/lastfmconverter.py index 162234b..8f2959a 100644 --- a/lastfmconverter.py +++ b/maloja/lastfmconverter.py @@ -1,6 +1,6 @@ import sys, os, datetime, re, cleanup -from cleanup import * -from utilities import * +from .cleanup import * +from .utilities import * log = open(sys.argv[1]) diff --git a/malojatime.py b/maloja/malojatime.py similarity index 100% rename from malojatime.py rename to maloja/malojatime.py diff --git a/monkey.py b/maloja/monkey.py similarity index 100% rename from monkey.py rename to maloja/monkey.py diff --git a/server.py b/maloja/server.py similarity index 79% rename from server.py rename to maloja/server.py index 0c558c8..6e014d5 100755 --- a/server.py +++ b/maloja/server.py @@ -1,55 +1,66 @@ #!/usr/bin/env python +import os +from .info import DATA_DIR +os.chdir(DATA_DIR) + # server stuff from bottle import Bottle, route, get, post, error, run, template, static_file, request, response, FormsDict, redirect, template, HTTPResponse, BaseRequest import waitress # monkey patching -import monkey +from . import monkey # rest of the project -import database -import htmlmodules -import htmlgenerators -import malojatime -import utilities -from utilities import resolveImage -from urihandler import uri_to_internal, remove_identical -import urihandler -import info +from . import database +from . import htmlmodules +from . import htmlgenerators +from . import malojatime +from . import utilities +from .utilities import resolveImage +from .urihandler import uri_to_internal, remove_identical +from . import urihandler +from . import info # doreah toolkit from doreah import settings from doreah.logging import log from doreah.timing import Clock # technical -from importlib.machinery import SourceFileLoader +#from importlib.machinery import SourceFileLoader +import importlib import _thread import sys import signal import os import setproctitle +import pkg_resources # url handling import urllib + + + #settings.config(files=["settings/default.ini","settings/settings.ini"]) #settings.update("settings/default.ini","settings/settings.ini") MAIN_PORT = settings.get_settings("WEB_PORT") HOST = settings.get_settings("HOST") THREADS = 12 BaseRequest.MEMFILE_MAX = 15 * 1024 * 1024 +WEBFOLDER = pkg_resources.resource_filename(__name__,"website") webserver = Bottle() +pthjoin = os.path.join -import lesscpy -css = "" -for f in os.listdir("website/less"): - css += lesscpy.compile("website/less/" + f) +#import lesscpy +#css = "" +#for f in os.listdir(pthjoin(WEBFOLDER,"less")): +# css += lesscpy.compile(pthjoin(WEBFOLDER,"less",f)) -os.makedirs("website/css",exist_ok=True) -with open("website/css/style.css","w") as f: - f.write(css) +#os.makedirs("website/css",exist_ok=True) +#with open("website/css/style.css","w") as f: +# f.write(css) @webserver.route("") @@ -69,16 +80,16 @@ def customerror(error): code = int(str(error).split(",")[0][1:]) log("HTTP Error: " + str(code),module="error") - if os.path.exists("website/errors/" + str(code) + ".html"): - return static_file("website/errors/" + str(code) + ".html",root="") + if os.path.exists(pthjoin(WEBFOLDER,"errors",str(code) + ".html")): + return static_file(pthjoin(WEBFOLDER,"errors",str(code) + ".html"),root="") else: - with open("website/errors/generic.html") as htmlfile: + with open(pthjoin(WEBFOLDER,"errors/generic.html")) as htmlfile: html = htmlfile.read() # apply global substitutions - with open("website/common/footer.html") as footerfile: + with open(pthjoin(WEBFOLDER,"common/footer.html")) as footerfile: footerhtml = footerfile.read() - with open("website/common/header.html") as headerfile: + with open(pthjoin(WEBFOLDER,"common/header.html")) as headerfile: headerhtml = headerfile.read() html = html.replace("",footerhtml + "").replace("",headerhtml + "") @@ -143,17 +154,18 @@ def static_image(pth): @webserver.route("/") @webserver.route("/") def static(name): - response = static_file("website/" + name,root="") + response = static_file(name,root=WEBFOLDER) response.set_header("Cache-Control", "public, max-age=3600") return response + @webserver.route("/") def static_html(name): linkheaders = ["; rel=preload; as=style"] keys = remove_identical(FormsDict.decode(request.query)) - pyhp_file = os.path.exists("website/" + name + ".pyhp") - html_file = os.path.exists("website/" + name + ".html") + pyhp_file = os.path.exists(pthjoin(WEBFOLDER,name + ".pyhp")) + html_file = os.path.exists(pthjoin(WEBFOLDER,name + ".html")) pyhp_pref = settings.get_settings("USE_PYHP") adminmode = request.cookies.get("adminmode") == "true" and database.checkAPIkey(request.cookies.get("apikey")) is not False @@ -183,29 +195,30 @@ def static_html(name): environ["filterkeys"], environ["limitkeys"], environ["delimitkeys"], environ["amountkeys"] = uri_to_internal(keys) #response.set_header("Content-Type","application/xhtml+xml") - res = file("website/" + name + ".pyhp",environ) + res = file(pthjoin(WEBFOLDER,name + ".pyhp"),environ) log("Generated page " + name + " in " + str(clock.stop()) + "s (PYHP)",module="debug") return res # if not, use the old way else: - with open("website/" + name + ".html") as htmlfile: + with open(pthjoin(WEBFOLDER,name + ".html")) as htmlfile: html = htmlfile.read() # apply global substitutions - with open("website/common/footer.html") as footerfile: + with open(pthjoin(WEBFOLDER,"common/footer.html")) as footerfile: footerhtml = footerfile.read() - with open("website/common/header.html") as headerfile: + with open(pthjoin(WEBFOLDER,"common/header.html")) as headerfile: headerhtml = headerfile.read() html = html.replace("",footerhtml + "").replace("",headerhtml + "") # If a python file exists, it provides the replacement dict for the html file - if os.path.exists("website/" + name + ".py"): + if os.path.exists(pthjoin(WEBFOLDER,name + ".py")): #txt_keys = SourceFileLoader(name,"website/" + name + ".py").load_module().replacedict(keys,DATABASE_PORT) try: - txt_keys,resources = SourceFileLoader(name,"website/" + name + ".py").load_module().instructions(keys) + module = importlib.import_module(".website." + name,package="maloja") + txt_keys,resources = module.instructions(keys) except Exception as e: log("Error in website generation: " + str(sys.exc_info()),module="error") raise diff --git a/supervisor.py b/maloja/supervisor.py similarity index 81% rename from supervisor.py rename to maloja/supervisor.py index 824c2a2..edf9291 100644 --- a/supervisor.py +++ b/maloja/supervisor.py @@ -20,6 +20,6 @@ while True: except: log("Maloja is not running, restarting...",module="supervisor") try: - p = subprocess.Popen(["python3","server.py"],stdout=subprocess.DEVNULL,stderr=subprocess.DEVNULL) + p = subprocess.Popen(["python3","-m","maloja.server"],stdout=subprocess.DEVNULL,stderr=subprocess.DEVNULL) except e: log("Error starting Maloja: " + str(e),module="supervisor") diff --git a/urihandler.py b/maloja/urihandler.py similarity index 98% rename from urihandler.py rename to maloja/urihandler.py index 9ed7943..9a569c1 100644 --- a/urihandler.py +++ b/maloja/urihandler.py @@ -1,6 +1,6 @@ import urllib from bottle import FormsDict -from malojatime import time_fix, time_str, get_range_object +from .malojatime import time_fix, time_str, get_range_object import math # necessary because urllib.parse.urlencode doesnt handle multidicts diff --git a/utilities.py b/maloja/utilities.py similarity index 97% rename from utilities.py rename to maloja/utilities.py index d3850ef..f61ec25 100644 --- a/utilities.py +++ b/maloja/utilities.py @@ -14,7 +14,7 @@ from doreah import caching from doreah.logging import log from doreah.regular import yearly, daily -from external import api_request_track, api_request_artist +from .external import api_request_track, api_request_artist @@ -469,7 +469,7 @@ def set_image(b64,**keys): def update_medals(): - from database import MEDALS, MEDALS_TRACKS, STAMPS, get_charts_artists, get_charts_tracks + from .database import MEDALS, MEDALS_TRACKS, STAMPS, get_charts_artists, get_charts_tracks currentyear = datetime.datetime.utcnow().year try: @@ -505,8 +505,8 @@ def update_medals(): @daily def update_weekly(): - from database import WEEKLY_TOPTRACKS, WEEKLY_TOPARTISTS, get_charts_artists, get_charts_tracks - from malojatime import ranges, thisweek + from .database import WEEKLY_TOPTRACKS, WEEKLY_TOPARTISTS, get_charts_artists, get_charts_tracks + from .malojatime import ranges, thisweek WEEKLY_TOPARTISTS.clear() diff --git a/website/admin.pyhp b/maloja/website/admin.pyhp similarity index 100% rename from website/admin.pyhp rename to maloja/website/admin.pyhp diff --git a/website/artist.html b/maloja/website/artist.html similarity index 100% rename from website/artist.html rename to maloja/website/artist.html diff --git a/website/artist.py b/maloja/website/artist.py similarity index 92% rename from website/artist.py rename to maloja/website/artist.py index bf3f2fa..f75c884 100644 --- a/website/artist.py +++ b/maloja/website/artist.py @@ -1,13 +1,13 @@ import urllib -import database -from malojatime import today,thisweek,thismonth,thisyear +from .. import database +from ..malojatime import today,thisweek,thismonth,thisyear def instructions(keys): - from utilities import getArtistImage - from htmlgenerators import artistLink, artistLinks, link_address - from urihandler import compose_querystring, uri_to_internal - from htmlmodules import module_pulse, module_performance, module_trackcharts, module_scrobblelist + from ..utilities import getArtistImage + from ..htmlgenerators import artistLink, artistLinks, link_address + from ..urihandler import compose_querystring, uri_to_internal + from ..htmlmodules import module_pulse, module_performance, module_trackcharts, module_scrobblelist filterkeys, _, _, _ = uri_to_internal(keys,forceArtist=True) artist = filterkeys.get("artist") diff --git a/website/artist.pyhp b/maloja/website/artist.pyhp similarity index 100% rename from website/artist.pyhp rename to maloja/website/artist.pyhp diff --git a/website/charts_artists.html b/maloja/website/charts_artists.html similarity index 100% rename from website/charts_artists.html rename to maloja/website/charts_artists.html diff --git a/website/charts_artists.py b/maloja/website/charts_artists.py similarity index 79% rename from website/charts_artists.py rename to maloja/website/charts_artists.py index b5c951c..04cc582 100644 --- a/website/charts_artists.py +++ b/maloja/website/charts_artists.py @@ -2,10 +2,10 @@ import urllib def instructions(keys): - from utilities import getArtistImage - from urihandler import compose_querystring, uri_to_internal - from htmlmodules import module_artistcharts, module_filterselection, module_artistcharts_tiles - from malojatime import range_desc + from ..utilities import getArtistImage + from ..urihandler import compose_querystring, uri_to_internal + from ..htmlmodules import module_artistcharts, module_filterselection, module_artistcharts_tiles + from ..malojatime import range_desc from doreah.settings import get_settings diff --git a/website/charts_tracks.html b/maloja/website/charts_tracks.html similarity index 100% rename from website/charts_tracks.html rename to maloja/website/charts_tracks.html diff --git a/website/charts_tracks.py b/maloja/website/charts_tracks.py similarity index 81% rename from website/charts_tracks.py rename to maloja/website/charts_tracks.py index 843d0ff..0bfe9a4 100644 --- a/website/charts_tracks.py +++ b/maloja/website/charts_tracks.py @@ -2,11 +2,11 @@ import urllib def instructions(keys): - from utilities import getArtistImage, getTrackImage - from htmlgenerators import artistLink - from urihandler import compose_querystring, uri_to_internal - from htmlmodules import module_trackcharts, module_filterselection, module_trackcharts_tiles - from malojatime import range_desc + from ..utilities import getArtistImage, getTrackImage + from ..htmlgenerators import artistLink + from ..urihandler import compose_querystring, uri_to_internal + from ..htmlmodules import module_trackcharts, module_filterselection, module_trackcharts_tiles + from ..malojatime import range_desc from doreah.settings import get_settings filterkeys, timekeys, _, amountkeys = uri_to_internal(keys) diff --git a/website/common/footer.html b/maloja/website/common/footer.html similarity index 100% rename from website/common/footer.html rename to maloja/website/common/footer.html diff --git a/website/common/header.html b/maloja/website/common/header.html similarity index 100% rename from website/common/header.html rename to maloja/website/common/header.html diff --git a/website/compare.html b/maloja/website/compare.html similarity index 100% rename from website/compare.html rename to maloja/website/compare.html diff --git a/website/compare.py b/maloja/website/compare.py similarity index 96% rename from website/compare.py rename to maloja/website/compare.py index febbe64..5edd54c 100644 --- a/website/compare.py +++ b/maloja/website/compare.py @@ -1,8 +1,8 @@ import urllib -import database +from .. import database import json -from htmlgenerators import artistLink -from utilities import getArtistImage +from ..htmlgenerators import artistLink +from ..utilities import getArtistImage def instructions(keys): diff --git a/maloja/website/css/style.css b/maloja/website/css/style.css new file mode 100644 index 0000000..576b7a1 --- /dev/null +++ b/maloja/website/css/style.css @@ -0,0 +1,671 @@ +@font-face { + font-family: 'Ubuntu'; + font-style: normal; + font-weight: 400; + src: local('Ubuntu Regular'), local('Ubuntu-Regular'), url(https://fonts.gstatic.com/s/ubuntu/v14/4iCs6KVjbNBYlgoKcg72j00.woff2) format('woff2'); +} +@font-face { + font-family: 'Ubuntu'; + font-style: normal; + font-weight: 400; + src: local('Ubuntu Regular'), local('Ubuntu-Regular'), url(https://fonts.gstatic.com/s/ubuntu/v14/4iCs6KVjbNBYlgoKew72j00.woff2) format('woff2'); + unicode-range: U + 0400 -045F, U + 0490 -0491, U + 04 B0-04B1, U + 2116; +} +@font-face { + font-family: 'Ubuntu'; + font-style: normal; + font-weight: 400; + src: local('Ubuntu Regular'), local('Ubuntu-Regular'), url(https://fonts.gstatic.com/s/ubuntu/v14/4iCs6KVjbNBYlgoKcw72j00.woff2) format('woff2'); + unicode-range: U + 1 F00-1FFF; +} +@font-face { + font-family: 'Ubuntu'; + font-style: normal; + font-weight: 400; + src: local('Ubuntu Regular'), local('Ubuntu-Regular'), url(https://fonts.gstatic.com/s/ubuntu/v14/4iCs6KVjbNBYlgoKfA72j00.woff2) format('woff2'); + unicode-range: U + 0370 -03FF; +} +@font-face { + font-family: 'Ubuntu'; + font-style: normal; + font-weight: 400; + src: local('Ubuntu Regular'), local('Ubuntu-Regular'), url(https://fonts.gstatic.com/s/ubuntu/v14/4iCs6KVjbNBYlgoKcQ72j00.woff2) format('woff2'); +} +@font-face { + font-family: 'Ubuntu'; + font-style: normal; + font-weight: 400; + src: local('Ubuntu Regular'), local('Ubuntu-Regular'), url(https://fonts.gstatic.com/s/ubuntu/v14/4iCs6KVjbNBYlgoKfw72.woff2) format('woff2'); +}body { + background-color: #333337; + color: beige; + font-family: "Ubuntu"; +} +table.top_info td.image div { + margin-right: 20px; + margin-bottom: 20px; + background-size: cover; + background-position: center; + height: 174px; + width: 174px; +} +table.top_info td.text { + vertical-align: top; +} +table.top_info td.text h1 { + display: inline; + padding-right: 5px; +} +table.top_info td.text table.image_row td { + height: 50px; + width: 50px; + background-size: cover; + background-position: center; + background-repeat: no-repeat; + opacity: 0.5; + filter: grayscale(80%); +} +table.top_info td.text table.image_row td:hover { + opacity: 1; + filter: grayscale(0%); +} +::-webkit-scrollbar { + width: 8px; + cursor: pointer; +} +::-webkit-scrollbar-track { + background: grey; + background-color: rgba(0,255,255,0.1); +} +::-webkit-scrollbar-thumb { + background-color: rgba(103,85,0,0.7); +} +::-webkit-scrollbar-thumb:hover { + background: gold; +} +[onclick]:hover, +a:hover { + cursor: pointer; +} +div.grisons_bar { + background-color: rgba(0,255,255,0.1); +} +div.grisons_bar > div { + height: 100%; + background-color: rgba(103,85,0,0.7); +} +div.grisons_bar:hover > div { + background-color: gold; +} +a { + color: inherit; + text-decoration: none; +} +a.textlink { + color: yellow; +} +a.hidelink:hover { + text-decoration: none; +} +a:hover { + text-decoration: underline; +} +body { + padding: 15px; + padding-bottom: 35px; +} +input[type="date"] { + background-color: inherit; + color: inherit; + outline: none; + border: 0px; + font-family: inherit; + font-size: inherit; +} +div#settingsicon { + position: fixed; + right: 30px; + top: 30px; + fill: beige; +} +div#settingsicon:hover { + fill: yellow; +} +div.footer { + position: fixed; + height: 20px; + background-color: #0a0a0a; + bottom: 0px; + left: 0px; + right: 0px; + padding: 10px; + opacity: 1; +} +div.footer div:nth-child(1) { + display: inline-block; + width: 40%; + text-align: left; +} +div.footer div:nth-child(2) { + display: inline-block; + width: 19%; + text-align: center; + color: gold; + font-size: 110%; +} +div.footer div:nth-child(3) { + display: inline-block; + width: 40%; + text-align: right; +} +div.footer span a { + padding-left: 20px; + background-repeat: no-repeat; + background-size: contain; + background-position: left; + background-image: url("https://github.com/favicon.ico"); +} +div.footer input { + background-color: inherit; + border: 0px; + border-bottom: 1px solid beige; + color: beige; + font-size: 90%; + width: 70%; + padding-left: 5px; + padding-right: 5px; + padding-top: 2px; + padding-bottom: 2px; + font-family: "Ubuntu"; +} +div.footer input:focus { + outline: none; +} +div.searchresults { + position: fixed; + bottom: 50px; + right: 20px; + width: 500px; + background-color: rgba(10,10,10,0.99); + padding: 15px; +} +div.searchresults > span { + font-size: 20px; + font-weight: bold; +} +div.searchresults table { + width: 100%; + border-spacing: 0px 4px; +} +div.searchresults tr { + background-color: #05050501; + margin-top: 5px; + margin-bottom: 5px; + height: 50px; + cursor: pointer; +} +div.searchresults tr:hover { + background-color: #23232301; +} +div.searchresults tr td.image { + height: 50px; + width: 50px; + background-size: cover; + background-position: center; +} +div.searchresults tr td:nth-child(2) { + padding-left: 10px; +} +div.searchresults table.searchresults_tracks td span:nth-child(1) { + font-size: 12px; + color: grey; +} +@media (max-width:1000px) { + div.footer { + position: fixed; + background-color: #0a0a0a; + bottom: 0px; + left: 0px; + right: 0px; + padding: 3px; + opacity: 1; + } + div.footer div:nth-child(1) { + display: none; + } + div.footer div:nth-child(2) { + display: inline-block; + width: 20%; + text-align: center; + color: gold; + } + div.footer div:nth-child(3) { + display: inline-block; + width: 70%; + text-align: right; + } + div.footer input { + width: 90%; + } +} +p.desc a { + padding-left: 20px; + background-repeat: no-repeat; + background-size: contain; + background-position: left; + background-image: url("https://www.last.fm/static/images/lastfm_avatar_twitter.66cd2c48ce03.png"); +} +table.top_info + .stat_module_topartists table, +table.top_info + .stat_module_toptracks table { + margin: 15px 0; +} +.paginate { + text-align: center; + padding: 30px; +} +.stats { + color: grey; +} +.rank { + text-align: right; + color: grey; +} +.extra { + color: grey; + font-size: 80%; +} +input#apikey { + font-family: 'Ubuntu'; + outline: none; + border: 0px solid; + padding: 2px; +} +input.simpleinput { + font-family: 'Ubuntu'; + color: beige; + outline: none; + border-top: 0px solid; + border-left: 0px solid; + border-right: 0px solid; + padding: 2px; + background-color: inherit; + border-bottom: 1px solid beige; +} +a { + cursor: pointer; +} +span.stat_selector_pulse, +span.stat_selector_topartists, +span.stat_selector_toptracks { + cursor: pointer; +} +.medal { + top: 5px; + font-size: 80%; + padding: 3px; + margin: 2px; + border-radius: 2px; +} +.shiny { + overflow: hidden; + position: relative; + display: inline-block; +} +.shiny:after { + content: ""; + position: absolute; + top: -110%; + left: -210%; + width: 200%; + height: 200%; + opacity: 0; + transform: rotate(30deg); + background: rgba(255,255,255,0.13); + background: linear-gradient(to right,rgba(255,255,255,0.13)0%,rgba(255,255,255,0.13)77%,rgba(255,255,255,0.5)92%,rgba(255,255,255,0.0)100% ); +} +.shiny:hover:after { + opacity: 1; + top: -30%; + left: -30%; + transition-property: left, top, opacity; + transition-duration: 0.7s, 0.7s, 0.15s; + transition-timing-function: ease; +} +.shiny:active:after { + opacity: 0; +} +a.gold { + background-color: gold; + color: black; +} +a.silver { + background-color: silver; + color: black; +} +a.bronze { + background-color: #cd7f32; + color: black; +} +img.certrecord { + height: 30px; + vertical-align: text-bottom; +} +img.certrecord_small { + height: 20px; + vertical-align: text-bottom; +} +img.star { + height: 20px; + vertical-align: text-bottom; +} +.button { + padding: 3px; + padding-right: 6px; + padding-left: 6px; + background-color: beige; + color: #333337; + cursor: pointer; +} +.button:hover { + background-color: yellow; + color: #333337; +} +.button.locked { + background-color: grey; + color: black; + cursor: not-allowed; +} +table.twopart { + width: 100%; +} +table.twopart > tbody > tr > td { + width: 50%; +} +table.list { + border-collapse: collapse; +} +table.list tr td { + border-bottom: 2px solid; + border-color: rgba(0,0,0,0); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + padding-right: 15px; +} +table.list tr:nth-child(even) { + background-color: #37373b; +} +table.list tr:nth-child(5n) td { + border-color: rgba(120,120,120,0.2); +} +table.list tr:hover { + background-color: #404044; +} +table.list td.time { + width: 11%; + color: grey; +} +table.list tr td.rank { + padding-right: 4px; +} +table.list tr td.rankup { + color: green; + padding-right: 8px; + font-size: 80%; +} +table.list tr td.rankdown { + color: red; + padding-right: 8px; + font-size: 80%; +} +table.list tr td.ranksame { + color: grey; + padding-right: 8px; + font-size: 80%; +} +table.list tr td.icon { + padding: 0px; + padding-right: 5px; + width: 20px; +} +table.list td.icon div { + width: 20px; + height: 20px; + background-size: cover; + background-position: center; +} +table.list td.artists, +td.artist, +td.title, +td.track { + min-width: 100px; +} +table.list td.track span.artist_in_trackcolumn { + color: #bbbbbb; +} +table.list td.track a.trackProviderSearch { + margin-right: 5px; + padding: 0 10px; +} +table.list td.amount { + width: 50px; + text-align: right; +} +table.list td.bar { + width: 500px; + background-color: #333337; +} +table.list td.bar div { + background-color: beige; + height: 20px; + position: relative; +} +table.list tr:hover td.bar div { + background-color: yellow; + cursor: pointer; +} +table.list td.chart { + width: 500px; + background-color: #333337; +} +table.list td.chart div { + height: 20px; + background-color: rgba(0,0,0,0.1); + border-radius: 0px 30px 30px 0px; + background-image: url("/media/chartpos_normal.png"); + background-position: right; + background-repeat: no-repeat; + background-size: auto 100%; + position: relative; +} +table.list tr:hover td.chart div { + cursor: pointer; +} +table.list tr td.chart div.gold { + background-image: url("/media/chartpos_gold.png"); +} +table.list tr td.chart div.silver { + background-image: url("/media/chartpos_silver.png"); +} +table.list tr td.chart div.bronze { + background-image: url("/media/chartpos_bronze.png"); +} +table.list tr td.button { + width: 200px; + cursor: pointer; + border-color: rgba(0,0,0,0) !important; +} +table.list td.button div { + background-color: beige; + color: #333337; + padding: 3px; + border-radius: 4px; +} +table.list td.button div:hover { + background-color: yellow; + color: #333337; + padding: 3px; + border-radius: 4px; +} +td.button.important div { + background-color: red; + color: white; +} +table.misc { + margin-left: 20px; +} +table.misc td { + padding-right: 20px; + color: #bbbbaa; +} +table.misc th { + text-align: left; +} +table.misc td.interaction { + width: 65px; +} +table.tiles_top td { + padding: 0px; + border: 0px; +} +table.tiles_top:hover td td { + opacity: 0.5; + filter: grayscale(80%); +} +table.tiles_top:hover td td:hover { + opacity: 1; + filter: grayscale(0%); +} +table.tiles_top, +table.tiles_sub { + border-collapse: collapse; +} +table.tiles_top > tbody > tr > td { + height: 300px; + width: 300px; +} +table.tiles_sub { + height: 100%; + width: 100%; +} +table.tiles_top td { + background-size: cover; + background-position: center; + vertical-align: bottom; +} +table.tiles_top td span { + background-color: rgba(0,0,0,0.7); +} +table.tiles_1x1 td { + height: 100%; + width: 100%; + font-size: 100%; +} +table.tiles_2x2 td { + height: 50%; + width: 50%; + font-size: 90%; +} +table.tiles_3x3 td { + height: 33.333%; + width: 33.333%; + font-size: 70%; +} +span.stat_module_pulse, +span.stat_module_topartists, +span.stat_module_toptracks { + display: inline-block; + vertical-align: top; +} +@media (min-width:1600px) { + div.sidelist { + position: absolute; + right: 0px; + top: 0px; + width: 40%; + height: 100%; + background-color: #444447; + padding-left: 30px; + padding-right: 30px; + } +} +div.sidelist table { + width: 100%; + table-layout: fixed; +} +div.sidelist table.list td.time { + width: 17%; +}body { + background-color: #333337; + color: beige; + font-family: "Ubuntu"; +} +table.top_info td.image div { + margin-right: 20px; + margin-bottom: 20px; + background-size: cover; + background-position: center; + height: 174px; + width: 174px; +} +table.top_info td.text { + vertical-align: top; +} +table.top_info td.text h1 { + display: inline; + padding-right: 5px; +} +table.top_info td.text table.image_row td { + height: 50px; + width: 50px; + background-size: cover; + background-position: center; + background-repeat: no-repeat; + opacity: 0.5; + filter: grayscale(80%); +} +table.top_info td.text table.image_row td:hover { + opacity: 1; + filter: grayscale(0%); +} +::-webkit-scrollbar { + width: 8px; + cursor: pointer; +} +::-webkit-scrollbar-track { + background: grey; + background-color: rgba(0,255,255,0.1); +} +::-webkit-scrollbar-thumb { + background-color: rgba(103,85,0,0.7); +} +::-webkit-scrollbar-thumb:hover { + background: gold; +} +[onclick]:hover, +a:hover { + cursor: pointer; +} +div.grisons_bar { + background-color: rgba(0,255,255,0.1); +} +div.grisons_bar > div { + height: 100%; + background-color: rgba(103,85,0,0.7); +} +div.grisons_bar:hover > div { + background-color: gold; +} +a { + color: inherit; + text-decoration: none; +} +a.textlink { + color: yellow; +} +a.hidelink:hover { + text-decoration: none; +} +a:hover { + text-decoration: underline; +} \ No newline at end of file diff --git a/website/errors/generic.html b/maloja/website/errors/generic.html similarity index 100% rename from website/errors/generic.html rename to maloja/website/errors/generic.html diff --git a/website/favicon.ico b/maloja/website/favicon.ico similarity index 100% rename from website/favicon.ico rename to maloja/website/favicon.ico diff --git a/website/favicon.png b/maloja/website/favicon.png similarity index 100% rename from website/favicon.png rename to maloja/website/favicon.png diff --git a/website/issues.html b/maloja/website/issues.html similarity index 100% rename from website/issues.html rename to maloja/website/issues.html diff --git a/website/issues.py b/maloja/website/issues.py similarity index 96% rename from website/issues.py rename to maloja/website/issues.py index d389ad0..eac9cdc 100644 --- a/website/issues.py +++ b/maloja/website/issues.py @@ -1,6 +1,6 @@ import urllib -import database -from htmlgenerators import artistLink +from .. import database +from ..htmlgenerators import artistLink def instructions(keys): diff --git a/website/javascript/cookies.js b/maloja/website/javascript/cookies.js similarity index 100% rename from website/javascript/cookies.js rename to maloja/website/javascript/cookies.js diff --git a/website/javascript/datechange.js b/maloja/website/javascript/datechange.js similarity index 100% rename from website/javascript/datechange.js rename to maloja/website/javascript/datechange.js diff --git a/website/javascript/neopolitan.js b/maloja/website/javascript/neopolitan.js similarity index 83% rename from website/javascript/neopolitan.js rename to maloja/website/javascript/neopolitan.js index 5590597..5293bc7 100644 --- a/website/javascript/neopolitan.js +++ b/maloja/website/javascript/neopolitan.js @@ -15,7 +15,8 @@ else{for(var key in data){body+=encodeURIComponent(key)+"="+encodeURIComponent(d xhttp.send(body);console.log("Sent XHTTP request to",url)} function xhttprequest(url,data={},method="GET",json=true){var p=new Promise(resolve=>xhttpreq(url,data,method,resolve,json));return p;} function now(){return Math.floor(Date.now()/1000);} -return{getCookie:getCookie,setCookie:setCookie,getCookies:getCookies,saveCookies:saveCookies,xhttpreq:xhttpreq,xhttprequest:xhttprequest,now:now}}();document.addEventListener('DOMContentLoaded',function(){var elements=document.getElementsByClassName("seekable");for(var i=0;i Date: Mon, 25 Nov 2019 02:32:59 +0100 Subject: [PATCH 02/60] Some refining --- .gitignore | 1 + README.md | 24 +++++++----------------- alpine_install.sh | 3 +++ maloja/__init__.py | 2 +- maloja/controller.py | 36 ++++++++++++++++++++++-------------- maloja/info.py | 2 +- packages/maloja.deb | Bin 348672 -> 0 bytes 7 files changed, 35 insertions(+), 33 deletions(-) create mode 100644 alpine_install.sh delete mode 100644 packages/maloja.deb diff --git a/.gitignore b/.gitignore index fe27dbb..2d52f99 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ # generic temporary / dev files *.pyc *.sh +!/alpine_install.sh *.note *.xcf nohup.out diff --git a/README.md b/README.md index a6f0a41..571cc60 100644 --- a/README.md +++ b/README.md @@ -17,30 +17,21 @@ Also neat: You can use your **custom artist or track images**. ## Requirements * Python 3 -* Pip packages specified in `requirements.txt` +* Several Pip packages (automatically downloaded) * If you'd like to display images, you will need API keys for [Last.fm](https://www.last.fm/api/account/create) and [Fanart.tv](https://fanart.tv/get-an-api-key/). These are free of charge! ## How to install -1) Either install Maloja with the [debian package](https://github.com/krateng/maloja/raw/master/packages/maloja.deb), or download the repository to some arbitrary location. If you pick the manual installation, every command needs to be executed from the Maloja directory and led with `./`. You can also only download the file `maloja` instead of the whole repository and fetch the rest with +1) Download Maloja with the command `pip install maloja`. Make sure to use the correct python version (Use `pip3` if necessary). I've provided a simple .sh file to get Maloja going on an Alpine server (e.g. in Proxmox). - ./maloja install - -2) Install required packages with - - pip3 install -r requirements.txt - -3) Start the server with +2) Start the server with maloja start -4) (Recommended) Put your server behind a reverse proxy for SSL encryption. +3) (Recommended) Put your server behind a reverse proxy for SSL encryption. ## How to use -If you didn't install Maloja from the package (and therefore don't have it in `/opt/maloja`), every command needs to be executed from the Maloja directory and led with `./`. Otherwise, all commands work in any location and without the prefix. - - 1) If you would like to import all your previous last.fm scrobbles, use [benfoxall's website](https://benjaminbenben.com/lastfm-to-csv/) ([GitHub page](https://github.com/benfoxall/lastfm-to-csv)). Use the command maloja import *filename* @@ -52,13 +43,12 @@ If you didn't install Maloja from the package (and therefore don't have it in `/ maloja stop maloja restart maloja start - maloja update - The `update` command will always fetch the latest version, while packages are only offered for release versions. +3) Update Maloja with `pip install maloja --upgrade --no-cache-dir` -3) Various folders have `.info` files with more information on how to use their associated features. +4) Various folders have `.info` files with more information on how to use their associated features. -4) If you'd like to implement anything on top of Maloja, visit `/api_explorer`. +5) If you'd like to implement anything on top of Maloja, visit `/api_explorer`. ## How to scrobble diff --git a/alpine_install.sh b/alpine_install.sh new file mode 100644 index 0000000..6fc34cf --- /dev/null +++ b/alpine_install.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash +apk add python3 python3-dev gcc libxml2-dev libxslt-dev py3-pip libc-dev +pip3 install maloja diff --git a/maloja/__init__.py b/maloja/__init__.py index 69868b0..505f5ba 100644 --- a/maloja/__init__.py +++ b/maloja/__init__.py @@ -5,7 +5,7 @@ from .info import author,version,versionstr requires = [ "bottle>=0.12.16", "waitress>=1.3", - "doreah>=1.2.7", + "doreah>=1.2.9", "nimrodel>=0.4.9", "setproctitle>=1.1.10", "wand>=0.5.4", diff --git a/maloja/controller.py b/maloja/controller.py index ba03c78..ad4bcc2 100755 --- a/maloja/controller.py +++ b/maloja/controller.py @@ -22,6 +22,7 @@ def yellow(txt): return "\033[93m" + txt + "\033[0m" +origpath = os.getcwd() os.chdir(DATA_DIR) def copy_initial_local_files(): @@ -131,11 +132,10 @@ def stop(): return True -def loadlastfm(): +def loadlastfm(filename): try: - filename = sys.argv[2] - filename = os.path.abspath(filename) + filename = os.path.join(origpath,filename) except: print("Please specify a file!") return @@ -147,19 +147,27 @@ def loadlastfm(): else: return print("Please wait...") - os.system("python3 ./lastfmconverter.py " + filename + " ./scrobbles/lastfmimport.tsv") + os.system("python3 -m maloja.lastfmconverter " + filename + " ./scrobbles/lastfmimport.tsv") print("Successfully imported your Last.FM scrobbles!") +def direct(): + from . import server +from doreah.control import mainfunction -def main(): - if sys.argv[1] == "start": restart() - elif sys.argv[1] == "restart": restart() - elif sys.argv[1] == "stop": stop() - #elif sys.argv[1] == "update": update() - elif sys.argv[1] == "import": loadlastfm() - #elif sys.argv[1] == "install": installhere() - else: print("Valid commands: start restart stop import") +@mainfunction({},shield=True) +def main(action,*args,**kwargs): + actions = { + "start":restart, + "restart":restart, + "stop":stop, + "import":loadlastfm, + "debug":direct + } + if action in actions: actions[action](*args,**kwargs) + else: print("Valid commands: " + " ".join(a for a in actions)) + + return True -if __name__ == "__main__": - main() +#if __name__ == "__main__": +# main() diff --git a/maloja/info.py b/maloja/info.py index 55c2894..6fc7dac 100644 --- a/maloja/info.py +++ b/maloja/info.py @@ -5,7 +5,7 @@ author = { "email":"maloja@krateng.dev", "github": "krateng" } -version = 2,0,0 +version = 2,0,1 versionstr = ".".join(str(n) for n in version) diff --git a/packages/maloja.deb b/packages/maloja.deb deleted file mode 100644 index efd5cea7ee1cf43ed6a109f58d47177a31b95438..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 348672 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%0AKL`5o?p#2N2@bkTH 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 z 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 I000D8S|0JZXaE2J From f942979e21222b4538608efb680656f84477cf86 Mon Sep 17 00:00:00 2001 From: Krateng Date: Tue, 26 Nov 2019 23:08:08 +0100 Subject: [PATCH 03/60] Improved search performance --- maloja/__init__.py | 4 + maloja/controller.py | 5 +- maloja/info.py | 2 +- maloja/website/common/footer.html | 12 ++- maloja/website/css/style.css | 5 +- maloja/website/javascript/search.js | 116 ++++++++++++++++------------ maloja/website/less/grisons.less | 7 ++ setup.py | 3 +- 8 files changed, 100 insertions(+), 54 deletions(-) diff --git a/maloja/__init__.py b/maloja/__init__.py index 505f5ba..b255fe9 100644 --- a/maloja/__init__.py +++ b/maloja/__init__.py @@ -17,3 +17,7 @@ resources = [ "data_files/*/*", "data_files/.doreah" ] + +commands = { + "maloja":"controller:main" +} diff --git a/maloja/controller.py b/maloja/controller.py index ad4bcc2..f4ad4cf 100755 --- a/maloja/controller.py +++ b/maloja/controller.py @@ -9,6 +9,7 @@ from distutils import dir_util import stat import pathlib import pkg_resources +from doreah.control import mainfunction from .info import DATA_DIR @@ -153,7 +154,7 @@ def loadlastfm(filename): def direct(): from . import server -from doreah.control import mainfunction + @mainfunction({},shield=True) def main(action,*args,**kwargs): @@ -166,7 +167,7 @@ def main(action,*args,**kwargs): } if action in actions: actions[action](*args,**kwargs) else: print("Valid commands: " + " ".join(a for a in actions)) - + return True #if __name__ == "__main__": diff --git a/maloja/info.py b/maloja/info.py index 6fc7dac..b204cec 100644 --- a/maloja/info.py +++ b/maloja/info.py @@ -5,7 +5,7 @@ author = { "email":"maloja@krateng.dev", "github": "krateng" } -version = 2,0,1 +version = 2,0,2 versionstr = ".".join(str(n) for n in version) diff --git a/maloja/website/common/footer.html b/maloja/website/common/footer.html index 733f222..7de3865 100644 --- a/maloja/website/common/footer.html +++ b/maloja/website/common/footer.html @@ -9,7 +9,17 @@ - + +
+ Artists + +
+

+ Tracks + +
+
+
diff --git a/maloja/website/css/style.css b/maloja/website/css/style.css index 576b7a1..54eca3e 100644 --- a/maloja/website/css/style.css +++ b/maloja/website/css/style.css @@ -668,4 +668,7 @@ a.hidelink:hover { } a:hover { text-decoration: underline; -} \ No newline at end of file +} +.hide { + display:none; +} diff --git a/maloja/website/javascript/search.js b/maloja/website/javascript/search.js index e068313..9dd14e2 100644 --- a/maloja/website/javascript/search.js +++ b/maloja/website/javascript/search.js @@ -10,66 +10,86 @@ function search(searchfield) { xhttp.send(); } } + + +function html_to_fragment(html) { + var template = document.createElement("template"); + template.innerHTML = resulthtml; + return template.content; +} + + +const results_artists = document.getElementById("searchresults_artists"); +const results_tracks = document.getElementById("searchresults_tracks"); +const searchresultwrap = document.getElementById("resultwrap"); + +var resulthtml = ` + + + +
+ + + +` +const oneresult = html_to_fragment(resulthtml).firstElementChild; + + + + function searchresult() { if (this.readyState == 4 && this.status == 200 && document.getElementById("searchinput").value != "") { // checking if field is empty in case we get an old result coming in that would overwrite our cleared result window - result = JSON.parse(this.responseText); - artists = result["artists"].slice(0,5) - tracks = result["tracks"].slice(0,5) - html = `
- Artists - ` + var result = JSON.parse(this.responseText); + var artists = result["artists"].slice(0,5) + var tracks = result["tracks"].slice(0,5) - for (var i=0;i - - - ` - } + for (var i=0;i -

- Tracks -
- ` + name + `
-
` + var node = oneresult.cloneNode(true); + node.setAttribute("onclick","goto(" + link + ")"); + node.children[0].style.backgroundImage = "url('" + image + "')"; + node.children[1].children[0].innerHTML = name; - for (var i=0;i - - - ` + var node = oneresult.cloneNode(true); + node.setAttribute("onclick","goto(" + link + ")"); + node.children[0].style.backgroundImage = "url('" + image + "')"; + node.children[1].children[0].innerHTML = artists; + node.children[1].children[2].innerHTML = title; - } + results_tracks.appendChild(node); + } + searchresultwrap.classList.remove("hide") - html += `
- ` + artists + `
- ` + title + ` -
-
` - - - document.getElementById("resultwrap").innerHTML = html; } } - function clearresults() { - window.setTimeout(reallyclear,500) - } - function reallyclear() { - document.getElementById("resultwrap").innerHTML = ""; - } - - function goto(link) { - window.location = link +function clearresults() { + window.setTimeout(reallyclear,500) +} +function reallyclear() { + searchresultwrap.classList.add("hide") +} + +function goto(link) { + window.location = link } diff --git a/maloja/website/less/grisons.less b/maloja/website/less/grisons.less index fd2efc9..fd8e39a 100644 --- a/maloja/website/less/grisons.less +++ b/maloja/website/less/grisons.less @@ -132,3 +132,10 @@ div.grisons_bar:hover>div { a:hover { text-decoration:underline; } + + + + +.hide { + display:none; +} diff --git a/setup.py b/setup.py index 2dcde39..2272aa3 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,8 @@ setuptools.setup( include_package_data=True, entry_points = { "console_scripts":[ - "maloja = maloja.controller:main" + cmd + " = " + module.name + "." + module.commands[cmd] + for cmd in module.commands ] } ) From 2e4e206695b54fb32ea6caeb896474dd72a17ab2 Mon Sep 17 00:00:00 2001 From: Krateng Date: Fri, 29 Nov 2019 20:12:22 +0100 Subject: [PATCH 04/60] Removed symlink --- maloja/doreah | 1 - 1 file changed, 1 deletion(-) delete mode 120000 maloja/doreah diff --git a/maloja/doreah b/maloja/doreah deleted file mode 120000 index 2724e86..0000000 --- a/maloja/doreah +++ /dev/null @@ -1 +0,0 @@ -../../tools/doreah/doreah \ No newline at end of file From 20908dfbaae73cfeea65db7254a637a39a52f565 Mon Sep 17 00:00:00 2001 From: Krateng Date: Fri, 29 Nov 2019 21:36:27 +0100 Subject: [PATCH 05/60] Renaming --- maloja/__init__.py | 4 ++-- maloja/server.py | 12 ++++++------ maloja/{website => web}/admin.pyhp | 0 maloja/{website => web}/artist.html | 0 maloja/{website => web}/artist.py | 0 maloja/{website => web}/artist.pyhp | 0 maloja/{website => web}/charts_artists.html | 0 maloja/{website => web}/charts_artists.py | 0 maloja/{website => web}/charts_tracks.html | 0 maloja/{website => web}/charts_tracks.py | 0 maloja/{website => web}/common/footer.html | 0 maloja/{website => web}/common/header.html | 0 maloja/{website => web}/compare.html | 0 maloja/{website => web}/compare.py | 0 maloja/{website => web}/css/style.css | 0 maloja/{website => web}/errors/generic.html | 0 maloja/{website => web}/favicon.ico | Bin maloja/{website => web}/favicon.png | Bin maloja/{website => web}/issues.html | 0 maloja/{website => web}/issues.py | 0 maloja/{website => web}/javascript/cookies.js | 0 maloja/{website => web}/javascript/datechange.js | 0 maloja/{website => web}/javascript/neopolitan.js | 0 maloja/{website => web}/javascript/rangeselect.js | 0 maloja/{website => web}/javascript/search.js | 0 maloja/{website => web}/javascript/upload.js | 0 maloja/{website => web}/less/grisons.less | 0 maloja/{website => web}/less/grisonsfont.less | 0 maloja/{website => web}/less/maloja.less | 2 +- maloja/{website => web}/manual.html | 0 maloja/{website => web}/media/chartpos_bronze.png | Bin maloja/{website => web}/media/chartpos_gold.png | Bin maloja/{website => web}/media/chartpos_normal.png | Bin maloja/{website => web}/media/chartpos_silver.png | Bin maloja/{website => web}/media/record_diamond.png | Bin maloja/{website => web}/media/record_gold.png | Bin .../{website => web}/media/record_gold_original.png | Bin maloja/{website => web}/media/record_platinum.png | Bin maloja/{website => web}/media/star.png | Bin maloja/{website => web}/media/star_alt.png | Bin maloja/{website => web}/performance.html | 0 maloja/{website => web}/performance.py | 0 maloja/{website => web}/proxy.html | 0 maloja/{website => web}/proxy.py | 0 maloja/{website => web}/pulse.html | 0 maloja/{website => web}/pulse.py | 0 maloja/{website => web}/robots.txt | 0 maloja/{website => web}/scrobbles.html | 0 maloja/{website => web}/scrobbles.py | 0 maloja/{website => web}/setup.html | 0 maloja/{website => web}/setup.py | 0 maloja/{website => web}/start.html | 0 maloja/{website => web}/start.py | 0 maloja/{website => web}/top_artists.html | 0 maloja/{website => web}/top_artists.py | 0 maloja/{website => web}/top_tracks.html | 0 maloja/{website => web}/top_tracks.py | 0 maloja/{website => web}/track.html | 0 maloja/{website => web}/track.py | 0 maloja/{website => web}/track.pyhp | 0 maloja/{website => web}/wait.html | 0 61 files changed, 9 insertions(+), 9 deletions(-) rename maloja/{website => web}/admin.pyhp (100%) rename maloja/{website => web}/artist.html (100%) rename maloja/{website => web}/artist.py (100%) rename maloja/{website => web}/artist.pyhp (100%) rename maloja/{website => web}/charts_artists.html (100%) rename maloja/{website => web}/charts_artists.py (100%) rename maloja/{website => web}/charts_tracks.html (100%) rename maloja/{website => web}/charts_tracks.py (100%) rename maloja/{website => web}/common/footer.html (100%) rename maloja/{website => web}/common/header.html (100%) rename maloja/{website => web}/compare.html (100%) rename maloja/{website => web}/compare.py (100%) rename maloja/{website => web}/css/style.css (100%) rename maloja/{website => web}/errors/generic.html (100%) rename maloja/{website => web}/favicon.ico (100%) rename maloja/{website => web}/favicon.png (100%) rename maloja/{website => web}/issues.html (100%) rename maloja/{website => web}/issues.py (100%) rename maloja/{website => web}/javascript/cookies.js (100%) rename maloja/{website => web}/javascript/datechange.js (100%) rename maloja/{website => web}/javascript/neopolitan.js (100%) rename maloja/{website => web}/javascript/rangeselect.js (100%) rename maloja/{website => web}/javascript/search.js (100%) rename maloja/{website => web}/javascript/upload.js (100%) rename maloja/{website => web}/less/grisons.less (100%) rename maloja/{website => web}/less/grisonsfont.less (100%) rename maloja/{website => web}/less/maloja.less (99%) rename maloja/{website => web}/manual.html (100%) rename maloja/{website => web}/media/chartpos_bronze.png (100%) rename maloja/{website => web}/media/chartpos_gold.png (100%) rename maloja/{website => web}/media/chartpos_normal.png (100%) rename maloja/{website => web}/media/chartpos_silver.png (100%) rename maloja/{website => web}/media/record_diamond.png (100%) rename maloja/{website => web}/media/record_gold.png (100%) rename maloja/{website => web}/media/record_gold_original.png (100%) rename maloja/{website => web}/media/record_platinum.png (100%) rename maloja/{website => web}/media/star.png (100%) rename maloja/{website => web}/media/star_alt.png (100%) rename maloja/{website => web}/performance.html (100%) rename maloja/{website => web}/performance.py (100%) rename maloja/{website => web}/proxy.html (100%) rename maloja/{website => web}/proxy.py (100%) rename maloja/{website => web}/pulse.html (100%) rename maloja/{website => web}/pulse.py (100%) rename maloja/{website => web}/robots.txt (100%) rename maloja/{website => web}/scrobbles.html (100%) rename maloja/{website => web}/scrobbles.py (100%) rename maloja/{website => web}/setup.html (100%) rename maloja/{website => web}/setup.py (100%) rename maloja/{website => web}/start.html (100%) rename maloja/{website => web}/start.py (100%) rename maloja/{website => web}/top_artists.html (100%) rename maloja/{website => web}/top_artists.py (100%) rename maloja/{website => web}/top_tracks.html (100%) rename maloja/{website => web}/top_tracks.py (100%) rename maloja/{website => web}/track.html (100%) rename maloja/{website => web}/track.py (100%) rename maloja/{website => web}/track.pyhp (100%) rename maloja/{website => web}/wait.html (100%) diff --git a/maloja/__init__.py b/maloja/__init__.py index b255fe9..7940e5c 100644 --- a/maloja/__init__.py +++ b/maloja/__init__.py @@ -12,8 +12,8 @@ requires = [ "lesscpy>=0.13" ] resources = [ - "website/*/*", - "website/*", + "web/*/*", + "web/*", "data_files/*/*", "data_files/.doreah" ] diff --git a/maloja/server.py b/maloja/server.py index 6e014d5..9b4181f 100755 --- a/maloja/server.py +++ b/maloja/server.py @@ -46,7 +46,7 @@ MAIN_PORT = settings.get_settings("WEB_PORT") HOST = settings.get_settings("HOST") THREADS = 12 BaseRequest.MEMFILE_MAX = 15 * 1024 * 1024 -WEBFOLDER = pkg_resources.resource_filename(__name__,"website") +WEBFOLDER = pkg_resources.resource_filename(__name__,"web") webserver = Bottle() @@ -58,8 +58,8 @@ pthjoin = os.path.join #for f in os.listdir(pthjoin(WEBFOLDER,"less")): # css += lesscpy.compile(pthjoin(WEBFOLDER,"less",f)) -#os.makedirs("website/css",exist_ok=True) -#with open("website/css/style.css","w") as f: +#os.makedirs("web/css",exist_ok=True) +#with open("web/css/style.css","w") as f: # f.write(css) @@ -215,9 +215,9 @@ def static_html(name): # If a python file exists, it provides the replacement dict for the html file if os.path.exists(pthjoin(WEBFOLDER,name + ".py")): - #txt_keys = SourceFileLoader(name,"website/" + name + ".py").load_module().replacedict(keys,DATABASE_PORT) + #txt_keys = SourceFileLoader(name,"web/" + name + ".py").load_module().replacedict(keys,DATABASE_PORT) try: - module = importlib.import_module(".website." + name,package="maloja") + module = importlib.import_module(".web." + name,package="maloja") txt_keys,resources = module.instructions(keys) except Exception as e: log("Error in website generation: " + str(sys.exc_info()),module="error") @@ -242,7 +242,7 @@ def static_html(name): response.set_header("Link",",".join(linkheaders)) log("Generated page " + name + " in " + str(clock.stop()) + "s (Python+HTML)",module="debug") return html - #return static_file("website/" + name + ".html",root="") + #return static_file("web/" + name + ".html",root="") # Shortlinks diff --git a/maloja/website/admin.pyhp b/maloja/web/admin.pyhp similarity index 100% rename from maloja/website/admin.pyhp rename to maloja/web/admin.pyhp diff --git a/maloja/website/artist.html b/maloja/web/artist.html similarity index 100% rename from maloja/website/artist.html rename to maloja/web/artist.html diff --git a/maloja/website/artist.py b/maloja/web/artist.py similarity index 100% rename from maloja/website/artist.py rename to maloja/web/artist.py diff --git a/maloja/website/artist.pyhp b/maloja/web/artist.pyhp similarity index 100% rename from maloja/website/artist.pyhp rename to maloja/web/artist.pyhp diff --git a/maloja/website/charts_artists.html b/maloja/web/charts_artists.html similarity index 100% rename from maloja/website/charts_artists.html rename to maloja/web/charts_artists.html diff --git a/maloja/website/charts_artists.py b/maloja/web/charts_artists.py similarity index 100% rename from maloja/website/charts_artists.py rename to maloja/web/charts_artists.py diff --git a/maloja/website/charts_tracks.html b/maloja/web/charts_tracks.html similarity index 100% rename from maloja/website/charts_tracks.html rename to maloja/web/charts_tracks.html diff --git a/maloja/website/charts_tracks.py b/maloja/web/charts_tracks.py similarity index 100% rename from maloja/website/charts_tracks.py rename to maloja/web/charts_tracks.py diff --git a/maloja/website/common/footer.html b/maloja/web/common/footer.html similarity index 100% rename from maloja/website/common/footer.html rename to maloja/web/common/footer.html diff --git a/maloja/website/common/header.html b/maloja/web/common/header.html similarity index 100% rename from maloja/website/common/header.html rename to maloja/web/common/header.html diff --git a/maloja/website/compare.html b/maloja/web/compare.html similarity index 100% rename from maloja/website/compare.html rename to maloja/web/compare.html diff --git a/maloja/website/compare.py b/maloja/web/compare.py similarity index 100% rename from maloja/website/compare.py rename to maloja/web/compare.py diff --git a/maloja/website/css/style.css b/maloja/web/css/style.css similarity index 100% rename from maloja/website/css/style.css rename to maloja/web/css/style.css diff --git a/maloja/website/errors/generic.html b/maloja/web/errors/generic.html similarity index 100% rename from maloja/website/errors/generic.html rename to maloja/web/errors/generic.html diff --git a/maloja/website/favicon.ico b/maloja/web/favicon.ico similarity index 100% rename from maloja/website/favicon.ico rename to maloja/web/favicon.ico diff --git a/maloja/website/favicon.png b/maloja/web/favicon.png similarity index 100% rename from maloja/website/favicon.png rename to maloja/web/favicon.png diff --git a/maloja/website/issues.html b/maloja/web/issues.html similarity index 100% rename from maloja/website/issues.html rename to maloja/web/issues.html diff --git a/maloja/website/issues.py b/maloja/web/issues.py similarity index 100% rename from maloja/website/issues.py rename to maloja/web/issues.py diff --git a/maloja/website/javascript/cookies.js b/maloja/web/javascript/cookies.js similarity index 100% rename from maloja/website/javascript/cookies.js rename to maloja/web/javascript/cookies.js diff --git a/maloja/website/javascript/datechange.js b/maloja/web/javascript/datechange.js similarity index 100% rename from maloja/website/javascript/datechange.js rename to maloja/web/javascript/datechange.js diff --git a/maloja/website/javascript/neopolitan.js b/maloja/web/javascript/neopolitan.js similarity index 100% rename from maloja/website/javascript/neopolitan.js rename to maloja/web/javascript/neopolitan.js diff --git a/maloja/website/javascript/rangeselect.js b/maloja/web/javascript/rangeselect.js similarity index 100% rename from maloja/website/javascript/rangeselect.js rename to maloja/web/javascript/rangeselect.js diff --git a/maloja/website/javascript/search.js b/maloja/web/javascript/search.js similarity index 100% rename from maloja/website/javascript/search.js rename to maloja/web/javascript/search.js diff --git a/maloja/website/javascript/upload.js b/maloja/web/javascript/upload.js similarity index 100% rename from maloja/website/javascript/upload.js rename to maloja/web/javascript/upload.js diff --git a/maloja/website/less/grisons.less b/maloja/web/less/grisons.less similarity index 100% rename from maloja/website/less/grisons.less rename to maloja/web/less/grisons.less diff --git a/maloja/website/less/grisonsfont.less b/maloja/web/less/grisonsfont.less similarity index 100% rename from maloja/website/less/grisonsfont.less rename to maloja/web/less/grisonsfont.less diff --git a/maloja/website/less/maloja.less b/maloja/web/less/maloja.less similarity index 99% rename from maloja/website/less/maloja.less rename to maloja/web/less/maloja.less index 992c414..a4b8b19 100644 --- a/maloja/website/less/maloja.less +++ b/maloja/web/less/maloja.less @@ -1,4 +1,4 @@ -@import "website/less/grisons"; +@import "web/less/grisons"; body { padding:15px; diff --git a/maloja/website/manual.html b/maloja/web/manual.html similarity index 100% rename from maloja/website/manual.html rename to maloja/web/manual.html diff --git a/maloja/website/media/chartpos_bronze.png b/maloja/web/media/chartpos_bronze.png similarity index 100% rename from maloja/website/media/chartpos_bronze.png rename to maloja/web/media/chartpos_bronze.png diff --git a/maloja/website/media/chartpos_gold.png b/maloja/web/media/chartpos_gold.png similarity index 100% rename from maloja/website/media/chartpos_gold.png rename to maloja/web/media/chartpos_gold.png diff --git a/maloja/website/media/chartpos_normal.png b/maloja/web/media/chartpos_normal.png similarity index 100% rename from maloja/website/media/chartpos_normal.png rename to maloja/web/media/chartpos_normal.png diff --git a/maloja/website/media/chartpos_silver.png b/maloja/web/media/chartpos_silver.png similarity index 100% rename from maloja/website/media/chartpos_silver.png rename to maloja/web/media/chartpos_silver.png diff --git a/maloja/website/media/record_diamond.png b/maloja/web/media/record_diamond.png similarity index 100% rename from maloja/website/media/record_diamond.png rename to maloja/web/media/record_diamond.png diff --git a/maloja/website/media/record_gold.png b/maloja/web/media/record_gold.png similarity index 100% rename from maloja/website/media/record_gold.png rename to maloja/web/media/record_gold.png diff --git a/maloja/website/media/record_gold_original.png b/maloja/web/media/record_gold_original.png similarity index 100% rename from maloja/website/media/record_gold_original.png rename to maloja/web/media/record_gold_original.png diff --git a/maloja/website/media/record_platinum.png b/maloja/web/media/record_platinum.png similarity index 100% rename from maloja/website/media/record_platinum.png rename to maloja/web/media/record_platinum.png diff --git a/maloja/website/media/star.png b/maloja/web/media/star.png similarity index 100% rename from maloja/website/media/star.png rename to maloja/web/media/star.png diff --git a/maloja/website/media/star_alt.png b/maloja/web/media/star_alt.png similarity index 100% rename from maloja/website/media/star_alt.png rename to maloja/web/media/star_alt.png diff --git a/maloja/website/performance.html b/maloja/web/performance.html similarity index 100% rename from maloja/website/performance.html rename to maloja/web/performance.html diff --git a/maloja/website/performance.py b/maloja/web/performance.py similarity index 100% rename from maloja/website/performance.py rename to maloja/web/performance.py diff --git a/maloja/website/proxy.html b/maloja/web/proxy.html similarity index 100% rename from maloja/website/proxy.html rename to maloja/web/proxy.html diff --git a/maloja/website/proxy.py b/maloja/web/proxy.py similarity index 100% rename from maloja/website/proxy.py rename to maloja/web/proxy.py diff --git a/maloja/website/pulse.html b/maloja/web/pulse.html similarity index 100% rename from maloja/website/pulse.html rename to maloja/web/pulse.html diff --git a/maloja/website/pulse.py b/maloja/web/pulse.py similarity index 100% rename from maloja/website/pulse.py rename to maloja/web/pulse.py diff --git a/maloja/website/robots.txt b/maloja/web/robots.txt similarity index 100% rename from maloja/website/robots.txt rename to maloja/web/robots.txt diff --git a/maloja/website/scrobbles.html b/maloja/web/scrobbles.html similarity index 100% rename from maloja/website/scrobbles.html rename to maloja/web/scrobbles.html diff --git a/maloja/website/scrobbles.py b/maloja/web/scrobbles.py similarity index 100% rename from maloja/website/scrobbles.py rename to maloja/web/scrobbles.py diff --git a/maloja/website/setup.html b/maloja/web/setup.html similarity index 100% rename from maloja/website/setup.html rename to maloja/web/setup.html diff --git a/maloja/website/setup.py b/maloja/web/setup.py similarity index 100% rename from maloja/website/setup.py rename to maloja/web/setup.py diff --git a/maloja/website/start.html b/maloja/web/start.html similarity index 100% rename from maloja/website/start.html rename to maloja/web/start.html diff --git a/maloja/website/start.py b/maloja/web/start.py similarity index 100% rename from maloja/website/start.py rename to maloja/web/start.py diff --git a/maloja/website/top_artists.html b/maloja/web/top_artists.html similarity index 100% rename from maloja/website/top_artists.html rename to maloja/web/top_artists.html diff --git a/maloja/website/top_artists.py b/maloja/web/top_artists.py similarity index 100% rename from maloja/website/top_artists.py rename to maloja/web/top_artists.py diff --git a/maloja/website/top_tracks.html b/maloja/web/top_tracks.html similarity index 100% rename from maloja/website/top_tracks.html rename to maloja/web/top_tracks.html diff --git a/maloja/website/top_tracks.py b/maloja/web/top_tracks.py similarity index 100% rename from maloja/website/top_tracks.py rename to maloja/web/top_tracks.py diff --git a/maloja/website/track.html b/maloja/web/track.html similarity index 100% rename from maloja/website/track.html rename to maloja/web/track.html diff --git a/maloja/website/track.py b/maloja/web/track.py similarity index 100% rename from maloja/website/track.py rename to maloja/web/track.py diff --git a/maloja/website/track.pyhp b/maloja/web/track.pyhp similarity index 100% rename from maloja/website/track.pyhp rename to maloja/web/track.pyhp diff --git a/maloja/website/wait.html b/maloja/web/wait.html similarity index 100% rename from maloja/website/wait.html rename to maloja/web/wait.html From 75ef7a4b0c6d100f7ce91680cd2c59ee4289906b Mon Sep 17 00:00:00 2001 From: Krateng Date: Sat, 30 Nov 2019 13:04:22 +0100 Subject: [PATCH 06/60] Fixed wrong tooltip and link for track medals --- maloja/web/track.pyhp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/maloja/web/track.pyhp b/maloja/web/track.pyhp index 589aba1..b872390 100644 --- a/maloja/web/track.pyhp +++ b/maloja/web/track.pyhp @@ -40,9 +40,9 @@

Scrobble now Scrobbles

- - - + + + From 47eeb38edfd4cc21b8af6071fd4dca8cbfe8fcb5 Mon Sep 17 00:00:00 2001 From: Krateng Date: Tue, 3 Dec 2019 16:10:22 +0100 Subject: [PATCH 07/60] Moved doreah settings --- .dev | 0 maloja/__init__.py | 21 ++++++++++++++++++++- maloja/data_files/.doreah | 12 ------------ 3 files changed, 20 insertions(+), 13 deletions(-) delete mode 100644 .dev delete mode 100644 maloja/data_files/.doreah diff --git a/.dev b/.dev deleted file mode 100644 index e69de29..0000000 diff --git a/maloja/__init__.py b/maloja/__init__.py index 7940e5c..6d7b188 100644 --- a/maloja/__init__.py +++ b/maloja/__init__.py @@ -5,7 +5,7 @@ from .info import author,version,versionstr requires = [ "bottle>=0.12.16", "waitress>=1.3", - "doreah>=1.2.9", + "doreah>=1.2.10", "nimrodel>=0.4.9", "setproctitle>=1.1.10", "wand>=0.5.4", @@ -21,3 +21,22 @@ resources = [ commands = { "maloja":"controller:main" } + +from doreah import config +config( + logging={ + "logfolder": "logs" + }, + settings={ + "files":[ + "settings/default.ini", + "settings/settings.ini" + ] + }, + caching={ + "folder": "cache/" + }, + regular={ + "autostart": False + } +) diff --git a/maloja/data_files/.doreah b/maloja/data_files/.doreah deleted file mode 100644 index 29356ba..0000000 --- a/maloja/data_files/.doreah +++ /dev/null @@ -1,12 +0,0 @@ -logging: - logfolder: "logs" -settings: - files: - - "settings/default.ini" - - "settings/settings.ini" -caching: - folder: "cache/" -regular: - autostart: false -pyhp: - version: 2 From 2e69ef7df98296b29b8917dd7ed29322aaf61dea Mon Sep 17 00:00:00 2001 From: Krateng Date: Tue, 3 Dec 2019 16:23:01 +0100 Subject: [PATCH 08/60] More refactoring --- maloja/__init__.py | 29 +++++++++++++++++++++++++++-- maloja/controller.py | 2 +- maloja/database.py | 4 ++-- maloja/info.py | 19 ------------------- maloja/server.py | 2 +- setup.py | 2 +- 6 files changed, 32 insertions(+), 26 deletions(-) delete mode 100644 maloja/info.py diff --git a/maloja/__init__.py b/maloja/__init__.py index 6d7b188..46e9d61 100644 --- a/maloja/__init__.py +++ b/maloja/__init__.py @@ -1,6 +1,15 @@ -name = "maloja" +### PACKAGE DATA + +name = "maloja" +desc = "Self-hosted music scrobble database" +author = { + "name":"Johannes Krattenmacher", + "email":"maloja@krateng.dev", + "github": "krateng" +} +version = 2,0,3 +versionstr = ".".join(str(n) for n in version) -from .info import author,version,versionstr requires = [ "bottle>=0.12.16", @@ -22,6 +31,8 @@ commands = { "maloja":"controller:main" } +### DOREAH CONFIGURATION + from doreah import config config( logging={ @@ -40,3 +51,17 @@ config( "autostart": False } ) + + +### USER DATA FOLDER + + +import os +try: + DATA_DIR = os.environ["XDG_DATA_HOME"].split(":")[0] + assert os.path.exists(DATA_DIR) +except: + DATA_DIR = os.path.join(os.environ["HOME"],".local/share/") + +DATA_DIR = os.path.join(DATA_DIR,"maloja") +os.makedirs(DATA_DIR,exist_ok=True) diff --git a/maloja/controller.py b/maloja/controller.py index f4ad4cf..37692f0 100755 --- a/maloja/controller.py +++ b/maloja/controller.py @@ -11,7 +11,7 @@ import pathlib import pkg_resources from doreah.control import mainfunction -from .info import DATA_DIR +from .__init__ import DATA_DIR diff --git a/maloja/database.py b/maloja/database.py index f58f26a..646caa4 100644 --- a/maloja/database.py +++ b/maloja/database.py @@ -7,7 +7,7 @@ from .malojatime import register_scrobbletime, time_stamps, ranges from .urihandler import uri_to_internal, internal_to_uri, compose_querystring from . import compliant_api from .external import proxy_scrobble -from . import info +from .__init__ import version # doreah toolkit from doreah.logging import log from doreah import tsv @@ -240,7 +240,7 @@ def server_info(): return { "name":settings.get_settings("NAME"), - "version":info.version + "version":version } ## All database functions are separated - the external wrapper only reads the request keys, converts them into lists and renames them where necessary, and puts the end result in a dict if not already so it can be returned as json diff --git a/maloja/info.py b/maloja/info.py deleted file mode 100644 index b204cec..0000000 --- a/maloja/info.py +++ /dev/null @@ -1,19 +0,0 @@ -import os - -author = { - "name":"Johannes Krattenmacher", - "email":"maloja@krateng.dev", - "github": "krateng" -} -version = 2,0,2 -versionstr = ".".join(str(n) for n in version) - - -try: - DATA_DIR = os.environ["XDG_DATA_HOME"].split(":")[0] - assert os.path.exists(DATA_DIR) -except: - DATA_DIR = os.path.join(os.environ["HOME"],".local/share/") - -DATA_DIR = os.path.join(DATA_DIR,"maloja") -os.makedirs(DATA_DIR,exist_ok=True) diff --git a/maloja/server.py b/maloja/server.py index 9b4181f..c8389b6 100755 --- a/maloja/server.py +++ b/maloja/server.py @@ -1,6 +1,6 @@ #!/usr/bin/env python import os -from .info import DATA_DIR +from .__init__ import DATA_DIR os.chdir(DATA_DIR) diff --git a/setup.py b/setup.py index 2272aa3..267f0d5 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ setuptools.setup( version=".".join(str(n) for n in module.version), author=module.author["name"], author_email=module.author["email"], - description="Self-hosted music scrobble database", + description=module.desc, license="GPLv3", long_description=long_description, long_description_content_type="text/markdown", From c74cb7010f4f5c949420accffc0bf0832b1098ec Mon Sep 17 00:00:00 2001 From: Krateng Date: Wed, 4 Dec 2019 19:14:33 +0100 Subject: [PATCH 09/60] Better css generation --- maloja/server.py | 26 +- maloja/web/css/style.css | 674 ------------------------------------ maloja/web/less/maloja.less | 2 - 3 files changed, 19 insertions(+), 683 deletions(-) delete mode 100644 maloja/web/css/style.css diff --git a/maloja/server.py b/maloja/server.py index c8389b6..967628d 100755 --- a/maloja/server.py +++ b/maloja/server.py @@ -18,7 +18,6 @@ from . import utilities from .utilities import resolveImage from .urihandler import uri_to_internal, remove_identical from . import urihandler -from . import info # doreah toolkit from doreah import settings from doreah.logging import log @@ -53,10 +52,18 @@ webserver = Bottle() pthjoin = os.path.join -#import lesscpy -#css = "" -#for f in os.listdir(pthjoin(WEBFOLDER,"less")): -# css += lesscpy.compile(pthjoin(WEBFOLDER,"less",f)) +def generate_css(): + import lesscpy + from io import StringIO + less = "" + for f in os.listdir(pthjoin(WEBFOLDER,"less")): + with open(pthjoin(WEBFOLDER,"less",f),"r") as lessf: + less += lessf.read() + + css = lesscpy.compile(StringIO(less),minify=True) + return css + +css = generate_css() #os.makedirs("web/css",exist_ok=True) #with open("web/css/style.css","w") as f: @@ -145,9 +152,14 @@ def static_image(pth): response.set_header("Cache-Control", "public, max-age=86400") return response + +@webserver.route("/css/style.css") +def get_css(): + response.content_type = 'text/css' + return css + #@webserver.route("/") @webserver.route("/") -@webserver.route("/") @webserver.route("/") @webserver.route("/") @webserver.route("/") @@ -188,7 +200,7 @@ def static_html(name): environ["malojatime"] = malojatime environ["utilities"] = utilities environ["urihandler"] = urihandler - environ["info"] = info + #environ["info"] = info # external environ["urllib"] = urllib # request diff --git a/maloja/web/css/style.css b/maloja/web/css/style.css deleted file mode 100644 index 54eca3e..0000000 --- a/maloja/web/css/style.css +++ /dev/null @@ -1,674 +0,0 @@ -@font-face { - font-family: 'Ubuntu'; - font-style: normal; - font-weight: 400; - src: local('Ubuntu Regular'), local('Ubuntu-Regular'), url(https://fonts.gstatic.com/s/ubuntu/v14/4iCs6KVjbNBYlgoKcg72j00.woff2) format('woff2'); -} -@font-face { - font-family: 'Ubuntu'; - font-style: normal; - font-weight: 400; - src: local('Ubuntu Regular'), local('Ubuntu-Regular'), url(https://fonts.gstatic.com/s/ubuntu/v14/4iCs6KVjbNBYlgoKew72j00.woff2) format('woff2'); - unicode-range: U + 0400 -045F, U + 0490 -0491, U + 04 B0-04B1, U + 2116; -} -@font-face { - font-family: 'Ubuntu'; - font-style: normal; - font-weight: 400; - src: local('Ubuntu Regular'), local('Ubuntu-Regular'), url(https://fonts.gstatic.com/s/ubuntu/v14/4iCs6KVjbNBYlgoKcw72j00.woff2) format('woff2'); - unicode-range: U + 1 F00-1FFF; -} -@font-face { - font-family: 'Ubuntu'; - font-style: normal; - font-weight: 400; - src: local('Ubuntu Regular'), local('Ubuntu-Regular'), url(https://fonts.gstatic.com/s/ubuntu/v14/4iCs6KVjbNBYlgoKfA72j00.woff2) format('woff2'); - unicode-range: U + 0370 -03FF; -} -@font-face { - font-family: 'Ubuntu'; - font-style: normal; - font-weight: 400; - src: local('Ubuntu Regular'), local('Ubuntu-Regular'), url(https://fonts.gstatic.com/s/ubuntu/v14/4iCs6KVjbNBYlgoKcQ72j00.woff2) format('woff2'); -} -@font-face { - font-family: 'Ubuntu'; - font-style: normal; - font-weight: 400; - src: local('Ubuntu Regular'), local('Ubuntu-Regular'), url(https://fonts.gstatic.com/s/ubuntu/v14/4iCs6KVjbNBYlgoKfw72.woff2) format('woff2'); -}body { - background-color: #333337; - color: beige; - font-family: "Ubuntu"; -} -table.top_info td.image div { - margin-right: 20px; - margin-bottom: 20px; - background-size: cover; - background-position: center; - height: 174px; - width: 174px; -} -table.top_info td.text { - vertical-align: top; -} -table.top_info td.text h1 { - display: inline; - padding-right: 5px; -} -table.top_info td.text table.image_row td { - height: 50px; - width: 50px; - background-size: cover; - background-position: center; - background-repeat: no-repeat; - opacity: 0.5; - filter: grayscale(80%); -} -table.top_info td.text table.image_row td:hover { - opacity: 1; - filter: grayscale(0%); -} -::-webkit-scrollbar { - width: 8px; - cursor: pointer; -} -::-webkit-scrollbar-track { - background: grey; - background-color: rgba(0,255,255,0.1); -} -::-webkit-scrollbar-thumb { - background-color: rgba(103,85,0,0.7); -} -::-webkit-scrollbar-thumb:hover { - background: gold; -} -[onclick]:hover, -a:hover { - cursor: pointer; -} -div.grisons_bar { - background-color: rgba(0,255,255,0.1); -} -div.grisons_bar > div { - height: 100%; - background-color: rgba(103,85,0,0.7); -} -div.grisons_bar:hover > div { - background-color: gold; -} -a { - color: inherit; - text-decoration: none; -} -a.textlink { - color: yellow; -} -a.hidelink:hover { - text-decoration: none; -} -a:hover { - text-decoration: underline; -} -body { - padding: 15px; - padding-bottom: 35px; -} -input[type="date"] { - background-color: inherit; - color: inherit; - outline: none; - border: 0px; - font-family: inherit; - font-size: inherit; -} -div#settingsicon { - position: fixed; - right: 30px; - top: 30px; - fill: beige; -} -div#settingsicon:hover { - fill: yellow; -} -div.footer { - position: fixed; - height: 20px; - background-color: #0a0a0a; - bottom: 0px; - left: 0px; - right: 0px; - padding: 10px; - opacity: 1; -} -div.footer div:nth-child(1) { - display: inline-block; - width: 40%; - text-align: left; -} -div.footer div:nth-child(2) { - display: inline-block; - width: 19%; - text-align: center; - color: gold; - font-size: 110%; -} -div.footer div:nth-child(3) { - display: inline-block; - width: 40%; - text-align: right; -} -div.footer span a { - padding-left: 20px; - background-repeat: no-repeat; - background-size: contain; - background-position: left; - background-image: url("https://github.com/favicon.ico"); -} -div.footer input { - background-color: inherit; - border: 0px; - border-bottom: 1px solid beige; - color: beige; - font-size: 90%; - width: 70%; - padding-left: 5px; - padding-right: 5px; - padding-top: 2px; - padding-bottom: 2px; - font-family: "Ubuntu"; -} -div.footer input:focus { - outline: none; -} -div.searchresults { - position: fixed; - bottom: 50px; - right: 20px; - width: 500px; - background-color: rgba(10,10,10,0.99); - padding: 15px; -} -div.searchresults > span { - font-size: 20px; - font-weight: bold; -} -div.searchresults table { - width: 100%; - border-spacing: 0px 4px; -} -div.searchresults tr { - background-color: #05050501; - margin-top: 5px; - margin-bottom: 5px; - height: 50px; - cursor: pointer; -} -div.searchresults tr:hover { - background-color: #23232301; -} -div.searchresults tr td.image { - height: 50px; - width: 50px; - background-size: cover; - background-position: center; -} -div.searchresults tr td:nth-child(2) { - padding-left: 10px; -} -div.searchresults table.searchresults_tracks td span:nth-child(1) { - font-size: 12px; - color: grey; -} -@media (max-width:1000px) { - div.footer { - position: fixed; - background-color: #0a0a0a; - bottom: 0px; - left: 0px; - right: 0px; - padding: 3px; - opacity: 1; - } - div.footer div:nth-child(1) { - display: none; - } - div.footer div:nth-child(2) { - display: inline-block; - width: 20%; - text-align: center; - color: gold; - } - div.footer div:nth-child(3) { - display: inline-block; - width: 70%; - text-align: right; - } - div.footer input { - width: 90%; - } -} -p.desc a { - padding-left: 20px; - background-repeat: no-repeat; - background-size: contain; - background-position: left; - background-image: url("https://www.last.fm/static/images/lastfm_avatar_twitter.66cd2c48ce03.png"); -} -table.top_info + .stat_module_topartists table, -table.top_info + .stat_module_toptracks table { - margin: 15px 0; -} -.paginate { - text-align: center; - padding: 30px; -} -.stats { - color: grey; -} -.rank { - text-align: right; - color: grey; -} -.extra { - color: grey; - font-size: 80%; -} -input#apikey { - font-family: 'Ubuntu'; - outline: none; - border: 0px solid; - padding: 2px; -} -input.simpleinput { - font-family: 'Ubuntu'; - color: beige; - outline: none; - border-top: 0px solid; - border-left: 0px solid; - border-right: 0px solid; - padding: 2px; - background-color: inherit; - border-bottom: 1px solid beige; -} -a { - cursor: pointer; -} -span.stat_selector_pulse, -span.stat_selector_topartists, -span.stat_selector_toptracks { - cursor: pointer; -} -.medal { - top: 5px; - font-size: 80%; - padding: 3px; - margin: 2px; - border-radius: 2px; -} -.shiny { - overflow: hidden; - position: relative; - display: inline-block; -} -.shiny:after { - content: ""; - position: absolute; - top: -110%; - left: -210%; - width: 200%; - height: 200%; - opacity: 0; - transform: rotate(30deg); - background: rgba(255,255,255,0.13); - background: linear-gradient(to right,rgba(255,255,255,0.13)0%,rgba(255,255,255,0.13)77%,rgba(255,255,255,0.5)92%,rgba(255,255,255,0.0)100% ); -} -.shiny:hover:after { - opacity: 1; - top: -30%; - left: -30%; - transition-property: left, top, opacity; - transition-duration: 0.7s, 0.7s, 0.15s; - transition-timing-function: ease; -} -.shiny:active:after { - opacity: 0; -} -a.gold { - background-color: gold; - color: black; -} -a.silver { - background-color: silver; - color: black; -} -a.bronze { - background-color: #cd7f32; - color: black; -} -img.certrecord { - height: 30px; - vertical-align: text-bottom; -} -img.certrecord_small { - height: 20px; - vertical-align: text-bottom; -} -img.star { - height: 20px; - vertical-align: text-bottom; -} -.button { - padding: 3px; - padding-right: 6px; - padding-left: 6px; - background-color: beige; - color: #333337; - cursor: pointer; -} -.button:hover { - background-color: yellow; - color: #333337; -} -.button.locked { - background-color: grey; - color: black; - cursor: not-allowed; -} -table.twopart { - width: 100%; -} -table.twopart > tbody > tr > td { - width: 50%; -} -table.list { - border-collapse: collapse; -} -table.list tr td { - border-bottom: 2px solid; - border-color: rgba(0,0,0,0); - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - padding-right: 15px; -} -table.list tr:nth-child(even) { - background-color: #37373b; -} -table.list tr:nth-child(5n) td { - border-color: rgba(120,120,120,0.2); -} -table.list tr:hover { - background-color: #404044; -} -table.list td.time { - width: 11%; - color: grey; -} -table.list tr td.rank { - padding-right: 4px; -} -table.list tr td.rankup { - color: green; - padding-right: 8px; - font-size: 80%; -} -table.list tr td.rankdown { - color: red; - padding-right: 8px; - font-size: 80%; -} -table.list tr td.ranksame { - color: grey; - padding-right: 8px; - font-size: 80%; -} -table.list tr td.icon { - padding: 0px; - padding-right: 5px; - width: 20px; -} -table.list td.icon div { - width: 20px; - height: 20px; - background-size: cover; - background-position: center; -} -table.list td.artists, -td.artist, -td.title, -td.track { - min-width: 100px; -} -table.list td.track span.artist_in_trackcolumn { - color: #bbbbbb; -} -table.list td.track a.trackProviderSearch { - margin-right: 5px; - padding: 0 10px; -} -table.list td.amount { - width: 50px; - text-align: right; -} -table.list td.bar { - width: 500px; - background-color: #333337; -} -table.list td.bar div { - background-color: beige; - height: 20px; - position: relative; -} -table.list tr:hover td.bar div { - background-color: yellow; - cursor: pointer; -} -table.list td.chart { - width: 500px; - background-color: #333337; -} -table.list td.chart div { - height: 20px; - background-color: rgba(0,0,0,0.1); - border-radius: 0px 30px 30px 0px; - background-image: url("/media/chartpos_normal.png"); - background-position: right; - background-repeat: no-repeat; - background-size: auto 100%; - position: relative; -} -table.list tr:hover td.chart div { - cursor: pointer; -} -table.list tr td.chart div.gold { - background-image: url("/media/chartpos_gold.png"); -} -table.list tr td.chart div.silver { - background-image: url("/media/chartpos_silver.png"); -} -table.list tr td.chart div.bronze { - background-image: url("/media/chartpos_bronze.png"); -} -table.list tr td.button { - width: 200px; - cursor: pointer; - border-color: rgba(0,0,0,0) !important; -} -table.list td.button div { - background-color: beige; - color: #333337; - padding: 3px; - border-radius: 4px; -} -table.list td.button div:hover { - background-color: yellow; - color: #333337; - padding: 3px; - border-radius: 4px; -} -td.button.important div { - background-color: red; - color: white; -} -table.misc { - margin-left: 20px; -} -table.misc td { - padding-right: 20px; - color: #bbbbaa; -} -table.misc th { - text-align: left; -} -table.misc td.interaction { - width: 65px; -} -table.tiles_top td { - padding: 0px; - border: 0px; -} -table.tiles_top:hover td td { - opacity: 0.5; - filter: grayscale(80%); -} -table.tiles_top:hover td td:hover { - opacity: 1; - filter: grayscale(0%); -} -table.tiles_top, -table.tiles_sub { - border-collapse: collapse; -} -table.tiles_top > tbody > tr > td { - height: 300px; - width: 300px; -} -table.tiles_sub { - height: 100%; - width: 100%; -} -table.tiles_top td { - background-size: cover; - background-position: center; - vertical-align: bottom; -} -table.tiles_top td span { - background-color: rgba(0,0,0,0.7); -} -table.tiles_1x1 td { - height: 100%; - width: 100%; - font-size: 100%; -} -table.tiles_2x2 td { - height: 50%; - width: 50%; - font-size: 90%; -} -table.tiles_3x3 td { - height: 33.333%; - width: 33.333%; - font-size: 70%; -} -span.stat_module_pulse, -span.stat_module_topartists, -span.stat_module_toptracks { - display: inline-block; - vertical-align: top; -} -@media (min-width:1600px) { - div.sidelist { - position: absolute; - right: 0px; - top: 0px; - width: 40%; - height: 100%; - background-color: #444447; - padding-left: 30px; - padding-right: 30px; - } -} -div.sidelist table { - width: 100%; - table-layout: fixed; -} -div.sidelist table.list td.time { - width: 17%; -}body { - background-color: #333337; - color: beige; - font-family: "Ubuntu"; -} -table.top_info td.image div { - margin-right: 20px; - margin-bottom: 20px; - background-size: cover; - background-position: center; - height: 174px; - width: 174px; -} -table.top_info td.text { - vertical-align: top; -} -table.top_info td.text h1 { - display: inline; - padding-right: 5px; -} -table.top_info td.text table.image_row td { - height: 50px; - width: 50px; - background-size: cover; - background-position: center; - background-repeat: no-repeat; - opacity: 0.5; - filter: grayscale(80%); -} -table.top_info td.text table.image_row td:hover { - opacity: 1; - filter: grayscale(0%); -} -::-webkit-scrollbar { - width: 8px; - cursor: pointer; -} -::-webkit-scrollbar-track { - background: grey; - background-color: rgba(0,255,255,0.1); -} -::-webkit-scrollbar-thumb { - background-color: rgba(103,85,0,0.7); -} -::-webkit-scrollbar-thumb:hover { - background: gold; -} -[onclick]:hover, -a:hover { - cursor: pointer; -} -div.grisons_bar { - background-color: rgba(0,255,255,0.1); -} -div.grisons_bar > div { - height: 100%; - background-color: rgba(103,85,0,0.7); -} -div.grisons_bar:hover > div { - background-color: gold; -} -a { - color: inherit; - text-decoration: none; -} -a.textlink { - color: yellow; -} -a.hidelink:hover { - text-decoration: none; -} -a:hover { - text-decoration: underline; -} -.hide { - display:none; -} diff --git a/maloja/web/less/maloja.less b/maloja/web/less/maloja.less index a4b8b19..ce078e8 100644 --- a/maloja/web/less/maloja.less +++ b/maloja/web/less/maloja.less @@ -1,5 +1,3 @@ -@import "web/less/grisons"; - body { padding:15px; padding-bottom:35px; From fd0033e1c0e1720863cc921b1839ef7542ff0735 Mon Sep 17 00:00:00 2001 From: Krateng Date: Wed, 4 Dec 2019 20:41:53 +0100 Subject: [PATCH 10/60] Adjusted structure to be closer to albula --- maloja/__init__.py | 3 +- maloja/server.py | 32 ++++++++++-------- maloja/{web => static/ico}/favicon.ico | Bin .../{web/javascript => static/js}/cookies.js | 0 .../javascript => static/js}/datechange.js | 0 .../javascript => static/js}/neopolitan.js | 0 .../javascript => static/js}/rangeselect.js | 0 .../{web/javascript => static/js}/search.js | 0 .../{web/javascript => static/js}/upload.js | 0 maloja/{web => static}/less/grisons.less | 0 maloja/{web => static}/less/grisonsfont.less | 0 maloja/{web => static}/less/maloja.less | 0 .../media => static/png}/chartpos_bronze.png | Bin .../media => static/png}/chartpos_gold.png | Bin .../media => static/png}/chartpos_normal.png | Bin .../media => static/png}/chartpos_silver.png | Bin maloja/{web => static/png}/favicon.png | Bin .../media => static/png}/record_diamond.png | Bin .../{web/media => static/png}/record_gold.png | Bin .../png}/record_gold_original.png | Bin .../media => static/png}/record_platinum.png | Bin maloja/{web/media => static/png}/star.png | Bin maloja/{web/media => static/png}/star_alt.png | Bin maloja/{web => static/txt}/robots.txt | 0 maloja/web/admin.pyhp | 2 +- maloja/web/artist.html | 4 +-- maloja/web/artist.pyhp | 2 +- maloja/web/charts_artists.html | 2 +- maloja/web/common/header.html | 8 ++--- maloja/web/issues.html | 2 +- maloja/web/manual.html | 2 +- maloja/web/proxy.html | 2 +- maloja/web/setup.html | 2 +- maloja/web/start.html | 4 +-- maloja/web/track.html | 4 +-- maloja/web/track.pyhp | 2 +- 36 files changed, 38 insertions(+), 33 deletions(-) rename maloja/{web => static/ico}/favicon.ico (100%) rename maloja/{web/javascript => static/js}/cookies.js (100%) rename maloja/{web/javascript => static/js}/datechange.js (100%) rename maloja/{web/javascript => static/js}/neopolitan.js (100%) rename maloja/{web/javascript => static/js}/rangeselect.js (100%) rename maloja/{web/javascript => static/js}/search.js (100%) rename maloja/{web/javascript => static/js}/upload.js (100%) rename maloja/{web => static}/less/grisons.less (100%) rename maloja/{web => static}/less/grisonsfont.less (100%) rename maloja/{web => static}/less/maloja.less (100%) rename maloja/{web/media => static/png}/chartpos_bronze.png (100%) rename maloja/{web/media => static/png}/chartpos_gold.png (100%) rename maloja/{web/media => static/png}/chartpos_normal.png (100%) rename maloja/{web/media => static/png}/chartpos_silver.png (100%) rename maloja/{web => static/png}/favicon.png (100%) rename maloja/{web/media => static/png}/record_diamond.png (100%) rename maloja/{web/media => static/png}/record_gold.png (100%) rename maloja/{web/media => static/png}/record_gold_original.png (100%) rename maloja/{web/media => static/png}/record_platinum.png (100%) rename maloja/{web/media => static/png}/star.png (100%) rename maloja/{web/media => static/png}/star_alt.png (100%) rename maloja/{web => static/txt}/robots.txt (100%) diff --git a/maloja/__init__.py b/maloja/__init__.py index 46e9d61..02e1f7a 100644 --- a/maloja/__init__.py +++ b/maloja/__init__.py @@ -7,7 +7,7 @@ author = { "email":"maloja@krateng.dev", "github": "krateng" } -version = 2,0,3 +version = 2,0,4 versionstr = ".".join(str(n) for n in version) @@ -23,6 +23,7 @@ requires = [ resources = [ "web/*/*", "web/*", + "static/*/*", "data_files/*/*", "data_files/.doreah" ] diff --git a/maloja/server.py b/maloja/server.py index 967628d..5ca6c58 100755 --- a/maloja/server.py +++ b/maloja/server.py @@ -45,8 +45,9 @@ MAIN_PORT = settings.get_settings("WEB_PORT") HOST = settings.get_settings("HOST") THREADS = 12 BaseRequest.MEMFILE_MAX = 15 * 1024 * 1024 -WEBFOLDER = pkg_resources.resource_filename(__name__,"web") +WEBFOLDER = pkg_resources.resource_filename(__name__,"web") +STATICFOLDER = pkg_resources.resource_filename(__name__,"static") webserver = Bottle() @@ -56,8 +57,8 @@ def generate_css(): import lesscpy from io import StringIO less = "" - for f in os.listdir(pthjoin(WEBFOLDER,"less")): - with open(pthjoin(WEBFOLDER,"less",f),"r") as lessf: + for f in os.listdir(pthjoin(STATICFOLDER,"less")): + with open(pthjoin(STATICFOLDER,"less",f),"r") as lessf: less += lessf.read() css = lesscpy.compile(StringIO(less),minify=True) @@ -153,27 +154,30 @@ def static_image(pth): return response -@webserver.route("/css/style.css") +@webserver.route("/style.css") def get_css(): response.content_type = 'text/css' return css -#@webserver.route("/") -@webserver.route("/") -@webserver.route("/") -@webserver.route("/") -@webserver.route("/") -@webserver.route("/") -@webserver.route("/") -def static(name): - response = static_file(name,root=WEBFOLDER) + +@webserver.route("/.") +def static(name,ext): + assert ext in ["txt","ico","jpeg","jpg","png","less","js"] + response = static_file(ext + "/" + name + "." + ext,root=STATICFOLDER) + response.set_header("Cache-Control", "public, max-age=3600") + return response + +@webserver.route("/media/.") +def static(name,ext): + assert ext in ["ico","jpeg","jpg","png"] + response = static_file(ext + "/" + name + "." + ext,root=STATICFOLDER) response.set_header("Cache-Control", "public, max-age=3600") return response @webserver.route("/") def static_html(name): - linkheaders = ["; rel=preload; as=style"] + linkheaders = ["; rel=preload; as=style"] keys = remove_identical(FormsDict.decode(request.query)) pyhp_file = os.path.exists(pthjoin(WEBFOLDER,name + ".pyhp")) diff --git a/maloja/web/favicon.ico b/maloja/static/ico/favicon.ico similarity index 100% rename from maloja/web/favicon.ico rename to maloja/static/ico/favicon.ico diff --git a/maloja/web/javascript/cookies.js b/maloja/static/js/cookies.js similarity index 100% rename from maloja/web/javascript/cookies.js rename to maloja/static/js/cookies.js diff --git a/maloja/web/javascript/datechange.js b/maloja/static/js/datechange.js similarity index 100% rename from maloja/web/javascript/datechange.js rename to maloja/static/js/datechange.js diff --git a/maloja/web/javascript/neopolitan.js b/maloja/static/js/neopolitan.js similarity index 100% rename from maloja/web/javascript/neopolitan.js rename to maloja/static/js/neopolitan.js diff --git a/maloja/web/javascript/rangeselect.js b/maloja/static/js/rangeselect.js similarity index 100% rename from maloja/web/javascript/rangeselect.js rename to maloja/static/js/rangeselect.js diff --git a/maloja/web/javascript/search.js b/maloja/static/js/search.js similarity index 100% rename from maloja/web/javascript/search.js rename to maloja/static/js/search.js diff --git a/maloja/web/javascript/upload.js b/maloja/static/js/upload.js similarity index 100% rename from maloja/web/javascript/upload.js rename to maloja/static/js/upload.js diff --git a/maloja/web/less/grisons.less b/maloja/static/less/grisons.less similarity index 100% rename from maloja/web/less/grisons.less rename to maloja/static/less/grisons.less diff --git a/maloja/web/less/grisonsfont.less b/maloja/static/less/grisonsfont.less similarity index 100% rename from maloja/web/less/grisonsfont.less rename to maloja/static/less/grisonsfont.less diff --git a/maloja/web/less/maloja.less b/maloja/static/less/maloja.less similarity index 100% rename from maloja/web/less/maloja.less rename to maloja/static/less/maloja.less diff --git a/maloja/web/media/chartpos_bronze.png b/maloja/static/png/chartpos_bronze.png similarity index 100% rename from maloja/web/media/chartpos_bronze.png rename to maloja/static/png/chartpos_bronze.png diff --git a/maloja/web/media/chartpos_gold.png b/maloja/static/png/chartpos_gold.png similarity index 100% rename from maloja/web/media/chartpos_gold.png rename to maloja/static/png/chartpos_gold.png diff --git a/maloja/web/media/chartpos_normal.png b/maloja/static/png/chartpos_normal.png similarity index 100% rename from maloja/web/media/chartpos_normal.png rename to maloja/static/png/chartpos_normal.png diff --git a/maloja/web/media/chartpos_silver.png b/maloja/static/png/chartpos_silver.png similarity index 100% rename from maloja/web/media/chartpos_silver.png rename to maloja/static/png/chartpos_silver.png diff --git a/maloja/web/favicon.png b/maloja/static/png/favicon.png similarity index 100% rename from maloja/web/favicon.png rename to maloja/static/png/favicon.png diff --git a/maloja/web/media/record_diamond.png b/maloja/static/png/record_diamond.png similarity index 100% rename from maloja/web/media/record_diamond.png rename to maloja/static/png/record_diamond.png diff --git a/maloja/web/media/record_gold.png b/maloja/static/png/record_gold.png similarity index 100% rename from maloja/web/media/record_gold.png rename to maloja/static/png/record_gold.png diff --git a/maloja/web/media/record_gold_original.png b/maloja/static/png/record_gold_original.png similarity index 100% rename from maloja/web/media/record_gold_original.png rename to maloja/static/png/record_gold_original.png diff --git a/maloja/web/media/record_platinum.png b/maloja/static/png/record_platinum.png similarity index 100% rename from maloja/web/media/record_platinum.png rename to maloja/static/png/record_platinum.png diff --git a/maloja/web/media/star.png b/maloja/static/png/star.png similarity index 100% rename from maloja/web/media/star.png rename to maloja/static/png/star.png diff --git a/maloja/web/media/star_alt.png b/maloja/static/png/star_alt.png similarity index 100% rename from maloja/web/media/star_alt.png rename to maloja/static/png/star_alt.png diff --git a/maloja/web/robots.txt b/maloja/static/txt/robots.txt similarity index 100% rename from maloja/web/robots.txt rename to maloja/static/txt/robots.txt diff --git a/maloja/web/admin.pyhp b/maloja/web/admin.pyhp index 2229e92..0221c61 100644 --- a/maloja/web/admin.pyhp +++ b/maloja/web/admin.pyhp @@ -5,7 +5,7 @@ Maloja - + diff --git a/maloja/web/artist.html b/maloja/web/artist.html index d9f4a03..8a48636 100644 --- a/maloja/web/artist.html +++ b/maloja/web/artist.html @@ -4,8 +4,8 @@ Maloja - KEY_ARTISTNAME - - + + diff --git a/maloja/web/artist.pyhp b/maloja/web/artist.pyhp index 6070112..dfe915d 100644 --- a/maloja/web/artist.pyhp +++ b/maloja/web/artist.pyhp @@ -37,7 +37,7 @@ Maloja - <pyhp echo="artist" /> - + diff --git a/maloja/web/charts_artists.html b/maloja/web/charts_artists.html index 6b070c9..e203049 100644 --- a/maloja/web/charts_artists.html +++ b/maloja/web/charts_artists.html @@ -4,7 +4,7 @@ Maloja - Artist Charts - + diff --git a/maloja/web/common/header.html b/maloja/web/common/header.html index 37d9792..e23b9f3 100644 --- a/maloja/web/common/header.html +++ b/maloja/web/common/header.html @@ -5,7 +5,7 @@ --> - - - - + + + + diff --git a/maloja/web/issues.html b/maloja/web/issues.html index 31e10f0..59eb1bd 100644 --- a/maloja/web/issues.html +++ b/maloja/web/issues.html @@ -4,7 +4,7 @@ Maloja - Issues - + diff --git a/maloja/web/manual.html b/maloja/web/manual.html index b642a8d..e880d5c 100644 --- a/maloja/web/manual.html +++ b/maloja/web/manual.html @@ -4,7 +4,7 @@ Maloja - + + + - - + + diff --git a/maloja/web/track.html b/maloja/web/track.html index c67b824..1fdd265 100644 --- a/maloja/web/track.html +++ b/maloja/web/track.html @@ -4,8 +4,8 @@ Maloja - KEY_TRACKTITLE - - + + diff --git a/maloja/web/track.pyhp b/maloja/web/track.pyhp index b872390..f3c352a 100644 --- a/maloja/web/track.pyhp +++ b/maloja/web/track.pyhp @@ -18,7 +18,7 @@ Maloja - <pyhp echo="track['title']" /> - + --> - + From 414f5300355b4a28552f60081f7182fabf66373a Mon Sep 17 00:00:00 2001 From: Krateng Date: Tue, 10 Dec 2019 21:20:11 +0100 Subject: [PATCH 23/60] Fixed inclusion of predefined rules --- maloja/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/maloja/__init__.py b/maloja/__init__.py index e603e77..08ba947 100644 --- a/maloja/__init__.py +++ b/maloja/__init__.py @@ -7,7 +7,7 @@ author = { "email":"maloja@krateng.dev", "github": "krateng" } -version = 2,0,12 +version = 2,0,13 versionstr = ".".join(str(n) for n in version) @@ -25,6 +25,7 @@ resources = [ "web/*", "static/*/*", "data_files/*/*", + "data_files/*/*/*", "data_files/.doreah" ] From a6b1a8a1443992b3d290b90edff5c77290abfab0 Mon Sep 17 00:00:00 2001 From: Krateng Date: Tue, 10 Dec 2019 22:55:36 +0100 Subject: [PATCH 24/60] Added update command --- README.md | 2 +- maloja/controller.py | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ccd0fef..0936f69 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ Also neat: You can use your **custom artist or track images**. maloja backup -or, to only backup essential data (no artwork etc) + or, to only backup essential data (no artwork etc) maloja backup -l minimal diff --git a/maloja/controller.py b/maloja/controller.py index a818bc4..4b44529 100755 --- a/maloja/controller.py +++ b/maloja/controller.py @@ -195,7 +195,8 @@ def backup(level="full"): for f in real_files: archive.add(f) - +def update(): + os.system("pip3 install malojaserver --upgrade --no-cache-dir") @mainfunction({"l":"level"},shield=True) def main(action,*args,**kwargs): @@ -205,7 +206,8 @@ def main(action,*args,**kwargs): "stop":stop, "import":loadlastfm, "debug":direct, - "backup":backup + "backup":backup, + "update":update } if action in actions: actions[action](*args,**kwargs) else: print("Valid commands: " + " ".join(a for a in actions)) From 5d066d9b26e2f224e579621e8c06b1f7c4ee8f69 Mon Sep 17 00:00:00 2001 From: Krateng Date: Wed, 11 Dec 2019 14:25:09 +0100 Subject: [PATCH 25/60] Added artistintitle rules --- maloja/__init__.py | 2 +- maloja/cleanup.py | 6 +++++- .../data_files/rules/predefined/krateng_kpopgirlgroups.tsv | 5 +++++ maloja/data_files/rules/rules.info | 4 ++++ 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/maloja/__init__.py b/maloja/__init__.py index 08ba947..ce9990e 100644 --- a/maloja/__init__.py +++ b/maloja/__init__.py @@ -7,7 +7,7 @@ author = { "email":"maloja@krateng.dev", "github": "krateng" } -version = 2,0,13 +version = 2,0,14 versionstr = ".".join(str(n) for n in version) diff --git a/maloja/cleanup.py b/maloja/cleanup.py index 600170a..5180a6d 100644 --- a/maloja/cleanup.py +++ b/maloja/cleanup.py @@ -18,6 +18,7 @@ class CleanerAgent: self.rules_replaceartist = {b.lower():c for [a,b,c,d] in raw if a=="replaceartist"} self.rules_ignoreartist = [b.lower() for [a,b,c,d] in raw if a=="ignoreartist"] self.rules_addartists = {c.lower():(b.lower(),d) for [a,b,c,d] in raw if a=="addartists"} + self.rules_artistintitle = {b.lower():c for [a,b,c,d] in raw if a=="artistintitle"} #self.rules_regexartist = [[b,c] for [a,b,c,d] in raw if a=="regexartist"] #self.rules_regextitle = [[b,c] for [a,b,c,d] in raw if a=="regextitle"] # TODO @@ -137,7 +138,10 @@ class CleanerAgent: artists += self.parseArtists(re.sub(r"(.*) " + d + " (.*).*",r"\2",t)) return (title,artists) - return (t,[]) + artists = [] + for st in self.rules_artistintitle: + if st in t.lower(): artists += self.rules_artistintitle[st].split("␟") + return (t,artists) diff --git a/maloja/data_files/rules/predefined/krateng_kpopgirlgroups.tsv b/maloja/data_files/rules/predefined/krateng_kpopgirlgroups.tsv index 2344605..28efdb0 100644 --- a/maloja/data_files/rules/predefined/krateng_kpopgirlgroups.tsv +++ b/maloja/data_files/rules/predefined/krateng_kpopgirlgroups.tsv @@ -156,3 +156,8 @@ replacetitle ëČŒìš 12시 Gotta Go Gotta Go # ITZY replacetitle ë‹ŹëŒë‹ŹëŒ (DALLA DALLA) Dalla Dalla + + +# Popular Remixes +artistintitle Areia Remix Areia +artistintitle Areia Kpop Areia diff --git a/maloja/data_files/rules/rules.info b/maloja/data_files/rules/rules.info index c016d07..239837c 100644 --- a/maloja/data_files/rules/rules.info +++ b/maloja/data_files/rules/rules.info @@ -20,6 +20,9 @@ The first column defines the type of the rule: Second column is artists that need to be already present for this rule to apply Third column is the song title Fourth column are artists that shoud be added, separated by ␟ + artistintitle Defines title strings that imply the presence of another artist. + Second column is the string + Third column is the artist or artists Rules in non-tsv files are ignored. '#' is used for comments. Additional columns are ignored. To have a '#' in a name, use '\num' Comments are not supported in scrobble lists, but you probably never edit these manually anyway. @@ -35,3 +38,4 @@ replaceartist Dal Shabet Dal★Shabet replaceartist Mr FijiWiji, AgNO3 Mr FijiWiji␟AgNO3 # one artist is replaced by two artists countas Trouble Maker HyunA addartists HyunA Change Jun Hyung +artistintitle Areia Remix Areia From 592e26f1ca95820f03f7203fdda59a40ad5958e5 Mon Sep 17 00:00:00 2001 From: Krateng Date: Wed, 11 Dec 2019 15:10:28 +0100 Subject: [PATCH 26/60] Updated database fix --- maloja/controller.py | 7 ++- maloja/data_files/logs/dbfix/dummy | 0 maloja/fixexisting.py | 74 +++++++++++++++++++----------- 3 files changed, 52 insertions(+), 29 deletions(-) create mode 100644 maloja/data_files/logs/dbfix/dummy diff --git a/maloja/controller.py b/maloja/controller.py index 4b44529..1e48bf7 100755 --- a/maloja/controller.py +++ b/maloja/controller.py @@ -198,6 +198,10 @@ def backup(level="full"): def update(): os.system("pip3 install malojaserver --upgrade --no-cache-dir") +def fixdb(): + from .fixexisting import fix + fix() + @mainfunction({"l":"level"},shield=True) def main(action,*args,**kwargs): actions = { @@ -207,7 +211,8 @@ def main(action,*args,**kwargs): "import":loadlastfm, "debug":direct, "backup":backup, - "update":update + "update":update, + "fix":fixdb } if action in actions: actions[action](*args,**kwargs) else: print("Valid commands: " + " ".join(a for a in actions)) diff --git a/maloja/data_files/logs/dbfix/dummy b/maloja/data_files/logs/dbfix/dummy new file mode 100644 index 0000000..e69de29 diff --git a/maloja/fixexisting.py b/maloja/fixexisting.py index 45cb36c..301cce5 100644 --- a/maloja/fixexisting.py +++ b/maloja/fixexisting.py @@ -1,46 +1,64 @@ import os +from .__init__ import DATA_DIR +os.chdir(DATA_DIR) + import re from .cleanup import CleanerAgent from doreah.logging import log import difflib +import datetime wendigo = CleanerAgent() exp = r"([0-9]*)(\t+)([^\t]+?)(\t+)([^\t]+)(\t*)([^\t]*)\n" -for fn in os.listdir("scrobbles/"): - if fn.endswith(".tsv"): - f = open("scrobbles/" + fn) - fnew = open("scrobbles/" + fn + "_new","w") - for l in f: +pthj = os.path.join - a,t = re.sub(exp,r"\3",l), re.sub(exp,r"\5",l) - r1,r2,r3 = re.sub(exp,r"\1\2",l),re.sub(exp,r"\4",l),re.sub(exp,r"\6\7",l) - a = a.replace("␟",";") +def fix(): - (al,t) = wendigo.fullclean(a,t) - a = "␟".join(al) - fnew.write(r1 + a + r2 + t + r3 + "\n") + now = datetime.datetime.utcnow() + nowstr = now.strftime("%Y_%m_%d_%H_%M_%S") + datestr = now.strftime("%Y/%m/%d") + timestr = now.strftime("%H:%M:%S") - #print("Artists: " + a) - #print("Title: " + t) - #print("1: " + r1) - #print("2: " + r2) - #print("3: " + r3) + with open(pthj(DATA_DIR,"logs","dbfix",nowstr + ".log"),"a") as logfile: - f.close() - fnew.close() + logfile.write("Database fix initiated on " + datestr + " " + timestr + " UTC") + logfile.write("\n\n") - #os.system("diff " + "scrobbles/" + fn + "_new" + " " + "scrobbles/" + fn) - with open("scrobbles/" + fn + "_new","r") as newfile: - with open("scrobbles/" + fn,"r") as oldfile: - diff = difflib.unified_diff(oldfile.read().split("\n"),newfile.read().split("\n"),lineterm="") - diff = list(diff)[2:] - log("Diff for scrobbles/" + fn + "".join("\n\t" + d for d in diff),module="fixer") + for filename in os.listdir(pthj(DATA_DIR,"scrobbles")): + if filename.endswith(".tsv"): + filename_new = filename + "_new" - os.rename("scrobbles/" + fn + "_new","scrobbles/" + fn) + with open(pthj(DATA_DIR,"scrobbles",filename_new),"w") as newfile: + with open(pthj(DATA_DIR,"scrobbles",filename),"r") as oldfile: - checkfile = open("scrobbles/" + fn + ".rulestate","w") - checkfile.write(wendigo.checksums) - checkfile.close() + for l in oldfile: + + a,t = re.sub(exp,r"\3",l), re.sub(exp,r"\5",l) + r1,r2,r3 = re.sub(exp,r"\1\2",l),re.sub(exp,r"\4",l),re.sub(exp,r"\6\7",l) + + a = a.replace("␟",";") + + (al,t) = wendigo.fullclean(a,t) + a = "␟".join(al) + newfile.write(r1 + a + r2 + t + r3 + "\n") + + + #os.system("diff " + "scrobbles/" + fn + "_new" + " " + "scrobbles/" + fn) + with open(pthj(DATA_DIR,"scrobbles",filename_new),"r") as newfile: + with open(pthj(DATA_DIR,"scrobbles",filename),"r") as oldfile: + + diff = difflib.unified_diff(oldfile.read().split("\n"),newfile.read().split("\n"),lineterm="") + diff = list(diff)[2:] + #log("Diff for scrobbles/" + filename + "".join("\n\t" + d for d in diff),module="fixer") + output = "Diff for scrobbles/" + filename + "".join("\n\t" + d for d in diff) + print(output) + logfile.write(output) + logfile.write("\n") + + os.rename(pthj(DATA_DIR,"scrobbles",filename_new),pthj(DATA_DIR,"scrobbles",filename)) + + with open(pthj(DATA_DIR,"scrobbles",filename + ".rulestate"),"w") as checkfile: + checkfile.write(wendigo.checksums) From 14fb4b40230c0eb652174d69a85e37049decb519 Mon Sep 17 00:00:00 2001 From: Krateng Date: Wed, 11 Dec 2019 15:17:49 +0100 Subject: [PATCH 27/60] Database fixing from web interface should now work again --- maloja/database.py | 3 ++- maloja/web/admin.pyhp | 1 + maloja/web/issues.html | 4 ++-- maloja/web/wait.html | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/maloja/database.py b/maloja/database.py index 00258f4..c292013 100644 --- a/maloja/database.py +++ b/maloja/database.py @@ -862,7 +862,8 @@ def rebuild(**keys): global db_rulestate db_rulestate = False sync() - os.system("python3 fixexisting.py") + from .fixexisting import fix + fix() global cla, coa cla = CleanerAgent() coa = CollectorAgent() diff --git a/maloja/web/admin.pyhp b/maloja/web/admin.pyhp index 0221c61..15a359f 100644 --- a/maloja/web/admin.pyhp +++ b/maloja/web/admin.pyhp @@ -97,6 +97,7 @@ Server Setup
Manual Scrobbling + Database Maintenance diff --git a/maloja/web/issues.html b/maloja/web/issues.html index 59eb1bd..1a8bb9e 100644 --- a/maloja/web/issues.html +++ b/maloja/web/issues.html @@ -43,7 +43,7 @@ var xhttp = new XMLHttpRequest(); - xhttp.open("POST","/db/newrule?", true); + xhttp.open("POST","/api/newrule?", true); xhttp.send(keys); e = arguments[0] line = e.parentNode @@ -56,7 +56,7 @@ apikey = document.getElementById("apikey").value var xhttp = new XMLHttpRequest(); - xhttp.open("POST","/db/rebuild", true); + xhttp.open("POST","/api/rebuild", true); xhttp.send("key=" + encodeURIComponent(apikey)) window.location = "/wait"; } diff --git a/maloja/web/wait.html b/maloja/web/wait.html index d6b847a..3367376 100644 --- a/maloja/web/wait.html +++ b/maloja/web/wait.html @@ -31,7 +31,7 @@ console.log("Probing..."); pending = true; var xhttp = new XMLHttpRequest(); - xhttp.open("GET","/db/test", true); + xhttp.open("GET","/api/test", true); xhttp.onreadystatechange = goback; xhttp.send(); From b87379ed986640788201f1ff52826413067e5ffb Mon Sep 17 00:00:00 2001 From: Krateng Date: Wed, 11 Dec 2019 15:27:21 +0100 Subject: [PATCH 28/60] Added automatic backups --- maloja/__init__.py | 2 +- maloja/controller.py | 12 ++++++------ maloja/data_files/backups/dummy | 0 maloja/fixexisting.py | 3 +++ 4 files changed, 10 insertions(+), 7 deletions(-) create mode 100644 maloja/data_files/backups/dummy diff --git a/maloja/__init__.py b/maloja/__init__.py index ce9990e..3ea1919 100644 --- a/maloja/__init__.py +++ b/maloja/__init__.py @@ -7,7 +7,7 @@ author = { "email":"maloja@krateng.dev", "github": "krateng" } -version = 2,0,14 +version = 2,1 versionstr = ".".join(str(n) for n in version) diff --git a/maloja/controller.py b/maloja/controller.py index 1e48bf7..2166b2c 100755 --- a/maloja/controller.py +++ b/maloja/controller.py @@ -161,9 +161,9 @@ def loadlastfm(filename): def direct(): from . import server -def backup(level="full"): +def backup(level="full",folder=origpath): import tarfile - from datetime import date + from datetime import datetime import glob @@ -186,10 +186,10 @@ def backup(level="full"): for g in user_files: real_files += glob.glob(g) - today = date.today() - datestr = "-".join((str(today.year),str(today.month),str(today.day))) - filename = "maloja_backup_" + datestr + ".tar.gz" - archivefile = os.path.join(origpath,filename) + now = datetime.utcnow() + timestr = now.strftime("%Y_%m_%d_%H_%M_%S") + filename = "maloja_backup_" + timestr + ".tar.gz" + archivefile = os.path.join(folder,filename) assert not os.path.exists(archivefile) with tarfile.open(name=archivefile,mode="x:gz") as archive: for f in real_files: diff --git a/maloja/data_files/backups/dummy b/maloja/data_files/backups/dummy new file mode 100644 index 0000000..e69de29 diff --git a/maloja/fixexisting.py b/maloja/fixexisting.py index 301cce5..6f36f4d 100644 --- a/maloja/fixexisting.py +++ b/maloja/fixexisting.py @@ -7,6 +7,7 @@ from .cleanup import CleanerAgent from doreah.logging import log import difflib import datetime +from .controller import backup wendigo = CleanerAgent() @@ -17,6 +18,8 @@ pthj = os.path.join def fix(): + backup(level="minimal",folder=pthj(DATA_DIR,"backups")) + now = datetime.datetime.utcnow() nowstr = now.strftime("%Y_%m_%d_%H_%M_%S") datestr = now.strftime("%Y/%m/%d") From 905c6e8e02a93d32b8a59c0922f955d766171e36 Mon Sep 17 00:00:00 2001 From: Krateng Date: Wed, 11 Dec 2019 15:49:03 +0100 Subject: [PATCH 29/60] Switched error page to pyhp --- maloja/server.py | 21 +++++-------------- maloja/web/admin.pyhp | 2 +- .../web/errors/{generic.html => generic.pyhp} | 5 +++-- 3 files changed, 9 insertions(+), 19 deletions(-) rename maloja/web/errors/{generic.html => generic.pyhp} (68%) diff --git a/maloja/server.py b/maloja/server.py index 5ca6c58..f97ea9d 100755 --- a/maloja/server.py +++ b/maloja/server.py @@ -22,6 +22,7 @@ from . import urihandler from doreah import settings from doreah.logging import log from doreah.timing import Clock +from doreah.pyhp import file as pyhpfile # technical #from importlib.machinery import SourceFileLoader import importlib @@ -88,21 +89,10 @@ def customerror(error): code = int(str(error).split(",")[0][1:]) log("HTTP Error: " + str(code),module="error") - if os.path.exists(pthjoin(WEBFOLDER,"errors",str(code) + ".html")): - return static_file(pthjoin(WEBFOLDER,"errors",str(code) + ".html"),root="") + if os.path.exists(pthjoin(WEBFOLDER,"errors",str(code) + ".pyhp")): + return pyhpfile(pthjoin(WEBFOLDER,"errors",str(code) + ".pyhp"),{"errorcode":code}) else: - with open(pthjoin(WEBFOLDER,"errors/generic.html")) as htmlfile: - html = htmlfile.read() - - # apply global substitutions - with open(pthjoin(WEBFOLDER,"common/footer.html")) as footerfile: - footerhtml = footerfile.read() - with open(pthjoin(WEBFOLDER,"common/header.html")) as headerfile: - headerhtml = headerfile.read() - html = html.replace("",footerhtml + "").replace("",headerhtml + "") - - html = html.replace("ERROR_CODE",str(code)) - return html + return pyhpfile(pthjoin(WEBFOLDER,"errors","generic.pyhp"),{"errorcode":code}) @@ -191,7 +181,6 @@ def static_html(name): # if a pyhp file exists, use this if (pyhp_file and pyhp_pref) or (pyhp_file and not html_file): - from doreah.pyhp import file environ = {} #things we expose to the pyhp pages environ["adminmode"] = adminmode @@ -211,7 +200,7 @@ def static_html(name): environ["filterkeys"], environ["limitkeys"], environ["delimitkeys"], environ["amountkeys"] = uri_to_internal(keys) #response.set_header("Content-Type","application/xhtml+xml") - res = file(pthjoin(WEBFOLDER,name + ".pyhp"),environ) + res = pyhpfile(pthjoin(WEBFOLDER,name + ".pyhp"),environ) log("Generated page " + name + " in " + str(clock.stop()) + "s (PYHP)",module="debug") return res diff --git a/maloja/web/admin.pyhp b/maloja/web/admin.pyhp index 15a359f..a1351f2 100644 --- a/maloja/web/admin.pyhp +++ b/maloja/web/admin.pyhp @@ -96,7 +96,7 @@

Links

Server Setup
- Manual Scrobbling + Manual Scrobbling
Database Maintenance diff --git a/maloja/web/errors/generic.html b/maloja/web/errors/generic.pyhp similarity index 68% rename from maloja/web/errors/generic.html rename to maloja/web/errors/generic.pyhp index 5ade08e..aafa2e1 100644 --- a/maloja/web/errors/generic.html +++ b/maloja/web/errors/generic.pyhp @@ -3,7 +3,8 @@ - Maloja - Error ERROR_CODE + Maloja - Error <pyhp echo="errorcode" /> + @@ -13,7 +14,7 @@
-

Error ERROR_CODE


+

Error


That did not work. Don't ask me why.

From 8cf39adc91ae3f68597701c6b7db204e1cb1a363 Mon Sep 17 00:00:00 2001 From: Krateng Date: Wed, 11 Dec 2019 15:54:59 +0100 Subject: [PATCH 30/60] Version now compares to latest pypi release --- maloja/__init__.py | 2 +- maloja/web/admin.pyhp | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/maloja/__init__.py b/maloja/__init__.py index 3ea1919..6f08058 100644 --- a/maloja/__init__.py +++ b/maloja/__init__.py @@ -7,7 +7,7 @@ author = { "email":"maloja@krateng.dev", "github": "krateng" } -version = 2,1 +version = 2,1,1 versionstr = ".".join(str(n) for n in version) diff --git a/maloja/web/admin.pyhp b/maloja/web/admin.pyhp index a1351f2..70c0307 100644 --- a/maloja/web/admin.pyhp +++ b/maloja/web/admin.pyhp @@ -10,9 +10,20 @@ + + + + + + # this is temporary! all modules need to be converted into partials at some point + html_charts, rep = htmlmodules.module_artistcharts(**amountkeys,**limitkeys) + + + + + + + + +
+
+
+

Artist Charts

View #1 Artists
+ +

+ + +
+ + + + + + + + + + + From 94a20a8818ffff48a6ee06c451d3e6ce78f7d002 Mon Sep 17 00:00:00 2001 From: Krateng Date: Thu, 19 Dec 2019 20:05:50 +0100 Subject: [PATCH 47/60] Added pyhp partials --- maloja/web/partial/charts_artists.pyhp | 76 ++++++++++++++++++++++++++ maloja/web/partial/pagination.pyhp | 59 ++++++++++++++++++++ 2 files changed, 135 insertions(+) create mode 100644 maloja/web/partial/charts_artists.pyhp create mode 100644 maloja/web/partial/pagination.pyhp diff --git a/maloja/web/partial/charts_artists.pyhp b/maloja/web/partial/charts_artists.pyhp new file mode 100644 index 0000000..7bb9582 --- /dev/null +++ b/maloja/web/partial/charts_artists.pyhp @@ -0,0 +1,76 @@ + + + if amountkeys.get("max_") is not None: amountkeys["perpage"],amountkeys["page"] = amountkeys["max_"],0 + firstindex = amountkeys["page"] * amountkeys["perpage"] + lastindex = firstindex + amountkeys["perpage"] + + + + + + + + + + try: + artistslast = db.get_charts_artists(**filterkeys,timerange=limitkeys["timerange"].next(step=-1)) + # create rank association + lastrank = {} + for al in artistslast: + lastrank[al["artist"]] = al["rank"] + for a in artists: + try: + a["delta"] = lastrank[a["artist"]] - a["rank"] + except: + a["delta"] = math.inf + except: + pass + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#🆕↗↘➡
+ + + + + diff --git a/maloja/web/partial/pagination.pyhp b/maloja/web/partial/pagination.pyhp new file mode 100644 index 0000000..2449a98 --- /dev/null +++ b/maloja/web/partial/pagination.pyhp @@ -0,0 +1,59 @@ + + + + + + + + +
+ + + + + 1 + + + | + + + + ... | + + + + + + + + + « + + + + + + + + » + + + + + + + + + | ... + + + + | + + + + + + + +
From f9672a918d5536ea25c4f9850b3f21c9046c2a17 Mon Sep 17 00:00:00 2001 From: Krateng Date: Sun, 22 Dec 2019 15:13:51 +0100 Subject: [PATCH 48/60] Improved and refactored name normalization --- maloja/database.py | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/maloja/database.py b/maloja/database.py index 0448cde..56034a0 100644 --- a/maloja/database.py +++ b/maloja/database.py @@ -49,10 +49,10 @@ Scrobble = namedtuple("Scrobble",["track","timestamp","saved"]) SCROBBLESDICT = {} # timestamps to scrobble mapping STAMPS = [] # sorted #STAMPS_SET = set() # as set for easier check if exists # we use the scrobbles dict for that now -TRACKS_LOWER = [] -ARTISTS_LOWER = [] -ARTIST_SET = set() -TRACK_SET = set() +TRACKS_NORMALIZED = [] +ARTISTS_NORMALIZED = [] +ARTISTS_NORMALIZED_SET = set() +TRACKS_NORMALIZED_SET = set() MEDALS = {} #literally only changes once per year, no need to calculate that on the fly MEDALS_TRACKS = {} @@ -173,16 +173,16 @@ def readScrobble(artists,title,time): def getArtistID(name): obj = name - objlower = name.lower().replace("'","") + obj_normalized = normalize_name(name) - if objlower in ARTIST_SET: - return ARTISTS_LOWER.index(objlower) + if obj_normalized in ARTISTS_NORMALIZED_SET: + return ARTISTS_NORMALIZED.index(obj_normalized) else: i = len(ARTISTS) ARTISTS.append(obj) - ARTIST_SET.add(objlower) - ARTISTS_LOWER.append(objlower) + ARTISTS_NORMALIZED_SET.add(obj_normalized) + ARTISTS_NORMALIZED.append(obj_normalized) # with a new artist added, we might also get new artists that they are credited as cr = coa.getCredited(name) @@ -197,20 +197,22 @@ def getTrackID(artists,title): for a in artists: artistset.add(getArtistID(name=a)) obj = Track(artists=frozenset(artistset),title=title) - objlower = Track(artists=frozenset(artistset),title=title.lower().replace("'","")) + obj_normalized = Track(artists=frozenset(artistset),title=normalize_name(title)) - if objlower in TRACK_SET: - return TRACKS_LOWER.index(objlower) + if obj_normalized in TRACKS_NORMALIZED_SET: + return TRACKS_NORMALIZED.index(obj_normalized) else: i = len(TRACKS) TRACKS.append(obj) - TRACK_SET.add(objlower) - TRACKS_LOWER.append(objlower) + TRACKS_NORMALIZED_SET.add(obj_normalized) + TRACKS_NORMALIZED.append(obj_normalized) return i - - +# function to turn the name into a representation that can be easily compared, ignoring minor differences +remove_symbols = ["'","`","’"] +def normalize_name(name): + return "".join(char for char in name.lower() if char not in remove_symbols) From e2f627a1a07309bbf678108d2a480ff57c10809e Mon Sep 17 00:00:00 2001 From: Krateng Date: Sun, 22 Dec 2019 22:01:01 +0100 Subject: [PATCH 49/60] Minor improvements --- README.md | 2 +- maloja/globalconf.py | 3 +++ maloja/server.py | 31 ++++++++++++++++--------------- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 0936f69..fa08eeb 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Also neat: You can use your **custom artist or track images**. ## Requirements * Python 3.5 or higher -* If you'd like to display images, you will need API keys for [Last.fm](https://www.last.fm/api/account/create) and [Fanart.tv](https://fanart.tv/get-an-api-key/). These are free of charge! +* If you'd like to display images, you will need API keys for [Last.fm](https://www.last.fm/api/account/create) and [Fanart.tv](https://fanart.tv/get-an-api-key/) (you need a project key, not a personal one). These are free of charge! ## How to install diff --git a/maloja/globalconf.py b/maloja/globalconf.py index 8281f62..6389091 100644 --- a/maloja/globalconf.py +++ b/maloja/globalconf.py @@ -23,6 +23,9 @@ def datadir(*args): from doreah import config config( + pyhp={ + "version": 2 + }, logging={ "logfolder": datadir("logs") }, diff --git a/maloja/server.py b/maloja/server.py index ccd7b90..b8e4c19 100755 --- a/maloja/server.py +++ b/maloja/server.py @@ -187,28 +187,29 @@ def static_html(name): # if a pyhp file exists, use this if (pyhp_file and pyhp_pref) or (pyhp_file and not html_file): - environ = {} #things we expose to the pyhp pages - environ["adminmode"] = adminmode - if adminmode: environ["apikey"] = request.cookies.get("apikey") - - # maloja - environ["db"] = database - environ["htmlmodules"] = htmlmodules - environ["htmlgenerators"] = htmlgenerators - environ["malojatime"] = malojatime - environ["utilities"] = utilities - environ["urihandler"] = urihandler - environ["settings"] = settings.get_settings - # external - environ["urllib"] = urllib + #things we expose to the pyhp pages + environ = { + "adminmode":adminmode, + "apikey":request.cookies.get("apikey") if adminmode else None, + # maloja + "db": database, + "htmlmodules": htmlmodules, + "htmlgenerators": htmlgenerators, + "malojatime": malojatime, + "utilities": utilities, + "urihandler": urihandler, + "settings": settings.get_settings, + # external + "urllib": urllib + } # request environ["filterkeys"], environ["limitkeys"], environ["delimitkeys"], environ["amountkeys"] = uri_to_internal(keys) environ["_urikeys"] = keys #temporary! #response.set_header("Content-Type","application/xhtml+xml") res = pyhpfile(pthjoin(WEBFOLDER,name + ".pyhp"),environ) - log("Generated page " + name + " in " + str(clock.stop()) + "s (PYHP)",module="debug") + log("Generated page {name} in {time}s (PYHP)".format(name=name,time=clock.stop()),module="debug") return res # if not, use the old way From ec914d1b40cb4cc32564e27af637d1eec4fa7fe5 Mon Sep 17 00:00:00 2001 From: Krateng Date: Sun, 22 Dec 2019 22:50:13 +0100 Subject: [PATCH 50/60] Removed outdated gitignore files --- maloja/data_files/cache/.gitignore | 3 --- maloja/data_files/cache/dummy | 0 maloja/data_files/clients/.gitignore | 1 - maloja/data_files/images/.gitignore | 3 --- maloja/data_files/settings/.gitignore | 1 - 5 files changed, 8 deletions(-) delete mode 100644 maloja/data_files/cache/.gitignore create mode 100644 maloja/data_files/cache/dummy delete mode 100644 maloja/data_files/clients/.gitignore delete mode 100644 maloja/data_files/images/.gitignore delete mode 100644 maloja/data_files/settings/.gitignore diff --git a/maloja/data_files/cache/.gitignore b/maloja/data_files/cache/.gitignore deleted file mode 100644 index 306625e..0000000 --- a/maloja/data_files/cache/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -* -!.gitignore -!*.info diff --git a/maloja/data_files/cache/dummy b/maloja/data_files/cache/dummy new file mode 100644 index 0000000..e69de29 diff --git a/maloja/data_files/clients/.gitignore b/maloja/data_files/clients/.gitignore deleted file mode 100644 index 77d83b6..0000000 --- a/maloja/data_files/clients/.gitignore +++ /dev/null @@ -1 +0,0 @@ -!example_file.tsv diff --git a/maloja/data_files/images/.gitignore b/maloja/data_files/images/.gitignore deleted file mode 100644 index 306625e..0000000 --- a/maloja/data_files/images/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -* -!.gitignore -!*.info diff --git a/maloja/data_files/settings/.gitignore b/maloja/data_files/settings/.gitignore deleted file mode 100644 index 75d4de9..0000000 --- a/maloja/data_files/settings/.gitignore +++ /dev/null @@ -1 +0,0 @@ -settings.ini From a4abf383a669d77bbd9524a17059529a29465ab9 Mon Sep 17 00:00:00 2001 From: Krateng Date: Sun, 29 Dec 2019 16:16:28 +0100 Subject: [PATCH 51/60] Moved range preferences from cookies to localstorage --- maloja/static/js/rangeselect.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/maloja/static/js/rangeselect.js b/maloja/static/js/rangeselect.js index 83cd9e5..dfadcf7 100644 --- a/maloja/static/js/rangeselect.js +++ b/maloja/static/js/rangeselect.js @@ -1,3 +1,5 @@ +localStorage = window.localStorage; + function showRange(identifier,unit) { // Make all modules disappear modules = document.getElementsByClassName("stat_module_" + identifier); @@ -38,16 +40,25 @@ function showRange(identifier,unit) { function showRangeManual(identifier,unit) { showRange(identifier,unit); - neo.setCookie("rangeselect_" + identifier,unit); + //neo.setCookie("rangeselect_" + identifier,unit); + localStorage.setItem("rangeselect_" + identifier,unit); } document.addEventListener('DOMContentLoaded',function() { for (let type of ["topartists","toptracks","pulse"]) { - var val = neo.getCookie("rangeselect_" + type); - if (val != undefined) { + var val = localStorage.getItem("rangeselect_" + type); + if (val != null) { showRange(type,val); } + else { + var val = neo.getCookie("rangeselect_" + type); + if (val != undefined) { + showRangeManual(type,val); //sets local storage + } + } + + } }) From 137da60ab992ae0678940c601cd163db9aa255a2 Mon Sep 17 00:00:00 2001 From: Krateng Date: Sun, 29 Dec 2019 19:29:11 +0100 Subject: [PATCH 52/60] Fixed faulty import of predefined rules --- maloja/database.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maloja/database.py b/maloja/database.py index 56034a0..6d5f713 100644 --- a/maloja/database.py +++ b/maloja/database.py @@ -853,7 +853,7 @@ def import_rulemodule(**keys): os.remove(datadir("rules/" + filename + ".tsv")) else: log("Importing predefined rulefile " + filename) - os.symlink(datadir("predefined/" + filename + ".tsv"),datadir("rules/" + filename + ".tsv")) + os.symlink(datadir("rules/predefined/" + filename + ".tsv"),datadir("rules/" + filename + ".tsv")) From a6724b9455c89973b0d30a7e4f8e348057990480 Mon Sep 17 00:00:00 2001 From: Krateng Date: Sun, 29 Dec 2019 19:31:05 +0100 Subject: [PATCH 53/60] Added fixartists rule --- maloja/cleanup.py | 7 ++++- .../rules/predefined/krateng_masseffect.tsv | 29 +++++++++++++++++++ maloja/data_files/rules/rules.info | 3 ++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 maloja/data_files/rules/predefined/krateng_masseffect.tsv diff --git a/maloja/cleanup.py b/maloja/cleanup.py index 7d435fd..6145fdb 100644 --- a/maloja/cleanup.py +++ b/maloja/cleanup.py @@ -20,6 +20,7 @@ class CleanerAgent: self.rules_replaceartist = {b.lower():c for [a,b,c,d] in raw if a=="replaceartist"} self.rules_ignoreartist = [b.lower() for [a,b,c,d] in raw if a=="ignoreartist"] self.rules_addartists = {c.lower():(b.lower(),d) for [a,b,c,d] in raw if a=="addartists"} + self.rules_fixartists = {c.lower():b for [a,b,c,d] in raw if a=="fixartists"} self.rules_artistintitle = {b.lower():c for [a,b,c,d] in raw if a=="artistintitle"} #self.rules_regexartist = [[b,c] for [a,b,c,d] in raw if a=="regexartist"] #self.rules_regextitle = [[b,c] for [a,b,c,d] in raw if a=="regextitle"] @@ -38,7 +39,6 @@ class CleanerAgent: self.checksums = utilities.checksumTSV(datadir("rules")) - def fullclean(self,artist,title): artists = self.parseArtists(self.removespecial(artist)) title = self.parseTitle(self.removespecial(title)) @@ -50,6 +50,11 @@ class CleanerAgent: allartists = allartists.split("␟") if set(reqartists).issubset(set(a.lower() for a in artists)): artists += allartists + elif title.lower() in self.rules_fixartists: + allartists = self.rules_fixartists[title.lower()] + allartists = allartists.split("␟") + if len(set(a.lower() for a in allartists) & set(a.lower() for a in artists)) > 0: + artists = allartists artists = list(set(artists)) artists.sort() diff --git a/maloja/data_files/rules/predefined/krateng_masseffect.tsv b/maloja/data_files/rules/predefined/krateng_masseffect.tsv new file mode 100644 index 0000000..fbcc2e8 --- /dev/null +++ b/maloja/data_files/rules/predefined/krateng_masseffect.tsv @@ -0,0 +1,29 @@ +# NAME: Mass Effect Soundtrack +# DESC: Sets correct artists for the Mass Effect soundtracks + +# 1 +fixartists Jack Wall␟Sam Hulick Mass Effect Theme +fixartists Richard Jacques␟Jack Wall␟Sam Hulick Spectre Induction +fixartists Richard Jacques␟Jack Wall␟Sam Hulick The Citadel +fixartists Richard Jacques␟Jack Wall The Thorian +fixartists Richard Jacques␟Jack Wall␟Sam Hulick The Alien Queen +fixartists Jack Wall␟Sam Hulick Breeding Ground +fixartists Jack Wall␟Sam Hulick In Pursuit of Saren +fixartists David Kates␟Jack Wall␟Sam Hulick Infusion +fixartists David Kates␟Jack Wall␟Sam Hulick Final Assault + +# 2 +fixartists Jack Wall␟David Kates Thane +fixartists Jack Wall␟Sam Hulick The Normandy Attacked +fixartists Jack Wall␟Brian DiDomenico The Collector Base +fixartists Jack Wall␟Sam Hulick New Worlds + +# 3 +fixartists Sascha Dikiciyan␟Cris Velasco The Ardat-Yakshi +fixartists Sascha Dikiciyan␟Cris Velasco Rannoch +fixartists Sascha Dikiciyan␟Cris Velasco I'm Sorry +fixartists Sascha Dikiciyan␟Cris Velasco The Scientists +fixartists Sascha Dikiciyan␟Cris Velasco Aralakh Company +fixartists Sascha Dikiciyan␟Cris Velasco Prothean Beacon +fixartists Sascha Dikiciyan␟Cris Velasco Reaper Chase +fixartists Clint Mansell␟Sam Hulick An End, Once and For All diff --git a/maloja/data_files/rules/rules.info b/maloja/data_files/rules/rules.info index 239837c..46fc7d3 100644 --- a/maloja/data_files/rules/rules.info +++ b/maloja/data_files/rules/rules.info @@ -20,6 +20,9 @@ The first column defines the type of the rule: Second column is artists that need to be already present for this rule to apply Third column is the song title Fourth column are artists that shoud be added, separated by ␟ + fixartists Similar as above, but simply specifies that if any of the given artists is present, all (and no others) should be present + Second column is correct artists + Third column is the song title artistintitle Defines title strings that imply the presence of another artist. Second column is the string Third column is the artist or artists From 33cea26a791e224625aa9bc523e2cf90e39c8a50 Mon Sep 17 00:00:00 2001 From: Krateng Date: Mon, 30 Dec 2019 15:28:48 +0100 Subject: [PATCH 54/60] More PYHP conversion --- maloja/__init__.py | 3 +- maloja/web/artist.pyhp | 10 +-- maloja/web/charts_artists.pyhp | 4 +- maloja/web/charts_tracks.pyhp | 47 ++++++++++ maloja/web/partial/charts_artists.pyhp | 4 +- maloja/web/partial/charts_tracks.pyhp | 70 +++++++++++++++ maloja/web/partial/link_track_scrobbles.pyhp | 8 ++ maloja/web/partial/pagination.pyhp | 85 ++++++++++--------- maloja/web/partial/pulse.pyhp | 8 +- scrobblers/maloja-scrobbler.zip | Bin 28203 -> 29156 bytes 10 files changed, 185 insertions(+), 54 deletions(-) create mode 100644 maloja/web/charts_tracks.pyhp create mode 100644 maloja/web/partial/charts_tracks.pyhp create mode 100644 maloja/web/partial/link_track_scrobbles.pyhp diff --git a/maloja/__init__.py b/maloja/__init__.py index 758a375..3f393c1 100644 --- a/maloja/__init__.py +++ b/maloja/__init__.py @@ -25,8 +25,7 @@ resources = [ "web/*", "static/*/*", "data_files/*/*", - "data_files/*/*/*", - "data_files/.doreah" + "data_files/*/*/*" ] commands = { diff --git a/maloja/web/artist.pyhp b/maloja/web/artist.pyhp index 422c0aa..cab590b 100644 --- a/maloja/web/artist.pyhp +++ b/maloja/web/artist.pyhp @@ -112,9 +112,9 @@ - - - + + +
@@ -133,9 +133,7 @@ - - - +
diff --git a/maloja/web/charts_artists.pyhp b/maloja/web/charts_artists.pyhp index b79355e..4e85d87 100644 --- a/maloja/web/charts_artists.pyhp +++ b/maloja/web/charts_artists.pyhp @@ -36,7 +36,9 @@
- + + + diff --git a/maloja/web/charts_tracks.pyhp b/maloja/web/charts_tracks.pyhp new file mode 100644 index 0000000..84715a8 --- /dev/null +++ b/maloja/web/charts_tracks.pyhp @@ -0,0 +1,47 @@ + + + + + + Maloja - Track Charts + + + + + + + # this is temporary! all modules need to be converted into partials at some point + html_charts, rep = htmlmodules.module_trackcharts(**amountkeys,**limitkeys) + + + + + + + + +
+
+
+

Track Charts

View #1 Tracks
+ + by + + +

+ + +
+ + + + + + + + + + + + + diff --git a/maloja/web/partial/charts_artists.pyhp b/maloja/web/partial/charts_artists.pyhp index 7bb9582..5e02895 100644 --- a/maloja/web/partial/charts_artists.pyhp +++ b/maloja/web/partial/charts_artists.pyhp @@ -63,8 +63,8 @@ else: - - + + diff --git a/maloja/web/partial/charts_tracks.pyhp b/maloja/web/partial/charts_tracks.pyhp new file mode 100644 index 0000000..39c3232 --- /dev/null +++ b/maloja/web/partial/charts_tracks.pyhp @@ -0,0 +1,70 @@ + + + if amountkeys.get("max_") is not None: amountkeys["perpage"],amountkeys["page"] = amountkeys["max_"],0 + firstindex = amountkeys["page"] * amountkeys["perpage"] + lastindex = firstindex + amountkeys["perpage"] + + + + + + + + + + try: + trackslast = db.get_charts_tracks(**kwargs_filter,timerange=kwargs_time["timerange"].next(step=-1)) + # create rank association + lastrank = {} + for tl in trackslast: + lastrank[(*tl["track"]["artists"],tl["track"]["title"])] = tl["rank"] + for t in tracks: + try: + t["delta"] = lastrank[(*t["track"]["artists"],t["track"]["title"])] - t["rank"] + except: + t["delta"] = math.inf + except: + pass + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#🆕↗↘➡
+ + + + + diff --git a/maloja/web/partial/link_track_scrobbles.pyhp b/maloja/web/partial/link_track_scrobbles.pyhp new file mode 100644 index 0000000..e990796 --- /dev/null +++ b/maloja/web/partial/link_track_scrobbles.pyhp @@ -0,0 +1,8 @@ + + + + + +
+
+
diff --git a/maloja/web/partial/pagination.pyhp b/maloja/web/partial/pagination.pyhp index 2449a98..73d581b 100644 --- a/maloja/web/partial/pagination.pyhp +++ b/maloja/web/partial/pagination.pyhp @@ -1,5 +1,4 @@ - - + @@ -8,52 +7,54 @@
- - - - 1 - - - | - + + + + + 1 + + + | + - - ... | - + + ... | + - - - - - - - « - + + + + + + + « + - - - + + + - - » - - - - - - + + » + + + + + + - - | ... - + + | ... + - - | - - - - - + + | + + + + + +
diff --git a/maloja/web/partial/pulse.pyhp b/maloja/web/partial/pulse.pyhp index 778c645..7396ea4 100644 --- a/maloja/web/partial/pulse.pyhp +++ b/maloja/web/partial/pulse.pyhp @@ -1,5 +1,5 @@ - if amountkeys["max_"] is not None: amountkeys["perpage"],amountkeys["page"] = amountkeys["max_"],0 + if amountkeys.get("max_") is not None: amountkeys["perpage"],amountkeys["page"] = amountkeys["max_"],0 firstindex = amountkeys["page"] * amountkeys["perpage"] lastindex = firstindex + amountkeys["perpage"] @@ -23,3 +23,9 @@ + + + + + + diff --git a/scrobblers/maloja-scrobbler.zip b/scrobblers/maloja-scrobbler.zip index 709e32e514d6e2f81556ed4c62028bc1109c786f..c09068600d44e597f03c985763d577d4a574c4b8 100644 GIT binary patch delta 5598 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 Date: Tue, 31 Dec 2019 15:58:44 +0100 Subject: [PATCH 55/60] Added pyhp partials for tile charts --- maloja/static/less/maloja.less | 6 +++ maloja/web/charts_artists.pyhp | 12 +++-- maloja/web/charts_tracks.pyhp | 15 ++++-- maloja/web/partial/charts_artists_tiles.pyhp | 49 +++++++++++++++++++ maloja/web/partial/charts_tracks_tiles.pyhp | 51 ++++++++++++++++++++ 5 files changed, 125 insertions(+), 8 deletions(-) create mode 100644 maloja/web/partial/charts_artists_tiles.pyhp create mode 100644 maloja/web/partial/charts_tracks_tiles.pyhp diff --git a/maloja/static/less/maloja.less b/maloja/static/less/maloja.less index 9f97c19..9fdb66d 100644 --- a/maloja/static/less/maloja.less +++ b/maloja/static/less/maloja.less @@ -698,6 +698,12 @@ table.tiles_3x3 td { width:33.333%; font-size:70% } +table.tiles_4x4 td { + font-size:50% +} +table.tiles_5x5 td { + font-size:40% +} diff --git a/maloja/web/charts_artists.pyhp b/maloja/web/charts_artists.pyhp index 4e85d87..a2962c3 100644 --- a/maloja/web/charts_artists.pyhp +++ b/maloja/web/charts_artists.pyhp @@ -10,15 +10,18 @@ - # this is temporary! all modules need to be converted into partials at some point - html_charts, rep = htmlmodules.module_artistcharts(**amountkeys,**limitkeys) + try: + top = db.get_charts_artists(**filterkeys,**limitkeys)[0]["artist"] + img = utilities.getArtistImage(top) + except: + img = ""
-
+

Artist Charts

View #1 Artists
@@ -32,8 +35,9 @@ - + + diff --git a/maloja/web/charts_tracks.pyhp b/maloja/web/charts_tracks.pyhp index 84715a8..9850375 100644 --- a/maloja/web/charts_tracks.pyhp +++ b/maloja/web/charts_tracks.pyhp @@ -10,15 +10,21 @@ - # this is temporary! all modules need to be converted into partials at some point - html_charts, rep = htmlmodules.module_trackcharts(**amountkeys,**limitkeys) + try: + try: + img = utilities.getArtistImage(filterkeys['artist']) + except: + top = db.get_charts_tracks(**filterkeys,**limitkeys)[0]["track"] + img = utilities.getTrackImage(**top) + except: + img = ""
-
+

Track Charts

View #1 Tracks
@@ -35,8 +41,9 @@ - + + diff --git a/maloja/web/partial/charts_artists_tiles.pyhp b/maloja/web/partial/charts_artists_tiles.pyhp new file mode 100644 index 0000000..da09e74 --- /dev/null +++ b/maloja/web/partial/charts_artists_tiles.pyhp @@ -0,0 +1,49 @@ + + num_levels = 3 + + + + + + + + + + + + + + + + + +
+ + + + + try: + entry = next(artists_iterator) + artist = entry['artist'] + rank = entry['rank'] + except: + artist = None + + + + + + + + + + +
+ + # + + + + +
diff --git a/maloja/web/partial/charts_tracks_tiles.pyhp b/maloja/web/partial/charts_tracks_tiles.pyhp new file mode 100644 index 0000000..915b393 --- /dev/null +++ b/maloja/web/partial/charts_tracks_tiles.pyhp @@ -0,0 +1,51 @@ + + num_levels = 3 + + + + + + + + + + + + + + + + + +
+ + + + + try: + entry = next(tracks_iterator) + track = entry['track'] + artists = track['artists'] + title = track['title'] + rank = entry['rank'] + except: + track = None + + + + + + + + + + +
+ + # + + + + +
From 95534f0f4adce83d187726695f43802a3a61abf6 Mon Sep 17 00:00:00 2001 From: Krateng Date: Fri, 10 Jan 2020 04:02:43 +0100 Subject: [PATCH 56/60] Removed logfile output for subprocess calling to avoid zombification --- maloja/controller.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/maloja/controller.py b/maloja/controller.py index af49ea0..e07a9fd 100755 --- a/maloja/controller.py +++ b/maloja/controller.py @@ -104,9 +104,8 @@ def getInstanceSupervisor(): def start(): setup() try: - with open(datadir("logs/stderr.log"),"w") as logf: - p = subprocess.Popen(["python3","-m","maloja.server"],stdout=subprocess.DEVNULL,stderr=logf) - sp = subprocess.Popen(["python3","-m","maloja.supervisor"],stdout=subprocess.DEVNULL,stderr=logf) + p = subprocess.Popen(["python3","-m","maloja.server"],stdout=subprocess.DEVNULL,stderr=subprocess.DEVNULL) + sp = subprocess.Popen(["python3","-m","maloja.supervisor"],stdout=subprocess.DEVNULL,stderr=subprocess.DEVNULL) print(col["green"]("Maloja started!") + " PID: " + str(p.pid)) from doreah import settings From fbce600c4edd2b530e6673b89513b1a26b068b64 Mon Sep 17 00:00:00 2001 From: Krateng Date: Fri, 10 Jan 2020 04:06:34 +0100 Subject: [PATCH 57/60] Various --- maloja/__init__.py | 2 +- maloja/database.py | 4 +- maloja/static/js/search.js | 2 +- maloja/static/less/maloja.less | 23 +++++++++ maloja/web/summary.pyhp | 85 ++++++++++++++++++++++++++++++++++ 5 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 maloja/web/summary.pyhp diff --git a/maloja/__init__.py b/maloja/__init__.py index 3f393c1..c794de0 100644 --- a/maloja/__init__.py +++ b/maloja/__init__.py @@ -7,7 +7,7 @@ author = { "email":"maloja@krateng.dev", "github": "krateng" } -version = 2,2,0 +version = 2,2,1 versionstr = ".".join(str(n) for n in version) diff --git a/maloja/database.py b/maloja/database.py index 6d5f713..974389a 100644 --- a/maloja/database.py +++ b/maloja/database.py @@ -208,11 +208,13 @@ def getTrackID(artists,title): TRACKS_NORMALIZED.append(obj_normalized) return i +import unicodedata # function to turn the name into a representation that can be easily compared, ignoring minor differences remove_symbols = ["'","`","’"] def normalize_name(name): - return "".join(char for char in name.lower() if char not in remove_symbols) + return "".join(char for char in unicodedata.normalize('NFD',name.lower()) + if char not in remove_symbols and unicodedata.category(char) != 'Mn') diff --git a/maloja/static/js/search.js b/maloja/static/js/search.js index eb96011..4aeef8f 100644 --- a/maloja/static/js/search.js +++ b/maloja/static/js/search.js @@ -16,7 +16,7 @@ function search(searchfield) { function html_to_fragment(html) { var template = document.createElement("template"); - template.innerHTML = resulthtml; + template.innerHTML = html; return template.content; } diff --git a/maloja/static/less/maloja.less b/maloja/static/less/maloja.less index 9fdb66d..7dc7ffe 100644 --- a/maloja/static/less/maloja.less +++ b/maloja/static/less/maloja.less @@ -706,6 +706,29 @@ table.tiles_5x5 td { } +.summary_rank { + background-size:cover; + background-position:center; + display: inline-block; +} + +.summary_rank_1 { + width:300px; + height:300px; + border: 6px solid gold; +} +.summary_rank_2 { + width:250px; + height:250px; + border: 4px solid silver; +} +.summary_rank_3 { + width:240px; + height:240px; + border: 3px solid #cd7f32; +} + + /* diff --git a/maloja/web/summary.pyhp b/maloja/web/summary.pyhp new file mode 100644 index 0000000..e195336 --- /dev/null +++ b/maloja/web/summary.pyhp @@ -0,0 +1,85 @@ + + + + + + Maloja - Summary + + + + + + + + + + + + +
+
+
+

Summary


+ + + +

+ + +
+ + + + + + + + + + + + + + + + + +
+ +

Artists

+
+ +

Tracks

+
+ + + entry = type[r] + isartist = type is artists + entity = entry["artist"] if isartist else entry["track"] + image = utilities.getArtistImage(entity,fast=True) if isartist else utilities.getTrackImage(entity['artists'],entity['title'],fast=True) + rank = entry["rank"] + + + + +
+ +
+ + +
+
+ + + + + + From c518627670f5614a2b9931471337a1a6b2ee344f Mon Sep 17 00:00:00 2001 From: Krateng Date: Fri, 10 Jan 2020 22:51:50 +0100 Subject: [PATCH 58/60] Removed some log output --- maloja/__init__.py | 2 +- maloja/controller.py | 1 + maloja/server.py | 1 - maloja/supervisor.py | 1 - 4 files changed, 2 insertions(+), 3 deletions(-) diff --git a/maloja/__init__.py b/maloja/__init__.py index c794de0..102edca 100644 --- a/maloja/__init__.py +++ b/maloja/__init__.py @@ -7,7 +7,7 @@ author = { "email":"maloja@krateng.dev", "github": "krateng" } -version = 2,2,1 +version = 2,2,2 versionstr = ".".join(str(n) for n in version) diff --git a/maloja/controller.py b/maloja/controller.py index e07a9fd..8c120df 100755 --- a/maloja/controller.py +++ b/maloja/controller.py @@ -166,6 +166,7 @@ def backuphere(): def update(): os.system("pip3 install malojaserver --upgrade --no-cache-dir") + restart() def fixdb(): from .fixexisting import fix diff --git a/maloja/server.py b/maloja/server.py index b8e4c19..b012bdc 100755 --- a/maloja/server.py +++ b/maloja/server.py @@ -88,7 +88,6 @@ def mainpage(): @webserver.error(505) def customerror(error): code = int(str(error).split(",")[0][1:]) - log("HTTP Error: " + str(code),module="error") if os.path.exists(pthjoin(WEBFOLDER,"errors",str(code) + ".pyhp")): return pyhpfile(pthjoin(WEBFOLDER,"errors",str(code) + ".pyhp"),{"errorcode":code}) diff --git a/maloja/supervisor.py b/maloja/supervisor.py index a84066f..a1e5cfe 100644 --- a/maloja/supervisor.py +++ b/maloja/supervisor.py @@ -18,7 +18,6 @@ while True: try: output = subprocess.check_output(["pidof","Maloja"]) pid = int(output) - log("Maloja is running, PID " + str(pid),module="supervisor") except: log("Maloja is not running, restarting...",module="supervisor") if get_settings("UPDATE_AFTER_CRASH"): From a2cc27ddd46c7cf9959f33478eac396e18f90055 Mon Sep 17 00:00:00 2001 From: Krateng Date: Fri, 10 Jan 2020 23:02:51 +0100 Subject: [PATCH 59/60] Fixed requirements --- maloja/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/maloja/__init__.py b/maloja/__init__.py index 102edca..d1e15a4 100644 --- a/maloja/__init__.py +++ b/maloja/__init__.py @@ -7,14 +7,14 @@ author = { "email":"maloja@krateng.dev", "github": "krateng" } -version = 2,2,2 +version = 2,2,3 versionstr = ".".join(str(n) for n in version) requires = [ "bottle>=0.12.16", "waitress>=1.3", - "doreah>=1.4", + "doreah>=1.4.5", "nimrodel>=0.6.3", "setproctitle>=1.1.10", "wand>=0.5.4", From 218c7eb2fda9706fbf5a654461171e22dec4fdf4 Mon Sep 17 00:00:00 2001 From: Krateng Date: Tue, 21 Jan 2020 22:00:42 +0100 Subject: [PATCH 60/60] Various --- maloja/data_files/settings/default.ini | 4 +-- maloja/external.py | 2 -- maloja/web/partial/pagination.pyhp | 36 +++++--------------------- 3 files changed, 8 insertions(+), 34 deletions(-) diff --git a/maloja/data_files/settings/default.ini b/maloja/data_files/settings/default.ini index 00a6774..1576615 100644 --- a/maloja/data_files/settings/default.ini +++ b/maloja/data_files/settings/default.ini @@ -60,6 +60,6 @@ NAME = None [Misc] EXPERIMENTAL_FEATURES = no -USE_PYHP = no -FEDERATION = yes +USE_PYHP = no #not recommended at the moment +FEDERATION = yes #does nothing yet UPDATE_AFTER_CRASH = no #update when server is automatically restarted diff --git a/maloja/external.py b/maloja/external.py index e2bb309..65efaaf 100644 --- a/maloja/external.py +++ b/maloja/external.py @@ -63,7 +63,6 @@ if get_settings("SPOTIFY_API_ID") not in [None,"ASK"] and get_settings("SPOTIFY_ def api_request_artist(artist): for api in apis_artists: if True: - log("API: " + api["name"] + "; Image request: " + artist,module="external") try: artiststring = urllib.parse.quote(artist) var = artiststring @@ -99,7 +98,6 @@ def api_request_track(track): artists, title = track for api in apis_tracks: if True: - log("API: " + api["name"] + "; Image request: " + "/".join(artists) + " - " + title,module="external") try: artiststring = urllib.parse.quote(", ".join(artists)) titlestring = urllib.parse.quote(title) diff --git a/maloja/web/partial/pagination.pyhp b/maloja/web/partial/pagination.pyhp index 73d581b..9066375 100644 --- a/maloja/web/partial/pagination.pyhp +++ b/maloja/web/partial/pagination.pyhp @@ -9,25 +9,13 @@ - - - 1 - - - | + 1 | - - ... | - + ... | - - - - - - « + « @@ -35,25 +23,13 @@ - » - - - - - + » - - | ... - + | ... - | - - - - - + |