From 75d941bc93d6e3503d0446f5afb52af71606bde8 Mon Sep 17 00:00:00 2001 From: Luc Mcgrady Date: Mon, 21 Jul 2025 01:16:12 +0100 Subject: [PATCH] Cache clearing logic --- ts/routes/deck-options/FsrsOptions.svelte | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/ts/routes/deck-options/FsrsOptions.svelte b/ts/routes/deck-options/FsrsOptions.svelte index b90ab687e..cbaf5bf43 100644 --- a/ts/routes/deck-options/FsrsOptions.svelte +++ b/ts/routes/deck-options/FsrsOptions.svelte @@ -68,10 +68,8 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html $: desiredRetentionWarning = getRetentionLongShortWarning(roundedRetention); let desiredRetentionChangeInfo = ""; - $: { - showDesiredRetentionTooltip - ? getRetentionChangeInfo(roundedRetention, fsrsParams($config)) - : ""; + $: if (showDesiredRetentionTooltip) { + getRetentionChangeInfo(roundedRetention, fsrsParams($config)); } $: retentionWarningClass = getRetentionWarningClass(roundedRetention); @@ -106,17 +104,24 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html let retentionWorloadInfo: undefined | Promise = undefined; + let lastParams = [...fsrsParams($config)]; async function getRetentionChangeInfo(retention: number, params: number[]) { if (+startingDesiredRetention == roundedRetention) { desiredRetentionChangeInfo = tr.deckConfigWorkloadFactorUnchanged(); return; } - if (!retentionWorloadInfo) { + if ( + // If the cache is empty and a request has not yet been made to fill it + !retentionWorloadInfo || + // If the parameters have been changed + lastParams.toString() !== fsrsParams($config).toString() + ) { const request = new GetRetentionWorkloadRequest({ w: params, search: defaultparamSearch, }); + lastParams = [...fsrsParams($config)]; retentionWorloadInfo = getRetentionWorkload(request); }