Page MenuHomePhabricator

D9959.id33721.diff
No OneTemporary

D9959.id33721.diff

diff --git a/keyserver/src/responders/redux-state-responders.js b/keyserver/src/responders/redux-state-responders.js
--- a/keyserver/src/responders/redux-state-responders.js
+++ b/keyserver/src/responders/redux-state-responders.js
@@ -14,6 +14,7 @@
parsePendingThreadID,
createPendingThread,
} from 'lib/shared/thread-utils.js';
+import { canUseDatabaseOnWeb } from 'lib/shared/web-database.js';
import { entryStoreValidator } from 'lib/types/entry-types.js';
import { defaultCalendarFilters } from 'lib/types/filter-types.js';
import { inviteLinksStoreValidator } from 'lib/types/link-types.js';
@@ -89,7 +90,9 @@
viewer: Viewer,
request: InitialReduxStateRequest,
): Promise<InitialReduxStateResponse> {
- const { urlInfo } = request;
+ const { urlInfo, excludedData } = request;
+ const useDatabase = viewer.loggedIn && canUseDatabaseOnWeb(viewer.userID);
+
const hasNotAcknowledgedPoliciesPromise = hasAnyNotAcknowledgedPolicies(
viewer.id,
baseLegalPolicies,
@@ -153,6 +156,9 @@
})();
const threadStorePromise = (async () => {
+ if (excludedData.threadStore && useDatabase) {
+ return { threadInfos: {} };
+ }
const [{ threadInfos }, hasNotAcknowledgedPolicies] = await Promise.all([
threadInfoPromise,
hasNotAcknowledgedPoliciesPromise,
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
@@ -6,7 +6,11 @@
import type { Persistor } from 'redux-persist/es/types';
import { setClientDBStoreActionType } from 'lib/actions/client-db-store-actions.js';
+import type { ThreadStoreOperation } from 'lib/ops/thread-store-ops.js';
+import { canUseDatabaseOnWeb } from 'lib/shared/web-database.js';
+import type { RawThreadInfo } from 'lib/types/thread-types.js';
import { convertIDToNewSchema } from 'lib/utils/migration-utils.js';
+import { entries } from 'lib/utils/objects.js';
import { infoFromURL } from 'lib/utils/url-utils.js';
import { ashoatKeyserverID } from 'lib/utils/validation-utils.js';
@@ -15,7 +19,10 @@
useGetInitialReduxState,
} from './action-types.js';
import { useSelector } from './redux-utils.js';
-import { getClientStore } from '../database/utils/store.js';
+import {
+ getClientStore,
+ processDBStoreOperations,
+} from '../database/utils/store.js';
import Loading from '../loading.react.js';
type Props = {
@@ -49,23 +56,56 @@
thread: convertIDToNewSchema(urlInfo.thread, ashoatKeyserverID),
};
}
-
const clientDBStore = await getClientStore();
const payload = await callGetInitialReduxState({
urlInfo,
- excludedData: { threadStore: false },
+ excludedData: { threadStore: !!clientDBStore.threadStore },
});
const currentLoggedInUserID = payload.currentUserInfo?.anonymous
? undefined
: payload.currentUserInfo?.id;
+ const useDatabase = canUseDatabaseOnWeb(currentLoggedInUserID);
+
+ if (!currentLoggedInUserID || !useDatabase) {
+ dispatch({ type: setInitialReduxState, payload });
+ return;
+ }
- if (currentLoggedInUserID) {
+ if (clientDBStore.threadStore) {
+ // If there is data in the DB, populate the store
dispatch({
type: setClientDBStoreActionType,
payload: clientDBStore,
});
+ const { threadStore, ...rest } = payload;
+ dispatch({ type: setInitialReduxState, payload: rest });
+ return;
+ } else {
+ // When there is no data in the DB, it's necessary to migrate data
+ // from the keyserver payload to the DB
+ const {
+ threadStore: { threadInfos },
+ } = payload;
+
+ const threadStoreOperations: ThreadStoreOperation[] = entries(
+ threadInfos,
+ ).map(([id, threadInfo]: [string, RawThreadInfo]) => ({
+ type: 'replace',
+ payload: {
+ id,
+ threadInfo,
+ },
+ }));
+
+ await processDBStoreOperations({
+ threadStoreOperations,
+ draftStoreOperations: [],
+ messageStoreOperations: [],
+ reportStoreOperations: [],
+ userStoreOperations: [],
+ });
}
dispatch({ type: setInitialReduxState, payload });
} catch (err) {

File Metadata

Mime Type
text/plain
Expires
Sun, Nov 24, 6:22 AM (19 h, 36 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2573821
Default Alt Text
D9959.id33721.diff (4 KB)

Event Timeline