diff --git a/src/lib/addons/themes/colors/patches/storage.ts b/src/lib/addons/themes/colors/patches/storage.ts index ddf14ad..47ae311 100644 --- a/src/lib/addons/themes/colors/patches/storage.ts +++ b/src/lib/addons/themes/colors/patches/storage.ts @@ -12,22 +12,39 @@ const mmkvStorage = proxyLazy(() => { export default function patchStorage() { const patchedKeys = new Set(["ThemeStore", "SelectivelySyncedUserSettingsStore"]); + const sanitizedKeys = new Set(); const patches = [ after("get", mmkvStorage, ([key], ret) => { - if (!_colorRef.current || !patchedKeys.has(key)) return; + if (!patchedKeys.has(key)) return; const state = findInTree(ret._state, s => typeof s.theme === "string"); - if (state) state.theme = _colorRef.key; + if (!state) return; + + const lastSetDiscordTheme = _colorRef.lastSetDiscordTheme ?? "darker"; + + if (/^bn-theme-\d+$/.test(state.theme) && !/^bn-theme-\d+$/.test(lastSetDiscordTheme) && !sanitizedKeys.has(key)) { + try { + const newVal = { ...ret._state, theme: lastSetDiscordTheme }; + mmkvStorage.set(key, newVal); + sanitizedKeys.add(key); + } catch (e) { + } + state.theme = lastSetDiscordTheme; + return; + } + + if (_colorRef.current) state.theme = _colorRef.key; }), before("set", mmkvStorage, ([key, value]) => { if (!patchedKeys.has(key)) return; const json = JSON.stringify(value); const lastSetDiscordTheme = _colorRef.lastSetDiscordTheme ?? "darker"; + const replacementTheme = /^bn-theme-\d+$/.test(lastSetDiscordTheme) ? "darker" : lastSetDiscordTheme; const replaced = json.replace( /"theme":"bn-theme-\d+"/, - `"theme":${JSON.stringify(lastSetDiscordTheme)}` + `"theme":${JSON.stringify(replacementTheme)}` ); return [key, JSON.parse(replaced)];