diff --git a/README.md b/README.md index ae4c17c..1ba0d76 100644 --- a/README.md +++ b/README.md @@ -97,7 +97,7 @@ You must publish a port on your host machine to bind to the container's web port An example of a minimum run configuration to access maloja via `localhost:42010`: ```console - docker run -p 42010:42010 -v $PWD/malojadata:/mljdata -e MALOJA_DATA_DIRECTORY=/mljdata maloja + docker run -p 42010:42010 -v $PWD/malojadata:/mljdata -e MALOJA_DATA_DIRECTORY=/mljdata krateng/maloja ``` ### Extras diff --git a/dev/releases/3.0.yml b/dev/releases/3.0.yml index 917723a..3cb6289 100644 --- a/dev/releases/3.0.yml +++ b/dev/releases/3.0.yml @@ -4,6 +4,7 @@ minor_release_name: "Yeonhee" notes: - "[Architecture] Switched to SQLite for main database" - "[Architecture] Switched to SQLite for artwork cache" + - "[Feature] Added scrobble deletion from web interface" 3.0.1: commit: "700b81217cb585df631d6f069243c56074cd1b71" notes: @@ -27,3 +28,11 @@ minor_release_name: "Yeonhee" - "[Feature] Added better feedback to native API endpoints" - "[Bugfix] Fixed native API receiving superfluous keywords" - "[Bugfix] Fixed crash when importing scrobbles with artists with similar names" +3.0.5: + commit: "fe21894c5ecf3a53c9c5c00453abfc7f41c6a83e" + notes: + - "[Feature] Added notification system for web interface" + - "[Bugfix] Fixed crash when encountering error in Lastfm import" +3.0.6: + notes: + - "[Bugfix] Better parsing of featuring artists" diff --git a/maloja/__pkginfo__.py b/maloja/__pkginfo__.py index 38f9714..ecf899c 100644 --- a/maloja/__pkginfo__.py +++ b/maloja/__pkginfo__.py @@ -4,7 +4,7 @@ # you know what f*ck it # this is hardcoded for now because of that damn project / package name discrepancy # i'll fix it one day -VERSION = "3.0.4" +VERSION = "3.0.5" HOMEPAGE = "https://github.com/krateng/maloja" diff --git a/maloja/cleanup.py b/maloja/cleanup.py index f8b6623..eb97528 100644 --- a/maloja/cleanup.py +++ b/maloja/cleanup.py @@ -109,9 +109,9 @@ class CleanerAgent: for d in self.delimiters_feat: - if re.match(r"(.*) \(" + d + " (.*)\)",a) is not None: - return self.parseArtists(re.sub(r"(.*) \(" + d + " (.*)\)",r"\1",a)) + \ - self.parseArtists(re.sub(r"(.*) \(" + d + " (.*)\)",r"\2",a)) + if re.match(r"(.*) [\(\[]" + d + " (.*)[\)\]]",a) is not None: + return self.parseArtists(re.sub(r"(.*) [\(\[]" + d + " (.*)[\)\]]",r"\1",a)) + \ + self.parseArtists(re.sub(r"(.*) [\(\[]" + d + " (.*)[\)\]]",r"\2",a)) @@ -141,9 +141,11 @@ class CleanerAgent: t = t.replace("[","(").replace("]",")") - t = re.sub(r" \(as made famous by .*?\)","",t) - t = re.sub(r" \(originally by .*?\)","",t) - t = re.sub(r" \(.*?Remaster.*?\)","",t) + # we'll leave these matching all bracket types so future changes + # won't require readaption + t = re.sub(r" [\(\[]as made famous by .*?[\)\]]","",t) + t = re.sub(r" [\(\[]originally by .*?[\)\]]","",t) + t = re.sub(r" [\(\[].*?Remaster.*?[\)\]]","",t) for s in malojaconfig["REMOVE_FROM_TITLE"]: if s in t: @@ -156,9 +158,9 @@ class CleanerAgent: def parseTitleForArtists(self,t): for d in self.delimiters_feat: - if re.match(r"(.*) \(" + d + " (.*?)\)",t) is not None: - (title,artists) = self.parseTitleForArtists(re.sub(r"(.*) \(" + d + " (.*?)\)",r"\1",t)) - artists += self.parseArtists(re.sub(r"(.*) \(" + d + " (.*?)\).*",r"\2",t)) + if re.match(r"(.*) [\(\[]" + d + " (.*?)[\)\]]",t) is not None: + (title,artists) = self.parseTitleForArtists(re.sub(r"(.*) [\(\[]" + d + " (.*?)[\)\]]",r"\1",t)) + artists += self.parseArtists(re.sub(r"(.*) [\(\[]" + d + " (.*?)[\)\]].*",r"\2",t)) return (title,artists) if re.match(r"(.*) - " + d + " (.*)",t) is not None: (title,artists) = self.parseTitleForArtists(re.sub(r"(.*) - " + d + " (.*)",r"\1",t)) diff --git a/maloja/proccontrol/tasks/import_scrobbles.py b/maloja/proccontrol/tasks/import_scrobbles.py index 6eb1b7e..fd5a567 100644 --- a/maloja/proccontrol/tasks/import_scrobbles.py +++ b/maloja/proccontrol/tasks/import_scrobbles.py @@ -268,11 +268,17 @@ def parse_lastfm(inputf): with open(inputf,'r',newline='') as inputfd: reader = csv.reader(inputfd) + line = 0 for row in reader: + line += 1 try: artist,album,title,time = row except ValueError: - yield ('FAIL',None,f"{row} does not look like a valid entry. Scrobble not imported.") + yield ('FAIL',None,f"{row} (Line {line}) does not look like a valid entry. Scrobble not imported.") + continue + + if time == '': + yield ('FAIL',None,f"{row} (Line {line}) is missing a timestamp.") continue try: @@ -287,7 +293,7 @@ def parse_lastfm(inputf): 'scrobble_duration':None },'') except Exception as e: - yield ('FAIL',None,f"{entry} could not be parsed. Scrobble not imported. ({repr(e)})") + yield ('FAIL',None,f"{row} (Line {line}) could not be parsed. Scrobble not imported. ({repr(e)})") continue diff --git a/maloja/web/jinja/abstracts/base.jinja b/maloja/web/jinja/abstracts/base.jinja index 8e1645c..aa9cf33 100644 --- a/maloja/web/jinja/abstracts/base.jinja +++ b/maloja/web/jinja/abstracts/base.jinja @@ -18,6 +18,7 @@ + @@ -49,6 +50,9 @@ {% endblock %} {% endblock %} +
+ +