diff --git a/js/services/hashtagPreferencesService.js b/js/services/hashtagPreferencesService.js index 8ec9cc85..3ed72af4 100644 --- a/js/services/hashtagPreferencesService.js +++ b/js/services/hashtagPreferencesService.js @@ -430,9 +430,9 @@ class HashtagPreferencesService { if (!events.length) { // If we failed to fetch (network error) but already have data for this user, // preserve the existing state instead of wiping it. - if (fetchError && wasLoadedForUser) { + if (wasLoadedForUser) { userLogger.warn( - `${LOG_PREFIX} Keeping existing preferences after fetch error.`, + `${LOG_PREFIX} Keeping existing preferences despite empty relay response.`, ); return; } @@ -470,7 +470,7 @@ class HashtagPreferencesService { }, null); if (!latest) { - if (fetchError && wasLoadedForUser) { + if (wasLoadedForUser) { return; } this.reset(); @@ -478,6 +478,16 @@ class HashtagPreferencesService { return; } + const currentCreatedAt = Number(this.eventCreatedAt) || 0; + const latestCreatedAt = Number(latest.created_at) || 0; + + if (wasLoadedForUser && currentCreatedAt > latestCreatedAt) { + userLogger.warn( + `${LOG_PREFIX} Ignoring stale preferences event (remote: ${latestCreatedAt}, local: ${currentCreatedAt}).`, + ); + return; + } + const decryptResult = await this.decryptEvent(latest, normalized); if (!decryptResult.ok) { userLogger.warn(