Changeset View
Changeset View
Standalone View
Standalone View
web/shared-worker/utils/store.js
// @flow | // @flow | ||||
import { communityStoreOpsHandlers } from 'lib/ops/community-store-ops.js'; | import { communityStoreOpsHandlers } from 'lib/ops/community-store-ops.js'; | ||||
import { integrityStoreOpsHandlers } from 'lib/ops/integrity-store-ops.js'; | import { integrityStoreOpsHandlers } from 'lib/ops/integrity-store-ops.js'; | ||||
import { keyserverStoreOpsHandlers } from 'lib/ops/keyserver-store-ops.js'; | import { keyserverStoreOpsHandlers } from 'lib/ops/keyserver-store-ops.js'; | ||||
import { reportStoreOpsHandlers } from 'lib/ops/report-store-ops.js'; | import { reportStoreOpsHandlers } from 'lib/ops/report-store-ops.js'; | ||||
import { syncedMetadataStoreOpsHandlers } from 'lib/ops/synced-metadata-store-ops.js'; | |||||
import { threadStoreOpsHandlers } from 'lib/ops/thread-store-ops.js'; | import { threadStoreOpsHandlers } from 'lib/ops/thread-store-ops.js'; | ||||
import { canUseDatabaseOnWeb } from 'lib/shared/web-database.js'; | import { canUseDatabaseOnWeb } from 'lib/shared/web-database.js'; | ||||
import type { | import type { | ||||
ClientStore, | ClientStore, | ||||
StoreOperations, | StoreOperations, | ||||
} from 'lib/types/store-ops-types.js'; | } from 'lib/types/store-ops-types.js'; | ||||
import { defaultWebState } from '../../redux/default-state.js'; | import { defaultWebState } from '../../redux/default-state.js'; | ||||
import { workerRequestMessageTypes } from '../../types/worker-types.js'; | import { workerRequestMessageTypes } from '../../types/worker-types.js'; | ||||
import { getCommSharedWorker } from '../shared-worker-provider.js'; | import { getCommSharedWorker } from '../shared-worker-provider.js'; | ||||
async function getClientDBStore(): Promise<ClientStore> { | async function getClientDBStore(): Promise<ClientStore> { | ||||
const sharedWorker = await getCommSharedWorker(); | const sharedWorker = await getCommSharedWorker(); | ||||
let result: ClientStore = { | let result: ClientStore = { | ||||
currentUserID: null, | currentUserID: null, | ||||
drafts: [], | drafts: [], | ||||
messages: null, | messages: null, | ||||
threadStore: null, | threadStore: null, | ||||
messageStoreThreads: null, | messageStoreThreads: null, | ||||
reports: null, | reports: null, | ||||
users: null, | users: null, | ||||
keyserverInfos: defaultWebState.keyserverStore.keyserverInfos, | keyserverInfos: defaultWebState.keyserverStore.keyserverInfos, | ||||
communityInfos: null, | communityInfos: null, | ||||
threadHashes: null, | threadHashes: null, | ||||
syncedMetadata: null, | |||||
}; | }; | ||||
const data = await sharedWorker.schedule({ | const data = await sharedWorker.schedule({ | ||||
type: workerRequestMessageTypes.GET_CLIENT_STORE, | type: workerRequestMessageTypes.GET_CLIENT_STORE, | ||||
}); | }); | ||||
if (data?.store?.drafts) { | if (data?.store?.drafts) { | ||||
result = { | result = { | ||||
...result, | ...result, | ||||
drafts: data.store.drafts, | drafts: data.store.drafts, | ||||
▲ Show 20 Lines • Show All 48 Lines • ▼ Show 20 Lines | |||||
): Promise<void> { | ): Promise<void> { | ||||
const { | const { | ||||
draftStoreOperations, | draftStoreOperations, | ||||
threadStoreOperations, | threadStoreOperations, | ||||
reportStoreOperations, | reportStoreOperations, | ||||
keyserverStoreOperations, | keyserverStoreOperations, | ||||
communityStoreOperations, | communityStoreOperations, | ||||
integrityStoreOperations, | integrityStoreOperations, | ||||
syncedMetadataStoreOperations, | |||||
} = storeOperations; | } = storeOperations; | ||||
const canUseDatabase = canUseDatabaseOnWeb(userID); | const canUseDatabase = canUseDatabaseOnWeb(userID); | ||||
const convertedThreadStoreOperations = canUseDatabase | const convertedThreadStoreOperations = canUseDatabase | ||||
? threadStoreOpsHandlers.convertOpsToClientDBOps(threadStoreOperations) | ? threadStoreOpsHandlers.convertOpsToClientDBOps(threadStoreOperations) | ||||
: []; | : []; | ||||
const convertedReportStoreOperations = | const convertedReportStoreOperations = | ||||
reportStoreOpsHandlers.convertOpsToClientDBOps(reportStoreOperations); | reportStoreOpsHandlers.convertOpsToClientDBOps(reportStoreOperations); | ||||
const convertedKeyserverStoreOperations = | const convertedKeyserverStoreOperations = | ||||
keyserverStoreOpsHandlers.convertOpsToClientDBOps(keyserverStoreOperations); | keyserverStoreOpsHandlers.convertOpsToClientDBOps(keyserverStoreOperations); | ||||
const convertedCommunityStoreOperations = | const convertedCommunityStoreOperations = | ||||
communityStoreOpsHandlers.convertOpsToClientDBOps(communityStoreOperations); | communityStoreOpsHandlers.convertOpsToClientDBOps(communityStoreOperations); | ||||
const convertedIntegrityStoreOperations = | const convertedIntegrityStoreOperations = | ||||
integrityStoreOpsHandlers.convertOpsToClientDBOps(integrityStoreOperations); | integrityStoreOpsHandlers.convertOpsToClientDBOps(integrityStoreOperations); | ||||
const convertedSyncedMetadataStoreOperations = | |||||
syncedMetadataStoreOpsHandlers.convertOpsToClientDBOps( | |||||
syncedMetadataStoreOperations, | |||||
); | |||||
if ( | if ( | ||||
convertedThreadStoreOperations.length === 0 && | convertedThreadStoreOperations.length === 0 && | ||||
convertedReportStoreOperations.length === 0 && | convertedReportStoreOperations.length === 0 && | ||||
draftStoreOperations.length === 0 && | draftStoreOperations.length === 0 && | ||||
convertedKeyserverStoreOperations.length === 0 && | convertedKeyserverStoreOperations.length === 0 && | ||||
convertedCommunityStoreOperations.length === 0 && | convertedCommunityStoreOperations.length === 0 && | ||||
convertedIntegrityStoreOperations.length === 0 | convertedIntegrityStoreOperations.length === 0 && | ||||
convertedSyncedMetadataStoreOperations.length === 0 | |||||
) { | ) { | ||||
return; | return; | ||||
} | } | ||||
const sharedWorker = await getCommSharedWorker(); | const sharedWorker = await getCommSharedWorker(); | ||||
const isSupported = await sharedWorker.isSupported(); | const isSupported = await sharedWorker.isSupported(); | ||||
if (!isSupported) { | if (!isSupported) { | ||||
return; | return; | ||||
} | } | ||||
try { | try { | ||||
await sharedWorker.schedule({ | await sharedWorker.schedule({ | ||||
type: workerRequestMessageTypes.PROCESS_STORE_OPERATIONS, | type: workerRequestMessageTypes.PROCESS_STORE_OPERATIONS, | ||||
storeOperations: { | storeOperations: { | ||||
draftStoreOperations, | draftStoreOperations, | ||||
reportStoreOperations: convertedReportStoreOperations, | reportStoreOperations: convertedReportStoreOperations, | ||||
threadStoreOperations: convertedThreadStoreOperations, | threadStoreOperations: convertedThreadStoreOperations, | ||||
keyserverStoreOperations: convertedKeyserverStoreOperations, | keyserverStoreOperations: convertedKeyserverStoreOperations, | ||||
communityStoreOperations: convertedCommunityStoreOperations, | communityStoreOperations: convertedCommunityStoreOperations, | ||||
integrityStoreOperations: convertedIntegrityStoreOperations, | integrityStoreOperations: convertedIntegrityStoreOperations, | ||||
syncedMetadataStoreOperations: convertedSyncedMetadataStoreOperations, | |||||
}, | }, | ||||
}); | }); | ||||
} catch (e) { | } catch (e) { | ||||
console.log(e); | console.log(e); | ||||
if (canUseDatabase) { | if (canUseDatabase) { | ||||
window.alert(e.message); | window.alert(e.message); | ||||
if (threadStoreOperations.length > 0) { | if (threadStoreOperations.length > 0) { | ||||
await sharedWorker.init({ clearDatabase: true }); | await sharedWorker.init({ clearDatabase: true }); | ||||
location.reload(); | location.reload(); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
export { getClientDBStore, processDBStoreOperations }; | export { getClientDBStore, processDBStoreOperations }; |