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 @@ -39,6 +39,7 @@ ClientDBReport, ClientDBReportStoreOperation, } from '../ops/report-store-ops.js'; +import type { ClientDBSyncedMetadataEntry } from '../ops/synced-metadata-store-ops.js'; import type { ClientDBThreadStoreOperation, ThreadStoreOperation, @@ -79,6 +80,7 @@ +keyservers: $ReadOnlyArray, +communities: $ReadOnlyArray, +integrityThreadHashes: $ReadOnlyArray, + +syncedMetadata: $ReadOnlyArray, }; export type ClientStore = { 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 @@ -120,6 +120,7 @@ std::vector keyserverStoreVector; std::vector communityStoreVector; std::vector integrityStoreVector; + std::vector syncedMetadataStoreVector; try { draftsVector = DatabaseManager::getQueryExecutor().getAllDrafts(); messagesVector = @@ -136,6 +137,9 @@ DatabaseManager::getQueryExecutor().getAllCommunities(); integrityStoreVector = DatabaseManager::getQueryExecutor() .getAllIntegrityThreadHashes(); + syncedMetadataStoreVector = + DatabaseManager::getQueryExecutor().getAllSyncedMetadata(); + } catch (std::system_error &e) { error = e.what(); } @@ -162,6 +166,9 @@ auto integrityStoreVectorPtr = std::make_shared>( std::move(integrityStoreVector)); + auto syncedMetadataStoreVectorPtr = + std::make_shared>( + std::move(syncedMetadataStoreVector)); this->jsInvoker_->invokeAsync([&innerRt, draftsVectorPtr, messagesVectorPtr, @@ -172,6 +179,7 @@ keyserveStoreVectorPtr, communityStoreVectorPtr, integrityStoreVectorPtr, + syncedMetadataStoreVectorPtr, error, promise, draftStore = this->draftStore, @@ -181,8 +189,9 @@ userStore = this->userStore, keyserverStore = this->keyserverStore, communityStore = this->communityStore, - integrityStore = - this->integrityStore]() { + integrityStore = this->integrityStore, + syncedMetadataStore = + this->syncedMetadataStore]() { if (error.size()) { promise->reject(error); return; @@ -206,6 +215,9 @@ innerRt, communityStoreVectorPtr); jsi::Array jsiIntegrityStore = integrityStore.parseDBDataStore( innerRt, integrityStoreVectorPtr); + jsi::Array jsiSyncedMetadataStore = + syncedMetadataStore.parseDBDataStore( + innerRt, syncedMetadataStoreVectorPtr); auto jsiClientDBStore = jsi::Object(innerRt); jsiClientDBStore.setProperty(innerRt, "messages", jsiMessages); @@ -221,6 +233,8 @@ innerRt, "communities", jsiCommunityStore); jsiClientDBStore.setProperty( innerRt, "integrityThreadHashes", jsiIntegrityStore); + jsiClientDBStore.setProperty( + innerRt, "syncedMetadata", jsiSyncedMetadataStore); promise->resolve(std::move(jsiClientDBStore)); }); diff --git a/native/cpp/CommonCpp/NativeModules/PersistentStorageUtilities/DataStores/SyncedMetadataStore.cpp b/native/cpp/CommonCpp/NativeModules/PersistentStorageUtilities/DataStores/SyncedMetadataStore.cpp --- a/native/cpp/CommonCpp/NativeModules/PersistentStorageUtilities/DataStores/SyncedMetadataStore.cpp +++ b/native/cpp/CommonCpp/NativeModules/PersistentStorageUtilities/DataStores/SyncedMetadataStore.cpp @@ -20,7 +20,16 @@ jsi::Runtime &rt, std::shared_ptr> syncedMetadataVectorPtr) const { - jsi::Array jsiSyncedMetadata = jsi::Array(rt, 0); + size_t numSyncedMetadata = syncedMetadataVectorPtr->size(); + jsi::Array jsiSyncedMetadata = jsi::Array(rt, numSyncedMetadata); + size_t writeIdx = 0; + for (const SyncedMetadataEntry &syncedMetadataEntry : + *syncedMetadataVectorPtr) { + jsi::Object jsiSyncedMetadataEntry = jsi::Object(rt); + jsiSyncedMetadataEntry.setProperty(rt, "name", syncedMetadataEntry.name); + jsiSyncedMetadataEntry.setProperty(rt, "data", syncedMetadataEntry.data); + jsiSyncedMetadata.setValueAtIndex(rt, writeIdx++, jsiSyncedMetadataEntry); + } return jsiSyncedMetadata; } 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 @@ -299,6 +299,7 @@ keyservers: sqliteQueryExecutor.getAllKeyservers(), communities: sqliteQueryExecutor.getAllCommunities(), integrityThreadHashes: sqliteQueryExecutor.getAllIntegrityThreadHashes(), + syncedMetadata: [], }; }