Page MenuHomePhabricator

D13571.id.diff
No OneTemporary

D13571.id.diff

diff --git a/lib/shared/redux/client-db-utils.js b/lib/shared/redux/client-db-utils.js
--- a/lib/shared/redux/client-db-utils.js
+++ b/lib/shared/redux/client-db-utils.js
@@ -11,8 +11,8 @@
import { reportStoreOpsHandlers } from '../../ops/report-store-ops.js';
import { syncedMetadataStoreOpsHandlers } from '../../ops/synced-metadata-store-ops.js';
import { threadActivityStoreOpsHandlers } from '../../ops/thread-activity-store-ops.js';
-import type { ClientDBThreadStoreOperation } from '../../ops/thread-store-ops.js';
import { threadStoreOpsHandlers } from '../../ops/thread-store-ops.js';
+import type { ThreadStoreOperation } from '../../ops/thread-store-ops.js';
import { userStoreOpsHandlers } from '../../ops/user-store-ops.js';
import type {
ClientDBStoreOperations,
@@ -23,15 +23,12 @@
ClientDBThreadInfo,
} from '../../types/thread-types.js';
import { values } from '../../utils/objects.js';
-import {
- convertClientDBThreadInfoToRawThreadInfo,
- convertRawThreadInfoToClientDBThreadInfo,
-} from '../../utils/thread-ops-utils.js';
+import { convertClientDBThreadInfoToRawThreadInfo } from '../../utils/thread-ops-utils.js';
function createUpdateDBOpsForThreadStoreThreadInfos(
clientDBThreadInfos: $ReadOnlyArray<ClientDBThreadInfo>,
migrationFunc: RawThreadInfos => RawThreadInfos,
-): $ReadOnlyArray<ClientDBThreadStoreOperation> {
+): $ReadOnlyArray<ThreadStoreOperation> {
// 1. Translate `ClientDBThreadInfo`s to `RawThreadInfo`s.
const rawThreadInfos = clientDBThreadInfos.map(
convertClientDBThreadInfoToRawThreadInfo,
@@ -46,18 +43,18 @@
// 4. Convert the updated `RawThreadInfos` back into an array.
const updatedKeyedRawThreadInfosArray = values(updatedKeyedRawThreadInfos);
- // 5. Translate `RawThreadInfo`s back to `ClientDBThreadInfo`s.
- const updatedClientDBThreadInfos = updatedKeyedRawThreadInfosArray.map(
- convertRawThreadInfoToClientDBThreadInfo,
+ // 5. Construct `replace` `ThreadStoreOperation`s.
+ const replaceThreadOperations = updatedKeyedRawThreadInfosArray.map(
+ thread => ({
+ type: 'replace',
+ payload: {
+ id: thread.id,
+ threadInfo: thread,
+ },
+ }),
);
- // 6. Construct `replace` `ClientDBThreadStoreOperation`s.
- const replaceThreadOperations = updatedClientDBThreadInfos.map(thread => ({
- type: 'replace',
- payload: thread,
- }));
-
- // 7. Prepend `replaceThreadOperations` with `remove_all` op and return.
+ // 6. Prepend `replaceThreadOperations` with `remove_all` op and return.
return [{ type: 'remove_all' }, ...replaceThreadOperations];
}
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
@@ -204,18 +204,23 @@
debug: boolean,
) => Promise<?PersistedState<N, T>>;
-export type MigrationManifest<N: BaseNavInfo, T: BaseAppState<N>> = {
- +[number | string]: (PersistedState<N, T>) => Promise<{
- +state: T,
- +ops: StoreOperations,
- +changesSchema?: boolean,
- }>,
+export type MigrationManifest<
+ N: BaseNavInfo,
+ T: BaseAppState<N>,
+> = T => Promise<{
+ +state: T,
+ +ops: StoreOperations,
+ +changesSchema?: boolean,
+}>;
+
+export type MigrationsManifest<N: BaseNavInfo, T: BaseAppState<N>> = {
+ +[number | string]: MigrationManifest<N, T>,
};
function createAsyncMigrate<N: BaseNavInfo, T: BaseAppState<N>>(
legacyMigrations: LegacyMigrationManifest<N, T>,
config: ConfigType,
- migrations: MigrationManifest<N, T>,
+ migrations: MigrationsManifest<N, T>,
handleException: (error: Error, state: T) => T,
storageMigration: ?StorageMigrationFunction<N, T>,
): (
@@ -268,7 +273,7 @@
async function runMigrations<N: BaseNavInfo, T: BaseAppState<N>>(
legacyMigrations: LegacyMigrationManifest<N, T>,
- migrations: MigrationManifest<N, T>,
+ migrations: MigrationsManifest<N, T>,
state: T,
inboundVersion: number,
currentVersion: number,
diff --git a/native/redux/client-db-utils.js b/native/redux/client-db-utils.js
--- a/native/redux/client-db-utils.js
+++ b/native/redux/client-db-utils.js
@@ -1,6 +1,7 @@
// @flow
import type { ClientDBMessageStoreOperation } from 'lib/ops/message-store-ops.js';
+import { threadStoreOpsHandlers } from 'lib/ops/thread-store-ops.js';
import { createUpdateDBOpsForThreadStoreThreadInfos } from 'lib/shared/redux/client-db-utils.js';
import type {
RawMessageInfo,
@@ -30,9 +31,11 @@
clientDBThreadInfos,
migrationFunc,
);
+ const dbOperations =
+ threadStoreOpsHandlers.convertOpsToClientDBOps(operations);
try {
- commCoreModule.processThreadStoreOperationsSync(operations);
+ commCoreModule.processThreadStoreOperationsSync(dbOperations);
} catch (exception) {
console.log(exception);
if (handleMigrationFailure) {
diff --git a/native/redux/persist.js b/native/redux/persist.js
--- a/native/redux/persist.js
+++ b/native/redux/persist.js
@@ -121,6 +121,10 @@
convertThreadStoreThreadInfosToNewIDSchema,
createAsyncMigrate,
} from 'lib/utils/migration-utils.js';
+import type {
+ MigrationManifest,
+ MigrationsManifest,
+} from 'lib/utils/migration-utils.js';
import { entries } from 'lib/utils/objects.js';
import {
deprecatedConvertClientDBThreadInfoToRawThreadInfo,
@@ -149,6 +153,7 @@
import { unshimClientDB } from './unshim-utils.js';
import { authoritativeKeyserverID } from '../authoritative-keyserver.js';
import { commCoreModule } from '../native-modules.js';
+import type { NavInfo } from '../navigation/default-state.js';
import { defaultDeviceCameraInfo } from '../types/camera.js';
import { isTaskCancelledError } from '../utils/error-handling.js';
import { defaultURLPrefix } from '../utils/url-utils.js';
@@ -1363,14 +1368,14 @@
{ whitelist: ['entryStore'] },
);
-const migrations = {
+const migrations: MigrationsManifest<NavInfo, AppState> = Object.freeze({
// This migration doesn't change the store but sets a persisted version
// in the DB
- [75]: (state: AppState) => ({
+ [75]: (async (state: AppState) => ({
state,
- ops: [],
- }),
- [76]: (state: AppState) => {
+ ops: {},
+ }): MigrationManifest<NavInfo, AppState>),
+ [76]: (async (state: AppState) => {
const localMessageInfos = state.messageStore.local;
const replaceOps: $ReadOnlyArray<ReplaceMessageStoreLocalMessageInfoOperation> =
@@ -1394,35 +1399,36 @@
operations,
);
- const dbOperations: $ReadOnlyArray<ClientDBMessageStoreOperation> =
- messageStoreOpsHandlers.convertOpsToClientDBOps(operations);
-
return {
state: {
...state,
messageStore: newMessageStore,
},
- ops: dbOperations,
+ ops: {
+ messageStoreOperations: operations,
+ },
};
- },
- [77]: (state: AppState) => ({
+ }: MigrationManifest<NavInfo, AppState>),
+ [77]: (async (state: AppState) => ({
state,
- ops: [],
- }),
- [78]: (state: AppState) => {
+ ops: {},
+ }): MigrationManifest<NavInfo, AppState>),
+ [78]: (async (state: AppState) => {
const clientDBThreadInfos = commCoreModule.getAllThreadsSync();
- const dbOperations = createUpdateDBOpsForThreadStoreThreadInfos(
+ const operations = createUpdateDBOpsForThreadStoreThreadInfos(
clientDBThreadInfos,
deprecatedUpdateRolesAndPermissions,
);
return {
state,
- ops: dbOperations,
+ ops: {
+ threadStoreOperations: operations,
+ },
};
- },
- [79]: (state: AppState) => {
+ }: MigrationManifest<NavInfo, AppState>),
+ [79]: (async (state: AppState) => {
return {
state: {
...state,
@@ -1431,10 +1437,10 @@
tunnelbrokerToken: null,
},
},
- ops: [],
+ ops: {},
};
- },
- [80]: (state: AppState) => {
+ }: MigrationManifest<NavInfo, AppState>),
+ [80]: (async (state: AppState) => {
const clientDBThreadInfos = commCoreModule.getAllThreadsSync();
// This isn't actually accurate, but we force this cast here because the
@@ -1444,26 +1450,28 @@
const stripMemberPermissions: RawThreadInfos => RawThreadInfos =
(stripMemberPermissionsFromRawThreadInfos: any);
- const dbOperations = createUpdateDBOpsForThreadStoreThreadInfos(
+ const operations = createUpdateDBOpsForThreadStoreThreadInfos(
clientDBThreadInfos,
stripMemberPermissions,
);
return {
state,
- ops: dbOperations,
+ ops: {
+ threadStoreOperations: operations,
+ },
};
- },
- [81]: (state: AppState) => ({
+ }: MigrationManifest<NavInfo, AppState>),
+ [81]: (async (state: any) => ({
state: {
...state,
queuedDMOperations: {
operations: {},
},
},
- ops: [],
- }),
- [82]: (state: any) => ({
+ ops: {},
+ }): MigrationManifest<NavInfo, AppState>),
+ [82]: (async (state: any) => ({
state: {
...state,
queuedDMOperations: {
@@ -1473,18 +1481,18 @@
membershipQueue: {},
},
},
- ops: [],
- }),
- [83]: (state: AppState) => ({
+ ops: {},
+ }): MigrationManifest<NavInfo, AppState>),
+ [83]: (async (state: AppState) => ({
state: {
...state,
holderStore: {
storedHolders: {},
},
},
- ops: [],
- }),
-};
+ ops: {},
+ }): MigrationManifest<NavInfo, AppState>),
+});
// NOTE: renaming this object, and especially the `version` property
// requires updating `native/native_rust_library/build.rs` to correctly
diff --git a/web/redux/persist.js b/web/redux/persist.js
--- a/web/redux/persist.js
+++ b/web/redux/persist.js
@@ -40,6 +40,8 @@
convertDraftStoreToNewIDSchema,
createAsyncMigrate,
type StorageMigrationFunction,
+ type MigrationManifest,
+ type MigrationsManifest,
} from 'lib/utils/migration-utils.js';
import { entries } from 'lib/utils/objects.js';
import {
@@ -512,14 +514,14 @@
return newStorage;
};
-const migrations = {
+const migrations: MigrationsManifest<WebNavInfo, AppState> = {
// This migration doesn't change the store but sets a persisted version
// in the DB
- [75]: (state: AppState) => ({
+ [75]: (async (state: AppState) => ({
state,
- ops: [],
- }),
- [76]: async (state: AppState) => {
+ ops: {},
+ }): MigrationManifest<WebNavInfo, AppState>),
+ [76]: (async (state: AppState) => {
const localMessageInfos = state.messageStore.local;
const replaceOps: $ReadOnlyArray<ReplaceMessageStoreLocalMessageInfoOperation> =
@@ -543,22 +545,21 @@
operations,
);
- const dbOperations: $ReadOnlyArray<ClientDBMessageStoreOperation> =
- messageStoreOpsHandlers.convertOpsToClientDBOps(operations);
-
return {
state: {
...state,
messageStore: newMessageStore,
},
- ops: dbOperations,
+ ops: {
+ messageStoreOperations: operations,
+ },
};
- },
- [77]: (state: AppState) => ({
+ }: MigrationManifest<WebNavInfo, AppState>),
+ [77]: (async (state: AppState) => ({
state,
- ops: [],
- }),
- [78]: async (state: AppState) => {
+ ops: {},
+ }): MigrationManifest<WebNavInfo, AppState>),
+ [78]: (async (state: AppState) => {
// 1. Check if `databaseModule` is supported and early-exit if not.
const sharedWorker = await getCommSharedWorker();
const isDatabaseSupported = await sharedWorker.isSupported();
@@ -566,7 +567,7 @@
if (!isDatabaseSupported) {
return {
state,
- ops: [],
+ ops: {},
};
}
@@ -585,21 +586,23 @@
) {
return {
state,
- ops: [],
+ ops: {},
};
}
- const dbOperations = createUpdateDBOpsForThreadStoreThreadInfos(
+ const operations = createUpdateDBOpsForThreadStoreThreadInfos(
clientDBThreadInfos,
deprecatedUpdateRolesAndPermissions,
);
return {
state,
- ops: dbOperations,
+ ops: {
+ threadStoreOperations: operations,
+ },
};
- },
- [79]: (state: AppState) => {
+ }: MigrationManifest<WebNavInfo, AppState>),
+ [79]: (async (state: AppState) => {
return {
state: {
...state,
@@ -608,19 +611,19 @@
tunnelbrokerToken: null,
},
},
- ops: [],
+ ops: {},
};
- },
- [81]: (state: AppState) => ({
+ }: MigrationManifest<WebNavInfo, AppState>),
+ [81]: (async (state: any) => ({
state: {
...state,
queuedDMOperations: {
operations: {},
},
},
- ops: [],
- }),
- [82]: (state: any) => ({
+ ops: {},
+ }): MigrationManifest<WebNavInfo, AppState>),
+ [82]: (async (state: any) => ({
state: {
...state,
queuedDMOperations: {
@@ -630,17 +633,17 @@
membershipQueue: {},
},
},
- ops: [],
- }),
- [83]: (state: AppState) => ({
+ ops: {},
+ }): MigrationManifest<WebNavInfo, AppState>),
+ [83]: (async (state: AppState) => ({
state: {
...state,
holderStore: {
storedHolders: {},
},
},
- ops: [],
- }),
+ ops: {},
+ }): MigrationManifest<WebNavInfo, AppState>),
};
const persistConfig: PersistConfig = {

File Metadata

Mime Type
text/plain
Expires
Thu, Oct 3, 6:02 AM (3 h, 45 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2221551
Default Alt Text
D13571.id.diff (12 KB)

Event Timeline