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 @@ -5,6 +5,7 @@ import type { ClientDBCommunityStoreOperation } from 'lib/ops/community-store-ops.js'; import type { ClientDBDMOperationStoreOperation } from 'lib/ops/dm-operations-store-ops.js'; import type { ClientDBEntryStoreOperation } from 'lib/ops/entries-store-ops.js'; +import type { ClientDBHolderStoreOperation } from 'lib/ops/holder-store-ops.js'; import type { ClientDBIntegrityStoreOperation } from 'lib/ops/integrity-store-ops.js'; import type { ClientDBKeyserverStoreOperation } from 'lib/ops/keyserver-store-ops.js'; import type { ClientDBMessageStoreOperation } from 'lib/ops/message-store-ops.js'; @@ -385,6 +386,7 @@ entryStoreOperations, messageSearchStoreOperations, dmOperationStoreOperations, + holderStoreOperations, } = storeOperations; try { @@ -499,6 +501,13 @@ module, ); } + if (holderStoreOperations && holderStoreOperations.length > 0) { + processHolderStoreOperations( + sqliteQueryExecutor, + holderStoreOperations, + module, + ); + } sqliteQueryExecutor.commitTransaction(); } catch (e) { sqliteQueryExecutor.rollbackTransaction(); @@ -672,6 +681,37 @@ } } +function processHolderStoreOperations( + sqliteQueryExecutor: SQLiteQueryExecutor, + operations: $ReadOnlyArray, + module: EmscriptenModule, +) { + for (const operation: ClientDBHolderStoreOperation of operations) { + try { + if (operation.type === 'remove_holders') { + const { hashes } = operation.payload; + sqliteQueryExecutor.removeHolders(hashes); + } else if (operation.type === 'replace_holders') { + const { items } = operation.payload; + for (const item of items) { + sqliteQueryExecutor.replaceHolder(item); + } + } else { + throw new Error('Unsupported holder operation'); + } + } catch (e) { + throw new Error( + `Error while processing ${ + operation.type + } holder operation: ${getProcessingStoreOpsExceptionMessage( + e, + module, + )}`, + ); + } + } +} + function getClientStoreFromQueryExecutor( sqliteQueryExecutor: SQLiteQueryExecutor, ): ClientDBStore {