From 9cc119894fafffd9279516e8c0ebc20957e746d4 Mon Sep 17 00:00:00 2001 From: Uruk Date: Fri, 22 May 2026 01:43:50 +0200 Subject: [PATCH] fix(seerr): migrate legacy Jellyseerr settings and storage keys The Jellyseerr -> Seerr rebrand renamed the settings property (jellyseerrServerUrl -> seerrServerUrl) and the MMKV storage keys (JELLYSEERR_USER/COOKIES -> SEERR_USER/COOKIES). Without migration, users who configured Seerr before the rename lose their server URL and are silently logged out on update. Adds one-time migrations: loadSettings copies the legacy property, and useSeerr migrates the storage keys at module load before the user atom is read. --- hooks/useSeerr.ts | 29 +++++++++++++++++++++++++++++ utils/atoms/settings.ts | 13 +++++++++++++ 2 files changed, 42 insertions(+) diff --git a/hooks/useSeerr.ts b/hooks/useSeerr.ts index 8f249216..b134dd6b 100644 --- a/hooks/useSeerr.ts +++ b/hooks/useSeerr.ts @@ -65,6 +65,35 @@ interface SearchResults { const SEERR_USER = "SEERR_USER"; const SEERR_COOKIES = "SEERR_COOKIES"; +// One-time migration of the legacy Jellyseerr storage keys to the Seerr-branded +// keys. Runs at module load, before seerrUserAtom reads SEERR_USER, so logged-in +// users keep their session through the rename instead of being silently logged out. +const LEGACY_USER_KEY = "JELLYSEERR_USER"; +const LEGACY_COOKIES_KEY = "JELLYSEERR_COOKIES"; + +function migrateLegacySeerrStorage() { + const legacyUser = storage.get(LEGACY_USER_KEY); + if ( + legacyUser !== undefined && + storage.get(SEERR_USER) === undefined + ) { + storage.setAny(SEERR_USER, legacyUser); + } + + const legacyCookies = storage.get(LEGACY_COOKIES_KEY); + if ( + legacyCookies !== undefined && + storage.get(SEERR_COOKIES) === undefined + ) { + storage.setAny(SEERR_COOKIES, legacyCookies); + } + + storage.remove(LEGACY_USER_KEY); + storage.remove(LEGACY_COOKIES_KEY); +} + +migrateLegacySeerrStorage(); + export const clearSeerrStorageData = () => { storage.remove(SEERR_USER); storage.remove(SEERR_COOKIES); diff --git a/utils/atoms/settings.ts b/utils/atoms/settings.ts index ecfd7a74..4c95619d 100644 --- a/utils/atoms/settings.ts +++ b/utils/atoms/settings.ts @@ -304,6 +304,19 @@ const loadSettings = (): Partial => { const loadedValues: Partial = jsonValue != null ? JSON.parse(jsonValue) : {}; + // Migration: jellyseerrServerUrl -> seerrServerUrl (renamed in the Seerr rebrand). + // Without this, users who configured Seerr before the rename lose their server URL. + const legacy = loadedValues as Partial & { + jellyseerrServerUrl?: string; + }; + if (legacy.jellyseerrServerUrl !== undefined) { + if (legacy.seerrServerUrl === undefined) { + legacy.seerrServerUrl = legacy.jellyseerrServerUrl; + } + delete legacy.jellyseerrServerUrl; + storage.set("settings", JSON.stringify(loadedValues)); + } + return loadedValues; } catch (error) { console.error("Failed to load settings:", error);