diff --git a/lib/reducers/message-reducer.test.js b/lib/reducers/message-reducer.test.js --- a/lib/reducers/message-reducer.test.js +++ b/lib/reducers/message-reducer.test.js @@ -298,6 +298,7 @@ auxUserInfos: {}, threadActivityStore: {}, entries: {}, + messageStoreLocalMessageInfos: {}, }, }, { diff --git a/lib/types/store-ops-types.js b/lib/types/store-ops-types.js --- a/lib/types/store-ops-types.js +++ b/lib/types/store-ops-types.js @@ -11,8 +11,10 @@ import type { ThreadHashes } from './integrity-types.js'; import type { KeyserverInfos } from './keyserver-types.js'; import type { + MessageStoreLocalMessageInfos, ClientDBMessageInfo, ClientDBThreadMessageInfo, + ClientDBLocalMessageInfo, } from './message-types.js'; import type { ClientReportCreationRequest } from './report-types.js'; import type { OutboundP2PMessage } from './sqlite-types.js'; @@ -119,6 +121,7 @@ +auxUserInfos: $ReadOnlyArray, +threadActivityEntries: $ReadOnlyArray, +entries: $ReadOnlyArray, + +messageStoreLocalMessageInfos: $ReadOnlyArray, }; export type ClientStore = { @@ -136,4 +139,5 @@ +auxUserInfos: ?AuxUserInfos, +threadActivityStore: ?ThreadActivityStore, +entries: ?RawEntryInfos, + +messageStoreLocalMessageInfos: ?MessageStoreLocalMessageInfos, }; diff --git a/native/cpp/CommonCpp/NativeModules/CommCoreModule.cpp b/native/cpp/CommonCpp/NativeModules/CommCoreModule.cpp --- a/native/cpp/CommonCpp/NativeModules/CommCoreModule.cpp +++ b/native/cpp/CommonCpp/NativeModules/CommCoreModule.cpp @@ -125,6 +125,7 @@ std::vector auxUserStoreVector; std::vector threadActivityStoreVector; std::vector entryStoreVector; + std::vector messageStoreLocalMessageInfosVector; try { draftsVector = DatabaseManager::getQueryExecutor().getAllDrafts(); messagesVector = @@ -149,6 +150,9 @@ .getAllThreadActivityEntries(); entryStoreVector = DatabaseManager::getQueryExecutor().getAllEntries(); + messageStoreLocalMessageInfosVector = + DatabaseManager::getQueryExecutor() + .getAllMessageStoreLocalMessageInfos(); } catch (std::system_error &e) { error = e.what(); } @@ -186,6 +190,9 @@ std::move(threadActivityStoreVector)); auto entryStoreVectorPtr = std::make_shared>( std::move(entryStoreVector)); + auto messageStoreLocalMessageInfosVectorPtr = + std::make_shared>( + std::move(messageStoreLocalMessageInfosVector)); this->jsInvoker_->invokeAsync([&innerRt, draftsVectorPtr, messagesVectorPtr, @@ -200,6 +207,7 @@ auxUserStoreVectorPtr, threadActivityStoreVectorPtr, entryStoreVectorPtr, + messageStoreLocalMessageInfosVectorPtr, error, promise, draftStore = this->draftStore, @@ -249,6 +257,9 @@ innerRt, threadActivityStoreVectorPtr); jsi::Array jsiEntryStore = entryStore.parseDBDataStore(innerRt, entryStoreVectorPtr); + jsi::Array jsiMessageStoreLocalMessageInfos = + messageStore.parseDBMessageStoreLocalMessageInfos( + innerRt, messageStoreLocalMessageInfosVectorPtr); auto jsiClientDBStore = jsi::Object(innerRt); jsiClientDBStore.setProperty(innerRt, "messages", jsiMessages); @@ -271,6 +282,10 @@ jsiClientDBStore.setProperty( innerRt, "threadActivityEntries", jsiThreadActivityStore); jsiClientDBStore.setProperty(innerRt, "entries", jsiEntryStore); + jsiClientDBStore.setProperty( + innerRt, + "messageStoreLocalMessageInfos", + jsiMessageStoreLocalMessageInfos); promise->resolve(std::move(jsiClientDBStore)); }); diff --git a/native/cpp/CommonCpp/NativeModules/PersistentStorageUtilities/DataStores/MessageStore.cpp b/native/cpp/CommonCpp/NativeModules/PersistentStorageUtilities/DataStores/MessageStore.cpp --- a/native/cpp/CommonCpp/NativeModules/PersistentStorageUtilities/DataStores/MessageStore.cpp +++ b/native/cpp/CommonCpp/NativeModules/PersistentStorageUtilities/DataStores/MessageStore.cpp @@ -162,4 +162,23 @@ return jsiThreads; } +jsi::Array MessageStore::parseDBMessageStoreLocalMessageInfos( + jsi::Runtime &rt, + std::shared_ptr> localMessageInfosVectorPtr) + const { + size_t numLocalMessageInfos = localMessageInfosVectorPtr->size(); + jsi::Array jsiLocalMessageInfos = jsi::Array(rt, numLocalMessageInfos); + size_t writeIdx = 0; + + for (const LocalMessageInfo &localMessageInfo : *localMessageInfosVectorPtr) { + jsi::Object jsiLocalMessageInfo = jsi::Object(rt); + jsiLocalMessageInfo.setProperty(rt, "id", localMessageInfo.id); + jsiLocalMessageInfo.setProperty( + rt, "localMessageInfo", localMessageInfo.local_message_info); + + jsiLocalMessageInfos.setValueAtIndex(rt, writeIdx++, jsiLocalMessageInfo); + } + return jsiLocalMessageInfos; +} + } // namespace comm diff --git a/web/shared-worker/utils/store.js b/web/shared-worker/utils/store.js --- a/web/shared-worker/utils/store.js +++ b/web/shared-worker/utils/store.js @@ -39,6 +39,7 @@ auxUserInfos: null, threadActivityStore: null, entries: null, + messageStoreLocalMessageInfos: null, }; const data = await sharedWorker.schedule({ type: workerRequestMessageTypes.GET_CLIENT_STORE, diff --git a/web/shared-worker/worker/process-operations.js b/web/shared-worker/worker/process-operations.js --- a/web/shared-worker/worker/process-operations.js +++ b/web/shared-worker/worker/process-operations.js @@ -592,6 +592,8 @@ auxUserInfos: sqliteQueryExecutor.getAllAuxUserInfos(), threadActivityEntries: sqliteQueryExecutor.getAllThreadActivityEntries(), entries: sqliteQueryExecutor.getAllEntries(), + messageStoreLocalMessageInfos: + sqliteQueryExecutor.getAllMessageStoreLocalMessageInfos(), }; }