fix: limited items on recently played

This commit is contained in:
cwilvx
2024-10-08 10:23:24 +03:00
parent 992c6d5362
commit 6a5cb1488e
+24 -1
View File
@@ -2,6 +2,7 @@ from datetime import datetime
import os
from app.db.userdata import FavoritesTable, PlaylistTable, ScrobbleTable
from app.models.logger import TrackLog
from app.models.playlist import Playlist
from app.serializers.track import serialize_track
from app.serializers.album import album_serializer
@@ -23,7 +24,6 @@ from app.store.artists import ArtistStore
def get_recently_played(limit=7):
# TODO: Paginate this
entries = ScrobbleTable.get_all(0, 200)
items = []
added = set()
@@ -32,6 +32,7 @@ def get_recently_played(limit=7):
{"name": "recentlyplayed", "handler": get_recently_played_playlist},
]
def create_items(entries: list[TrackLog]):
for entry in entries:
if len(items) >= limit:
break
@@ -199,6 +200,28 @@ def get_recently_played(limit=7):
}
)
BATCH_SIZE = 200
current_index = 0
entries = ScrobbleTable.get_all(0, BATCH_SIZE)
max_iterations = 20 # Safeguard against unexpected infinite loops
iterations = 0
while len(items) < limit and iterations < max_iterations:
create_items(entries[current_index : current_index + BATCH_SIZE])
current_index += BATCH_SIZE
if len(items) < limit:
entries = ScrobbleTable.get_all(current_index, BATCH_SIZE)
if not entries:
break
iterations += 1
if iterations == max_iterations:
print(
f"Warning: Reached maximum iterations ({max_iterations}) while fetching recently played items"
)
return items