Page MenuHomePhorge

D14942.1765071645.diff
No OneTemporary

Size
4 KB
Referenced Files
None
Subscribers
None

D14942.1765071645.diff

diff --git a/lib/backup/use-user-data-restore.js b/lib/backup/use-user-data-restore.js
--- a/lib/backup/use-user-data-restore.js
+++ b/lib/backup/use-user-data-restore.js
@@ -76,8 +76,8 @@
}
function useUserDataRestore(): (
- backupData: QRAuthBackupData,
- identityAuthResult: IdentityAuthResult,
+ backupData: ?QRAuthBackupData,
+ identityAuthResult: ?IdentityAuthResult,
) => Promise<void> {
const dispatch = useDispatch();
const dispatchActionPromise = useDispatchActionPromise();
@@ -86,8 +86,8 @@
return React.useCallback(
async (
- backupData: QRAuthBackupData,
- identityAuthResult: IdentityAuthResult,
+ backupData: ?QRAuthBackupData,
+ identityAuthResult: ?IdentityAuthResult,
) => {
const { sqliteAPI } = getConfig();
@@ -125,6 +125,10 @@
// 1. Download database and apply all logs
if (startStepIndex === 0) {
+ invariant(
+ backupData && identityAuthResult,
+ 'backupData and identityAuthResult should exist when starting from scratch',
+ );
const restoreUserDataPromise = sqliteAPI.restoreUserData(
backupData,
identityAuthResult,
@@ -280,7 +284,7 @@
// 6. Populate store
const clientDBStore = await sqliteAPI.getClientDBStore(
databaseIdentifier.MAIN,
- identityAuthResult.userID,
+ identityAuthResult?.userID,
);
dispatch({
@@ -292,4 +296,4 @@
);
}
-export { useUserDataRestore };
+export { useUserDataRestore, getStoreAndDatabaseVersions };
diff --git a/lib/handlers/restore-backup-handler.react.js b/lib/handlers/restore-backup-handler.react.js
new file mode 100644
--- /dev/null
+++ b/lib/handlers/restore-backup-handler.react.js
@@ -0,0 +1,35 @@
+// @flow
+
+import * as React from 'react';
+
+import { useUserDataRestore } from '../backup/use-user-data-restore.js';
+import { usePersistedStateLoaded } from '../selectors/app-state-selectors.js';
+import { useSelector } from '../utils/redux-utils.js';
+import { fullBackupSupport } from '../utils/services-utils.js';
+
+function RestoreBackupHandler(): React.Node {
+ const persistedStateLoaded = usePersistedStateLoaded();
+ // We want this handler to be executed only once
+ const executed = React.useRef(false);
+ const restoreBackupState = useSelector(state => state.restoreBackupState);
+ const userDataRestore = useUserDataRestore();
+
+ React.useEffect(() => {
+ if (!fullBackupSupport || !persistedStateLoaded || executed.current) {
+ return;
+ }
+ if (
+ restoreBackupState.status !== 'user_data_restore_step_completed' &&
+ restoreBackupState.status !== 'user_data_restore_failed'
+ ) {
+ return;
+ }
+
+ void userDataRestore();
+ executed.current = true;
+ }, [persistedStateLoaded, restoreBackupState.status, userDataRestore]);
+
+ return null;
+}
+
+export { RestoreBackupHandler };
diff --git a/native/root.react.js b/native/root.react.js
--- a/native/root.react.js
+++ b/native/root.react.js
@@ -42,6 +42,7 @@
import { DBOpsHandler } from 'lib/handlers/db-ops-handler.react.js';
import { HoldersHandler } from 'lib/handlers/holders-handler.react.js';
import { InitialStateSharingHandler } from 'lib/handlers/initial-state-sharing-handler.react.js';
+import { RestoreBackupHandler } from 'lib/handlers/restore-backup-handler.react.js';
import { SyncCurrentUserInfoHandler } from 'lib/handlers/sync-current-user-info-handler.react.js';
import { SyncStoreVersionHandler } from 'lib/handlers/sync-store-version-handler.react.js';
import { TunnelbrokerDeviceTokenHandler } from 'lib/handlers/tunnelbroker-device-token-handler.react.js';
@@ -303,6 +304,7 @@
<TunnelbrokerDeviceTokenHandler />
<SyncStoreVersionHandler />
<SyncCurrentUserInfoHandler />
+ <RestoreBackupHandler />
<HoldersHandler />
</>
);
diff --git a/web/app.react.js b/web/app.react.js
--- a/web/app.react.js
+++ b/web/app.react.js
@@ -29,6 +29,7 @@
import SyncCommunityStoreHandler from 'lib/components/sync-community-store-handler.react.js';
import { DBOpsHandler } from 'lib/handlers/db-ops-handler.react.js';
import { HoldersHandler } from 'lib/handlers/holders-handler.react.js';
+import { RestoreBackupHandler } from 'lib/handlers/restore-backup-handler.react.js';
import { SyncCurrentUserInfoHandler } from 'lib/handlers/sync-current-user-info-handler.react.js';
import { SyncStoreVersionHandler } from 'lib/handlers/sync-store-version-handler.react.js';
import { TunnelbrokerDeviceTokenHandler } from 'lib/handlers/tunnelbroker-device-token-handler.react.js';
@@ -268,6 +269,7 @@
<TunnelbrokerDeviceTokenHandler />
<SyncStoreVersionHandler />
<SyncCurrentUserInfoHandler />
+ <RestoreBackupHandler />
<FarcasterChannelPrefetchHandler />
<FarcasterDataHandler />
<AutoJoinCommunityHandler />

File Metadata

Mime Type
text/plain
Expires
Sun, Dec 7, 1:40 AM (2 h, 38 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5842010
Default Alt Text
D14942.1765071645.diff (4 KB)

Event Timeline