From f6f1db6eacc8412626b17e7ed37ceb3c709aee11 Mon Sep 17 00:00:00 2001 From: krateng Date: Sat, 28 Oct 2023 22:50:12 +0200 Subject: [PATCH] Added associated UI distinction for artist pulse --- dev/releases/3.2.yml | 1 + maloja/database/__init__.py | 7 ++++++- maloja/database/sqldb.py | 9 ++++----- maloja/web/jinja/partials/pulse.jinja | 9 ++++++++- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/dev/releases/3.2.yml b/dev/releases/3.2.yml index 1896894..d6d27db 100644 --- a/dev/releases/3.2.yml +++ b/dev/releases/3.2.yml @@ -9,6 +9,7 @@ minor_release_name: "Nicole" - "[Feature] Added UI for track-artist, track-album and album-artist association" - "[Feature] Added inline UI for association and merging in chart lists" - "[Feature] Added UI selector for including associated artists" + - "[Feature] Added UI distinction for associated scrobbles in chart bars" - "[Performance] Improved image rendering" - "[Performance] Optimized several database calls" - "[Bugfix] Fixed configuration of time format" diff --git a/maloja/database/__init__.py b/maloja/database/__init__.py index d3b56ef..1bc6eb1 100644 --- a/maloja/database/__init__.py +++ b/maloja/database/__init__.py @@ -471,7 +471,12 @@ def get_pulse(dbconn=None,**keys): continue res = get_scrobbles_num(timerange=rng,**{k:keys[k] for k in keys if k != 'timerange'},dbconn=dbconn) - results.append({"range":rng,"scrobbles":res}) + if keys.get('artist') and keys.get('associated',False): + res_real = get_scrobbles_num(timerange=rng,**{k:keys[k] for k in keys if k not in ['timerange','associated']},associated=False,dbconn=dbconn) + # this isnt really efficient, we could do that in one db call, but i dont wanna reorganize rn + else: + res_real = res + results.append({"range":rng,"scrobbles":res,"real_scrobbles":res_real}) return results diff --git a/maloja/database/sqldb.py b/maloja/database/sqldb.py index 3e6f52a..0748170 100644 --- a/maloja/database/sqldb.py +++ b/maloja/database/sqldb.py @@ -853,8 +853,7 @@ def get_scrobbles_of_artist(artist,since=None,to=None,resolve_references=True,li jointable = sql.join(DB['scrobbles'],DB['trackartists'],DB['scrobbles'].c.track_id == DB['trackartists'].c.track_id) op = jointable.select().where( - DB['scrobbles'].c.timestamp<=to, - DB['scrobbles'].c.timestamp>=since, + DB['scrobbles'].c.timestamp.between(since,to), DB['trackartists'].c.artist_id.in_(artist_ids) ) if reverse: @@ -870,9 +869,9 @@ def get_scrobbles_of_artist(artist,since=None,to=None,resolve_references=True,li seen = set() filtered_result = [] for row in result: - if row.timestamp not in seen: - filtered_result.append(row) - seen.add(row.timestamp) + if row.timestamp not in seen: + filtered_result.append(row) + seen.add(row.timestamp) result = filtered_result diff --git a/maloja/web/jinja/partials/pulse.jinja b/maloja/web/jinja/partials/pulse.jinja index aea2c60..fb1f18b 100644 --- a/maloja/web/jinja/partials/pulse.jinja +++ b/maloja/web/jinja/partials/pulse.jinja @@ -15,7 +15,14 @@ {{ links.link_scrobbles([filterkeys,{'timerange':thisrange}],amount=t.scrobbles) }} - {{ links.link_scrobbles([filterkeys,{'timerange':thisrange}],percent=t.scrobbles*100/maxbar) }} + {% if 'artist' in filterkeys and filterkeys.get('associated') %} + {{ links.link_scrobbles([{'artist':filterkeys.artist,'associated':False,'timerange':thisrange}],percent=t.real_scrobbles*100/maxbar) }} + {%- if t.real_scrobbles != t.scrobbles -%} + {{ links.link_scrobbles([{'artist':filterkeys.artist,'associated':True,'timerange':thisrange}],percent=(t.scrobbles-t.real_scrobbles)*100/maxbar) }} + {%- endif %} + {% else %} + {{ links.link_scrobbles([filterkeys,{'timerange':thisrange}],percent=t.scrobbles*100/maxbar) }} + {% endif %} {% endfor %}