Page MenuHomePhorge

D14822.1765132211.diff
No OneTemporary

Size
9 KB
Referenced Files
None
Subscribers
None

D14822.1765132211.diff

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

Mime Type
text/plain
Expires
Sun, Dec 7, 6:30 PM (20 h, 33 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5844952
Default Alt Text
D14822.1765132211.diff (9 KB)

Event Timeline