diff options
Diffstat (limited to 'src/state/persisted/legacy.ts')
-rw-r--r-- | src/state/persisted/legacy.ts | 84 |
1 files changed, 64 insertions, 20 deletions
diff --git a/src/state/persisted/legacy.ts b/src/state/persisted/legacy.ts index 67eef81a0..025877529 100644 --- a/src/state/persisted/legacy.ts +++ b/src/state/persisted/legacy.ts @@ -66,45 +66,47 @@ type LegacySchema = { const DEPRECATED_ROOT_STATE_STORAGE_KEY = 'root' -export function transform(legacy: LegacySchema): Schema { +// TODO remove, assume that partial data may be here during our refactor +export function transform(legacy: Partial<LegacySchema>): Schema { return { colorMode: legacy.shell?.colorMode || defaults.colorMode, session: { - accounts: legacy.session.accounts || defaults.session.accounts, + accounts: legacy.session?.accounts || defaults.session.accounts, currentAccount: - legacy.session.accounts.find(a => a.did === legacy.session.data.did) || - defaults.session.currentAccount, + legacy.session?.accounts?.find( + a => a.did === legacy.session?.data?.did, + ) || defaults.session.currentAccount, }, reminders: { lastEmailConfirm: - legacy.reminders.lastEmailConfirm || + legacy.reminders?.lastEmailConfirm || defaults.reminders.lastEmailConfirm, }, languagePrefs: { primaryLanguage: - legacy.preferences.primaryLanguage || + legacy.preferences?.primaryLanguage || defaults.languagePrefs.primaryLanguage, contentLanguages: - legacy.preferences.contentLanguages || + legacy.preferences?.contentLanguages || defaults.languagePrefs.contentLanguages, postLanguage: - legacy.preferences.postLanguage || defaults.languagePrefs.postLanguage, + legacy.preferences?.postLanguage || defaults.languagePrefs.postLanguage, postLanguageHistory: - legacy.preferences.postLanguageHistory || + legacy.preferences?.postLanguageHistory || defaults.languagePrefs.postLanguageHistory, + appLanguage: + legacy.preferences?.postLanguage || defaults.languagePrefs.appLanguage, }, requireAltTextEnabled: - legacy.preferences.requireAltTextEnabled || + legacy.preferences?.requireAltTextEnabled || defaults.requireAltTextEnabled, - mutedThreads: legacy.mutedThreads.uris || defaults.mutedThreads, - invitedUsers: { - seenDids: legacy.invitedUsers.seenDids || defaults.invitedUsers.seenDids, + mutedThreads: legacy.mutedThreads?.uris || defaults.mutedThreads, + invites: { copiedInvites: - legacy.invitedUsers.copiedInvites || - defaults.invitedUsers.copiedInvites, + legacy.invitedUsers?.copiedInvites || defaults.invites.copiedInvites, }, onboarding: { - step: legacy.onboarding.step || defaults.onboarding.step, + step: legacy.onboarding?.step || defaults.onboarding.step, }, } } @@ -114,20 +116,52 @@ export function transform(legacy: LegacySchema): Schema { * local storage AND old storage exists. */ export async function migrate() { - logger.debug('persisted state: migrate') + logger.info('persisted state: migrate') try { const rawLegacyData = await AsyncStorage.getItem( DEPRECATED_ROOT_STATE_STORAGE_KEY, ) - const alreadyMigrated = Boolean(await read()) + const newData = await read() + const alreadyMigrated = Boolean(newData) + + try { + if (rawLegacyData) { + const legacy = JSON.parse(rawLegacyData) as Partial<LegacySchema> + logger.info(`persisted state: debug legacy data`, { + hasExistingLoggedInAccount: Boolean(legacy?.session?.data), + numberOfExistingAccounts: legacy?.session?.accounts?.length, + foundExistingCurrentAccount: Boolean( + legacy.session?.accounts?.find( + a => a.did === legacy.session?.data?.did, + ), + ), + }) + logger.info(`persisted state: debug new data`, { + hasExistingLoggedInAccount: Boolean(newData?.session?.currentAccount), + numberOfExistingAccounts: newData?.session?.accounts?.length, + existingAccountMatchesLegacy: Boolean( + newData?.session?.currentAccount?.did === + legacy?.session?.data?.did, + ), + }) + } else { + logger.info(`persisted state: no legacy to debug, fresh install`) + } + } catch (e) { + logger.error(`persisted state: legacy debugging failed`, {error: e}) + } if (!alreadyMigrated && rawLegacyData) { - logger.debug('persisted state: migrating legacy storage') + logger.info('persisted state: migrating legacy storage') const legacyData = JSON.parse(rawLegacyData) const newData = transform(legacyData) await write(newData) - logger.debug('persisted state: migrated legacy storage') + // track successful migrations + logger.log('persisted state: migrated legacy storage') + } else { + // track successful migrations + logger.log('persisted state: no migration needed') } } catch (e) { logger.error('persisted state: error migrating legacy storage', { @@ -135,3 +169,13 @@ export async function migrate() { }) } } + +export async function clearLegacyStorage() { + try { + await AsyncStorage.removeItem(DEPRECATED_ROOT_STATE_STORAGE_KEY) + } catch (e: any) { + logger.error(`persisted legacy store: failed to clear`, { + error: e.toString(), + }) + } +} |