From 5c6ce7540996a926cf8219e42f7e4b8bd91380ef Mon Sep 17 00:00:00 2001 From: Stan Runge Date: Mon, 26 Oct 2026 01:00:39 +0000 Subject: [PATCH] osu! goals: actually pass my play counts into the refresh (most-played list, weekly or on force) --- src/lib/server/osu-goals/refresh.ts | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/lib/server/osu-goals/refresh.ts b/src/lib/server/osu-goals/refresh.ts index 68c4506..60afbbc 100644 --- a/src/lib/server/osu-goals/refresh.ts +++ b/src/lib/server/osu-goals/refresh.ts @@ -253,10 +253,27 @@ export async function refreshAllGoals(force = false) { let refreshed = 0, failed = 0, achieved = 0; - for (const row of rows) { - if (row.matchStatus !== 'matched') continue; + const matched = rows.filter((r) => r.matchStatus === 'matched' && r.beatmapId); + // Play counts come from my most-played list (paged), so only with the weekly metadata. + const needPlays = + force || + matched.some( + (r) => + r.myPlayCount == null || + !r.metadataAt || + Date.now() - r.metadataAt.getTime() > METADATA_MAX_AGE + ); + let plays: Map | undefined; + if (needPlays) { try { - const updated = await refreshGoal(row, force); + plays = await fetchMyPlayCounts(new Set(matched.map((r) => r.beatmapId!))); + } catch (e) { + console.error(`[osu-goals] play counts: ${(e as Error).message}`); + } + } + for (const row of matched) { + try { + const updated = await refreshGoal(row, force, plays); refreshed++; if (updated.achievedAt && !row.achievedAt) achieved++; } catch (e) {