Page MenuHomePhabricator

D13889.id45728.diff
No OneTemporary

D13889.id45728.diff

diff --git a/lib/utils/migration-utils.js b/lib/utils/migration-utils.js
--- a/lib/utils/migration-utils.js
+++ b/lib/utils/migration-utils.js
@@ -186,14 +186,16 @@
debug: boolean,
) => Promise<?PersistedState<N, T>>;
-export type MigrationFunction<
- N: BaseNavInfo,
- T: BaseAppState<N>,
-> = T => Promise<{
+export type MigrationResult<T> = {
+state: T,
+ops: StoreOperations,
+changesSchema?: boolean,
-}>;
+};
+
+export type MigrationFunction<
+ N: BaseNavInfo,
+ T: BaseAppState<N>,
+> = T => Promise<MigrationResult<T>>;
export type MigrationsManifest<N: BaseNavInfo, T: BaseAppState<N>> = {
+[number | string]: MigrationFunction<N, T>,
diff --git a/native/redux/persist.js b/native/redux/persist.js
--- a/native/redux/persist.js
+++ b/native/redux/persist.js
@@ -150,7 +150,7 @@
import { persistMigrationForManagePinsThreadPermission } from './manage-pins-permission-migration.js';
import { persistMigrationToRemoveSelectRolePermissions } from './remove-select-role-permissions.js';
import type { AppState } from './state-types.js';
-import { unshimClientDB } from './unshim-utils.js';
+import { unshimClientDB, legacyUnshimClientDB } from './unshim-utils.js';
import { authoritativeKeyserverID } from '../authoritative-keyserver.js';
import { commCoreModule } from '../native-modules.js';
import type { NavInfo } from '../navigation/default-state.js';
@@ -515,13 +515,16 @@
}
return state;
},
- [32]: (state: AppState) => unshimClientDB(state, [messageTypes.MULTIMEDIA]),
- [33]: (state: AppState) => unshimClientDB(state, [messageTypes.REACTION]),
+ [32]: (state: AppState) =>
+ legacyUnshimClientDB(state, [messageTypes.MULTIMEDIA]),
+ [33]: (state: AppState) =>
+ legacyUnshimClientDB(state, [messageTypes.REACTION]),
[34]: (state: any) => {
const { threadIDsToNotifIDs, ...stateSansThreadIDsToNotifIDs } = state;
return stateSansThreadIDsToNotifIDs;
},
- [35]: (state: AppState) => unshimClientDB(state, [messageTypes.MULTIMEDIA]),
+ [35]: (state: AppState) =>
+ legacyUnshimClientDB(state, [messageTypes.MULTIMEDIA]),
[36]: (state: AppState) => {
// 1. Get threads and messages from SQLite `threads` and `messages` tables.
const clientDBThreadInfos = commCoreModule.getAllThreadsSync();
@@ -653,7 +656,8 @@
state,
legacyUpdateRolesAndPermissions,
),
- [39]: (state: AppState) => unshimClientDB(state, [messageTypes.EDIT_MESSAGE]),
+ [39]: (state: AppState) =>
+ legacyUnshimClientDB(state, [messageTypes.EDIT_MESSAGE]),
[40]: (state: AppState) =>
deprecatedUpdateClientDBThreadStoreThreadInfos(
state,
@@ -1305,7 +1309,7 @@
};
},
[74]: (state: AppState) =>
- unshimClientDB(
+ legacyUnshimClientDB(
state,
[messageTypes.UPDATE_RELATIONSHIP],
handleReduxMigrationFailure,
@@ -1496,6 +1500,12 @@
state,
ops: {},
}): MigrationFunction<NavInfo, AppState>),
+ [85]: (async (state: AppState) =>
+ unshimClientDB(
+ state,
+ [messageTypes.MULTIMEDIA],
+ handleReduxMigrationFailure,
+ ): MigrationFunction<NavInfo, AppState>),
});
// NOTE: renaming this object, and especially the `version` property
@@ -1506,7 +1516,7 @@
storage: AsyncStorage,
blacklist: persistBlacklist,
debug: __DEV__,
- version: 84,
+ version: 85,
transforms: [
messageStoreMessagesBlocklistTransform,
reportStoreTransform,
diff --git a/native/redux/unshim-utils.js b/native/redux/unshim-utils.js
--- a/native/redux/unshim-utils.js
+++ b/native/redux/unshim-utils.js
@@ -9,6 +9,7 @@
import { type MessageType } from 'lib/types/message-types-enum.js';
import type { RawMessageInfo } from 'lib/types/message-types.js';
import { translateClientDBMessageInfoToRawMessageInfo } from 'lib/utils/message-ops-utils.js';
+import type { MigrationResult } from 'lib/utils/migration-utils.js';
import type { AppState } from './state-types.js';
import { commCoreModule } from '../native-modules.js';
@@ -22,7 +23,7 @@
state: AppState,
unshimTypes: $ReadOnlyArray<MessageType>,
handleMigrationFailure?: AppState => AppState,
-): AppState {
+): MigrationResult<AppState> {
// 1. Get messages from SQLite `messages` table.
const clientDBMessageInfos = commCoreModule.getInitialMessagesSync();
@@ -51,26 +52,52 @@
// 5. Try processing `ClientDBMessageStoreOperation`s and log out if
// `processMessageStoreOperationsSync(...)` throws an exception.
try {
- const convertedMessageStoreOperations =
- convertMessageOpsToClientDBOps(operations);
- commCoreModule.processMessageStoreOperationsSync(
- convertedMessageStoreOperations,
- );
const processedMessageStore = processMessageStoreOperations(
state.messageStore,
operations,
);
return {
- ...state,
- messageStore: processedMessageStore,
+ state: {
+ ...state,
+ messageStore: processedMessageStore,
+ },
+ ops: {
+ messageStoreOperations: operations,
+ },
};
} catch (exception) {
console.log(exception);
if (handleMigrationFailure) {
- return handleMigrationFailure(state);
+ const newState = handleMigrationFailure(state);
+ return { state: newState, ops: {} };
}
- return ({ ...state, cookie: null }: any);
+ return {
+ state: ({ ...state, cookie: null }: any),
+ ops: {},
+ };
+ }
+}
+
+function legacyUnshimClientDB(
+ prevState: AppState,
+ unshimTypes: $ReadOnlyArray<MessageType>,
+ handleMigrationFailure?: AppState => AppState,
+): AppState {
+ const { state, ops } = unshimClientDB(
+ prevState,
+ unshimTypes,
+ handleMigrationFailure,
+ );
+ const { messageStoreOperations } = ops;
+ if (messageStoreOperations) {
+ const convertedMessageStoreOperations = convertMessageOpsToClientDBOps(
+ messageStoreOperations,
+ );
+ commCoreModule.processMessageStoreOperationsSync(
+ convertedMessageStoreOperations,
+ );
}
+ return state;
}
-export { unshimClientDB };
+export { unshimClientDB, legacyUnshimClientDB };
diff --git a/web/redux/persist-constants.js b/web/redux/persist-constants.js
--- a/web/redux/persist-constants.js
+++ b/web/redux/persist-constants.js
@@ -3,6 +3,6 @@
const rootKey = 'root';
const rootKeyPrefix = 'persist:';
const completeRootKey = `${rootKeyPrefix}${rootKey}`;
-const storeVersion = 84;
+const storeVersion = 85;
export { rootKey, rootKeyPrefix, completeRootKey, storeVersion };
diff --git a/web/redux/persist.js b/web/redux/persist.js
--- a/web/redux/persist.js
+++ b/web/redux/persist.js
@@ -65,7 +65,7 @@
} from './handle-redux-migration-failure.js';
import { rootKey, rootKeyPrefix, storeVersion } from './persist-constants.js';
import type { AppState } from './redux-setup.js';
-import { unshimClientDB } from './unshim-utils.js';
+import { legacyUnshimClientDB } from './unshim-utils.js';
import { authoritativeKeyserverID } from '../authoritative-keyserver.js';
import { getCommSharedWorker } from '../shared-worker/shared-worker-provider.js';
import { getOlmWasmPath } from '../shared-worker/utils/constants.js';
@@ -486,7 +486,7 @@
return state;
},
[18]: (state: AppState) =>
- unshimClientDB(state, [messageTypes.UPDATE_RELATIONSHIP]),
+ legacyUnshimClientDB(state, [messageTypes.UPDATE_RELATIONSHIP]),
};
const migrateStorageToSQLite: StorageMigrationFunction<
@@ -718,6 +718,10 @@
};
return { state, ops: operations };
}: MigrationFunction<WebNavInfo, AppState>),
+ [85]: (async (state: AppState) => ({
+ state,
+ ops: {},
+ }): MigrationFunction<WebNavInfo, AppState>),
};
const persistConfig: PersistConfig = {
diff --git a/web/redux/unshim-utils.js b/web/redux/unshim-utils.js
--- a/web/redux/unshim-utils.js
+++ b/web/redux/unshim-utils.js
@@ -12,8 +12,8 @@
ClientDBMessageInfo,
} from 'lib/types/message-types.js';
import { translateClientDBMessageInfoToRawMessageInfo } from 'lib/utils/message-ops-utils.js';
+import type { MigrationResult } from 'lib/utils/migration-utils.js';
-import { handleReduxMigrationFailure } from './handle-redux-migration-failure.js';
import type { AppState } from './redux-setup.js';
import { getCommSharedWorker } from '../shared-worker/shared-worker-provider.js';
import { workerRequestMessageTypes } from '../types/worker-types.js';
@@ -26,13 +26,16 @@
async function unshimClientDB(
state: AppState,
unshimTypes: $ReadOnlyArray<MessageType>,
-): Promise<AppState> {
+): Promise<MigrationResult<AppState>> {
// 1. Check if `databaseModule` is supported and early-exit if not.
const sharedWorker = await getCommSharedWorker();
const isDatabaseSupported = await sharedWorker.isSupported();
if (!isDatabaseSupported) {
- return state;
+ return {
+ state,
+ ops: {},
+ };
}
// 2. Get existing `stores` from SQLite.
@@ -44,7 +47,10 @@
stores?.store?.messages;
if (messages === null || messages === undefined || messages.length === 0) {
- return state;
+ return {
+ state,
+ ops: {},
+ };
}
// 3. Translate `ClientDBMessageInfo`s to `RawMessageInfo`s.
@@ -71,26 +77,46 @@
// 6. Process the constructed `messageStoreOperations`.
try {
- const convertedMessageStoreOperations =
- convertMessageOpsToClientDBOps(operations);
- await sharedWorker.schedule({
- type: workerRequestMessageTypes.PROCESS_STORE_OPERATIONS,
- storeOperations: {
- messageStoreOperations: convertedMessageStoreOperations,
- },
- });
const processedMessageStore = processMessageStoreOperations(
state.messageStore,
operations,
);
return {
- ...state,
- messageStore: processedMessageStore,
+ state: {
+ ...state,
+ messageStore: processedMessageStore,
+ },
+ ops: {
+ messageStoreOperations: operations,
+ },
};
} catch (e) {
console.log(e);
- return handleReduxMigrationFailure(state);
+ throw e;
+ }
+}
+
+async function legacyUnshimClientDB(
+ prevState: AppState,
+ unshimTypes: $ReadOnlyArray<MessageType>,
+): Promise<AppState> {
+ const [sharedWorker, { state, ops }] = await Promise.all([
+ getCommSharedWorker(),
+ unshimClientDB(prevState, unshimTypes),
+ ]);
+ const { messageStoreOperations } = ops;
+ if (messageStoreOperations) {
+ const convertedMessageStoreOperations = convertMessageOpsToClientDBOps(
+ messageStoreOperations,
+ );
+ await sharedWorker.schedule({
+ type: workerRequestMessageTypes.PROCESS_STORE_OPERATIONS,
+ storeOperations: {
+ messageStoreOperations: convertedMessageStoreOperations,
+ },
+ });
}
+ return state;
}
-export { unshimClientDB };
+export { unshimClientDB, legacyUnshimClientDB };

File Metadata

Mime Type
text/plain
Expires
Thu, Nov 21, 8:03 PM (14 h, 23 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2556044
Default Alt Text
D13889.id45728.diff (10 KB)

Event Timeline