mirror of
https://github.com/Dvorinka/swingmusic-extended.git
synced 2026-06-03 20:13:02 +00:00
86fabcd5e3
+ merge main.py and manage.py + move start logic to swingmusic/__main__.py + add a run.py on the project root
95 lines
2.9 KiB
Python
95 lines
2.9 KiB
Python
from swingmusic.db.userdata import LibDataTable, FavoritesTable, ScrobbleTable
|
|
from swingmusic.store.albums import AlbumStore
|
|
from swingmusic.store.artists import ArtistStore
|
|
from swingmusic.store.tracks import TrackStore
|
|
|
|
|
|
from typing import Any
|
|
|
|
|
|
def map_scrobble_data():
|
|
"""
|
|
Maps scrobble data to the in-memory stores.
|
|
|
|
The scrobble data is loaded from the database and grouped by trackhash.
|
|
The album and artist scrobble data (for those tracks) are then incremented based on the data.
|
|
"""
|
|
records = ScrobbleTable.get_all(0, None)
|
|
|
|
# group records by trackhash
|
|
grouped: dict[str, dict[str, Any]] = {}
|
|
|
|
for record in records:
|
|
# aggregate playcount, playduration and lastplayed
|
|
item = grouped.setdefault(record.trackhash, {})
|
|
item["playcount"] = item.get("playcount", 0) + 1
|
|
item["playduration"] = item.get("playduration", 0) + record.duration
|
|
item["lastplayed"] = max(item.get("lastplayed", 0), record.timestamp)
|
|
|
|
# increment playcount, playduration and lastplayed for albums and artists
|
|
for trackhash, data in grouped.items():
|
|
track = TrackStore.trackhashmap.get(trackhash)
|
|
|
|
if track is None:
|
|
continue
|
|
|
|
track.increment_playcount(
|
|
data["playduration"], data["lastplayed"], data["playcount"]
|
|
)
|
|
|
|
album = AlbumStore.albummap.get(track.tracks[0].albumhash)
|
|
if album:
|
|
album.increment_playcount(
|
|
data["playduration"], data["lastplayed"], data["playcount"]
|
|
)
|
|
|
|
for artisthash in track.tracks[0].artisthashes:
|
|
artist = ArtistStore.artistmap.get(artisthash)
|
|
if artist:
|
|
artist.increment_playcount(
|
|
data["playduration"], data["lastplayed"], data["playcount"]
|
|
)
|
|
|
|
|
|
def map_favorites():
|
|
"""
|
|
Maps favorites data to the in-memory stores.
|
|
"""
|
|
favorites = FavoritesTable.get_all()
|
|
|
|
for entry in favorites:
|
|
if entry.type == "album":
|
|
album = AlbumStore.albummap.get(entry.hash)
|
|
if album:
|
|
album.toggle_favorite_user(entry.userid)
|
|
|
|
elif entry.type == "artist":
|
|
artist = ArtistStore.artistmap.get(entry.hash)
|
|
if artist:
|
|
artist.toggle_favorite_user(entry.userid)
|
|
|
|
elif entry.type == "track":
|
|
track = TrackStore.trackhashmap.get(entry.hash)
|
|
if track:
|
|
track.toggle_favorite_user(entry.userid)
|
|
|
|
|
|
def map_artist_colors():
|
|
colors = LibDataTable.get_all_colors(type="artist")
|
|
|
|
for color in colors:
|
|
artist = ArtistStore.artistmap.get(color["itemhash"])
|
|
|
|
if artist:
|
|
artist.set_color(color["color"])
|
|
|
|
|
|
def map_album_colors():
|
|
colors = LibDataTable.get_all_colors(type="album")
|
|
|
|
for color in colors:
|
|
album = AlbumStore.albummap.get(color["itemhash"])
|
|
|
|
if album:
|
|
album.set_color(color["color"])
|