From 4412902312eede5be56a23e85d04a5bb306922ce Mon Sep 17 00:00:00 2001 From: mungai-njoroge Date: Sun, 10 Dec 2023 13:27:54 +0300 Subject: [PATCH] handle favorites on recently played + use client side timestamp on track logger --- app/api/logger/tracks.py | 5 ++--- app/db/sqlite/favorite.py | 13 ++++++++++++ app/db/sqlite/logger/tracks.py | 4 +--- app/lib/home/recentlyplayed.py | 36 ++++++++++++++++++++++------------ app/lib/playlistlib.py | 4 ++-- app/models/logger.py | 4 +++- 6 files changed, 44 insertions(+), 22 deletions(-) diff --git a/app/api/logger/tracks.py b/app/api/logger/tracks.py index 5244fe84..f6ed2894 100644 --- a/app/api/logger/tracks.py +++ b/app/api/logger/tracks.py @@ -3,6 +3,7 @@ from app.db.sqlite.logger.tracks import SQLiteTrackLogger as db parser = reqparse.RequestParser() parser.add_argument("trackhash", type=str, required=True) +parser.add_argument("timestamp", type=int, required=True) parser.add_argument("duration", type=int, required=True) parser.add_argument("source", type=str, required=True) @@ -12,9 +13,7 @@ class LogTrack(Resource): args = parser.parse_args(strict=True) last_row = db.insert_track( - args["trackhash"], - args["duration"], - args["source"], + args["trackhash"], args["duration"], args["source"], args["timestamp"] ) return {"last_row": last_row} diff --git a/app/db/sqlite/favorite.py b/app/db/sqlite/favorite.py index 2db20363..fb1ef911 100644 --- a/app/db/sqlite/favorite.py +++ b/app/db/sqlite/favorite.py @@ -86,3 +86,16 @@ class SQLiteFavoriteMethods: with SQLiteManager(userdata_db=True) as cur: cur.execute(sql, (fav_hash, fav_type)) cur.close() + + @classmethod + def get_track_count(cls) -> int: + """ + Returns the number of favorite tracks. + """ + sql = """SELECT COUNT(*) FROM favorites WHERE type = ?""" + + with SQLiteManager(userdata_db=True) as cur: + cur.execute(sql, (FavType.track,)) + count = cur.fetchone()[0] + cur.close() + return count diff --git a/app/db/sqlite/logger/tracks.py b/app/db/sqlite/logger/tracks.py index 54622815..c2590300 100644 --- a/app/db/sqlite/logger/tracks.py +++ b/app/db/sqlite/logger/tracks.py @@ -1,10 +1,9 @@ from app.db.sqlite.utils import SQLiteManager -import time class SQLiteTrackLogger: @classmethod - def insert_track(cls, trackhash: str, duration: int, source: str): + def insert_track(cls, trackhash: str, duration: int, source: str, timestamp: int): """ Inserts a track into the database """ @@ -18,7 +17,6 @@ class SQLiteTrackLogger: userid ) VALUES(?,?,?,?,?) """ - timestamp = int(time.time()) cur.execute(sql, (trackhash, duration, timestamp, source, 0)) lastrowid = cur.lastrowid diff --git a/app/lib/home/recentlyplayed.py b/app/lib/home/recentlyplayed.py index c67f8f5f..1600a8e4 100644 --- a/app/lib/home/recentlyplayed.py +++ b/app/lib/home/recentlyplayed.py @@ -3,6 +3,7 @@ from app.models.logger import Track as TrackLog from app.db.sqlite.logger.tracks import SQLiteTrackLogger as db from app.db.sqlite.playlists import SQLitePlaylistMethods as pdb +from app.db.sqlite.favorite import SQLiteFavoriteMethods as fdb from app.serializers.track import serialize_track from app.serializers.album import album_serializer @@ -66,19 +67,6 @@ def get_recently_played(limit=7): continue - if entry.type == "track": - try: - track = TrackStore.get_tracks_by_trackhashes([entry.trackhash])[0] - except IndexError: - continue - - track = serialize_track(track) - track["help_text"] = "track" - - items.append({"type": "track", "item": track}) - - continue - if entry.type == "folder": folder = entry.type_src if not folder: @@ -141,4 +129,26 @@ def get_recently_played(limit=7): } ) + if entry.type == "favorite": + items.append( + { + "type": "favorite_tracks", + "item": { + "help_text": "playlist", + "count": fdb.get_track_count(), + }, + } + ) + continue + + try: + track = TrackStore.get_tracks_by_trackhashes([entry.trackhash])[0] + except IndexError: + continue + + track = serialize_track(track) + track["help_text"] = "track" + + items.append({"type": "track", "item": track}) + return items diff --git a/app/lib/playlistlib.py b/app/lib/playlistlib.py index a3d15e27..7c20efab 100644 --- a/app/lib/playlistlib.py +++ b/app/lib/playlistlib.py @@ -15,7 +15,7 @@ from app.models.playlist import Playlist from app.models.track import Track from app.store.albums import AlbumStore from app.store.tracks import TrackStore -from app.utils.dates import create_new_date +from app.utils.dates import create_new_date, date_string_to_time_passed def create_thumbnail(image: Any, img_path: str) -> str: @@ -146,7 +146,7 @@ def get_recently_added_playlist(cutoff: int = 14): tracks = get_recent_tracks(cutoff) date = datetime.fromtimestamp(tracks[0].created_date) - playlist.last_updated = create_new_date(date) + playlist.last_updated = date_string_to_time_passed(create_new_date(date)) images = get_first_4_images(tracks=tracks) playlist.images = images diff --git a/app/models/logger.py b/app/models/logger.py index ead2aa33..7c630741 100644 --- a/app/models/logger.py +++ b/app/models/logger.py @@ -24,6 +24,7 @@ class Track: "ar:": "artist", "pl:": "playlist", "fo:": "folder", + "favorite": "favorite", } for prefix, srctype in prefix_map.items(): @@ -31,6 +32,7 @@ class Track: try: self.type_src = self.source.split(":", 1)[1] except IndexError: - pass + self.type_src = None + self.type = srctype break