Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F32207910
D14822.1765120521.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
9 KB
Referenced Files
None
Subscribers
None
D14822.1765120521.diff
View Options
diff --git a/lib/ops/message-store-ops.js b/lib/ops/message-store-ops.js
--- a/lib/ops/message-store-ops.js
+++ b/lib/ops/message-store-ops.js
@@ -1,6 +1,7 @@
// @flow
import { type BaseStoreOpsHandlers } from './base-ops.js';
+import { threadSpecs } from '../shared/threads/thread-specs.js';
import type {
ClientDBMessageInfo,
ClientDBThreadMessageInfo,
@@ -10,6 +11,7 @@
LocalMessageInfo,
ClientDBLocalMessageInfo,
} from '../types/message-types.js';
+import { type MixedRawThreadInfos } from '../types/thread-types.js';
import {
translateClientDBMessageInfoToRawMessageInfo,
translateRawMessageInfoToClientDBMessageInfo,
@@ -29,7 +31,7 @@
export type ReplaceMessageOperation = {
+type: 'replace',
- +payload: { +id: string, +messageInfo: RawMessageInfo },
+ +payload: { +id: string, +messageInfo: RawMessageInfo, +isBackedUp: boolean },
};
export type RekeyMessageOperation = {
@@ -112,7 +114,7 @@
| RemoveMessageStoreLocalMessageInfosOperation
| RemoveMessageStoreAllLocalMessageInfosOperation;
-export const messageStoreOpsHandlers: BaseStoreOpsHandlers<
+const messageStoreOpsHandlers: BaseStoreOpsHandlers<
MessageStore,
MessageStoreOperation,
ClientDBMessageStoreOperation,
@@ -246,3 +248,27 @@
);
},
};
+
+function createReplaceMessageOperation(
+ id: string,
+ messageInfo: RawMessageInfo,
+ threadInfos: MixedRawThreadInfos,
+): ReplaceMessageOperation {
+ const threadInfo = threadInfos[messageInfo.threadID];
+ if (!threadInfo) {
+ return {
+ type: 'replace',
+ payload: { id, messageInfo, isBackedUp: true },
+ };
+ }
+ return {
+ type: 'replace',
+ payload: {
+ id,
+ messageInfo,
+ isBackedUp: threadSpecs[threadInfo.type].protocol.dataIsBackedUp,
+ },
+ };
+}
+
+export { messageStoreOpsHandlers, createReplaceMessageOperation };
diff --git a/lib/reducers/message-reducer.js b/lib/reducers/message-reducer.js
--- a/lib/reducers/message-reducer.js
+++ b/lib/reducers/message-reducer.js
@@ -61,8 +61,8 @@
import {
messageStoreOpsHandlers,
type MessageStoreOperation,
- type ReplaceMessageOperation,
type ReplaceMessageStoreLocalMessageInfoOperation,
+ createReplaceMessageOperation,
} from '../ops/message-store-ops.js';
import { pendingToRealizedThreadIDsSelector } from '../selectors/thread-selectors.js';
import {
@@ -174,11 +174,12 @@
const orderedMessageInfos = sortMessageInfoList(unshimmed);
const messages = _keyBy(messageID)(orderedMessageInfos);
- const messageStoreReplaceOperations = orderedMessageInfos.map(
- messageInfo => ({
- type: 'replace',
- payload: { id: messageID(messageInfo), messageInfo },
- }),
+ const messageStoreReplaceOperations = orderedMessageInfos.map(messageInfo =>
+ createReplaceMessageOperation(
+ messageID(messageInfo),
+ messageInfo,
+ threadInfos,
+ ),
);
const threadsToMessageIDs =
@@ -260,11 +261,11 @@
continue;
}
- const updateMsgOperation: ReplaceMessageOperation = {
- type: 'replace',
- payload: { id: storeMessageID, messageInfo: messages[storeMessageID] },
- };
-
+ const updateMsgOperation = createReplaceMessageOperation(
+ storeMessageID,
+ messages[storeMessageID],
+ threadInfos,
+ );
messageStoreOperations.push(updateMsgOperation);
}
@@ -603,10 +604,9 @@
const newMessages = _keyBy(messageID)(orderedNewMessageInfos);
for (const id in newMessages) {
- newMessageOps.push({
- type: 'replace',
- payload: { id, messageInfo: newMessages[id] },
- });
+ newMessageOps.push(
+ createReplaceMessageOperation(id, newMessages[id], threadInfos),
+ );
}
if (localIDsToServerIDs.size > 0) {
@@ -1119,10 +1119,7 @@
}
const messageStoreOperations: MessageStoreOperation[] = [
- {
- type: 'replace',
- payload: { id: localID, messageInfo: payload },
- },
+ createReplaceMessageOperation(localID, payload, newThreadInfos),
];
let updatedThreads;
@@ -1304,10 +1301,13 @@
time: payload.time,
};
newMessages[payload.serverID] = newMessage;
- messageStoreOperations.push({
- type: 'replace',
- payload: { id: payload.serverID, messageInfo: newMessage },
- });
+ messageStoreOperations.push(
+ createReplaceMessageOperation(
+ payload.serverID,
+ newMessage,
+ newThreadInfos,
+ ),
+ );
const threadID = payload.threadID;
const newMessageIDs = _flow(
_uniq,
@@ -1642,13 +1642,7 @@
);
const messageStoreOperations = [
- {
- type: 'replace',
- payload: {
- id,
- messageInfo: updatedMessage,
- },
- },
+ createReplaceMessageOperation(id, updatedMessage, newThreadInfos),
];
const processedMessageStore = processMessageStoreOperations(
@@ -1685,10 +1679,7 @@
};
const messageStoreOperations = [
- {
- type: 'replace',
- payload: { id: localID, messageInfo },
- },
+ createReplaceMessageOperation(localID, messageInfo, newThreadInfos),
{
type: 'replace_threads',
payload: {
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
@@ -1,9 +1,11 @@
// @flow
import {
+ createReplaceMessageOperation,
type MessageStoreOperation,
messageStoreOpsHandlers,
} from 'lib/ops/message-store-ops.js';
+import { threadStoreOpsHandlers } from 'lib/ops/thread-store-ops.js';
import { messageID } from 'lib/shared/id-utils.js';
import { unshimFunc } from 'lib/shared/unshim-utils.js';
import { type MessageType } from 'lib/types/message-types-enum.js';
@@ -24,10 +26,14 @@
unshimTypes: $ReadOnlyArray<MessageType>,
handleMigrationFailure?: AppState => AppState,
): MigrationResult<AppState> {
- // 1. Get messages from SQLite `messages` table.
+ // 1. Get threads and messages from SQLite `threads` and `messages` tables.
+ const clientDBThreadInfos = commCoreModule.getAllThreadsSync();
const clientDBMessageInfos = commCoreModule.getInitialMessagesSync();
- // 2. Translate `ClientDBMessageInfo`s to `RawMessageInfo`s.
+ // 2. Translate `ClientDBThreadInfo`s to `RawThreadInfo`s and
+ // `ClientDBMessageInfo`s to `RawMessageInfo`s.
+ const rawThreadInfos =
+ threadStoreOpsHandlers.translateClientDBData(clientDBThreadInfos);
const rawMessageInfos = clientDBMessageInfos.map(
translateClientDBMessageInfoToRawMessageInfo,
);
@@ -43,10 +49,13 @@
{
type: 'remove_all',
},
- ...unshimmedRawMessageInfos.map((message: RawMessageInfo) => ({
- type: 'replace',
- payload: { id: messageID(message), messageInfo: message },
- })),
+ ...unshimmedRawMessageInfos.map((message: RawMessageInfo) =>
+ createReplaceMessageOperation(
+ messageID(message),
+ message,
+ rawThreadInfos,
+ ),
+ ),
];
// 5. Try processing `ClientDBMessageStoreOperation`s and log out if
diff --git a/web/redux/initial-state-gate.js b/web/redux/initial-state-gate.js
--- a/web/redux/initial-state-gate.js
+++ b/web/redux/initial-state-gate.js
@@ -182,7 +182,10 @@
messageStoreOperations = [
...entries(messages).map(([id, messageInfo]) => ({
type: 'replace',
- payload: { id, messageInfo },
+ // This code is responsible for migrating keyserver messages to
+ // SQLite, which means this data shouldn't be included in the
+ // backup because it is owned by keyserver.
+ payload: { id, messageInfo, isBackedUp: false },
})),
{
type: 'replace_threads',
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
@@ -1,16 +1,19 @@
// @flow
import {
+ createReplaceMessageOperation,
type MessageStoreOperation,
messageStoreOpsHandlers,
} from 'lib/ops/message-store-ops.js';
import { messageID } from 'lib/shared/id-utils.js';
import { unshimFunc } from 'lib/shared/unshim-utils.js';
+import { databaseIdentifier } from 'lib/types/database-identifier-types.js';
import { type MessageType } from 'lib/types/message-types-enum.js';
import type {
RawMessageInfo,
ClientDBMessageInfo,
} from 'lib/types/message-types.js';
+import { getConfig } from 'lib/utils/config.js';
import { translateClientDBMessageInfoToRawMessageInfo } from 'lib/utils/message-ops-utils.js';
import type { MigrationResult } from 'lib/utils/migration-utils.js';
@@ -39,12 +42,11 @@
}
// 2. Get existing `stores` from SQLite.
- const stores = await sharedWorker.schedule({
- type: workerRequestMessageTypes.GET_CLIENT_STORE,
- });
+ const clientStore = await getConfig().sqliteAPI.getClientDBStore(
+ databaseIdentifier.MAIN,
+ );
- const messages: ?$ReadOnlyArray<ClientDBMessageInfo> =
- stores?.store?.messages;
+ const messages: ?$ReadOnlyArray<ClientDBMessageInfo> = clientStore?.messages;
if (messages === null || messages === undefined || messages.length === 0) {
return {
@@ -69,10 +71,13 @@
{
type: 'remove_all',
},
- ...unshimmedRawMessageInfos.map((message: RawMessageInfo) => ({
- type: 'replace',
- payload: { id: messageID(message), messageInfo: message },
- })),
+ ...unshimmedRawMessageInfos.map((message: RawMessageInfo) =>
+ createReplaceMessageOperation(
+ messageID(message),
+ message,
+ clientStore?.threadStore?.threadInfos ?? {},
+ ),
+ ),
];
// 6. Process the constructed `messageStoreOperations`.
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Dec 7, 3:15 PM (20 h, 44 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5844952
Default Alt Text
D14822.1765120521.diff (9 KB)
Attached To
Mode
D14822: [lib][web][native] update `ReplaceMessageOperation` to decide if data should be included backup
Attached
Detach File
Event Timeline
Log In to Comment