diff --git a/native/backup/backup-handler-context-provider.js b/native/backup/backup-handler-context-provider.js --- a/native/backup/backup-handler-context-provider.js +++ b/native/backup/backup-handler-context-provider.js @@ -16,6 +16,8 @@ import { useStaffAlert } from 'lib/shared/staff-utils.js'; import { useTunnelbroker } from 'lib/tunnelbroker/tunnelbroker-context.js'; import { type LocalLatestBackupInfo } from 'lib/types/backup-types.js'; +import { databaseIdentifier } from 'lib/types/database-identifier-types.js'; +import { getConfig } from 'lib/utils/config.js'; import { rawDeviceListFromSignedList } from 'lib/utils/device-list-utils.js'; import { getMessageForException } from 'lib/utils/errors.js'; import { useDispatchActionPromise } from 'lib/utils/redux-promise-utils.js'; @@ -66,6 +68,9 @@ const latestBackupInfo = useSelector( state => state.backupStore.latestBackupInfo, ); + const latestDatabaseVersion = useSelector( + state => state.backupStore.latestDatabaseVersion, + ); const loggedIn = useSelector(isLoggedIn); const isBackground = useSelector( state => state.lifecycleState === 'background', @@ -181,12 +186,23 @@ currentRawDeviceList.devices.length > 0 && currentRawDeviceList.devices[0] === deviceID; + step = 'checking database version'; + let databaseSchemaChanged = false; + if (isPrimary && fullBackupSupport) { + const { sqliteAPI } = getConfig(); + const databaseVersion = await sqliteAPI.getDatabaseVersion( + databaseIdentifier.MAIN, + ); + databaseSchemaChanged = databaseVersion !== latestDatabaseVersion; + } + step = 'computing conditions'; const shouldDoMigration = usingRestoreFlow && !currentDeviceList.curPrimarySignature; const shouldUploadUserKeys = isPrimary && !latestBackupInfo; const shouldUploadUserData = - isPrimary && checkIfCompactionNeeded(latestBackupInfo); + isPrimary && + (checkIfCompactionNeeded(latestBackupInfo) || databaseSchemaChanged); // Tunnelbroker connection is required to broadcast // device list updates after migration. @@ -236,7 +252,8 @@ dispatch, getCurrentIdentityUserState, latestBackupInfo, - ownRawDeviceList, + latestDatabaseVersion, + ownRawDeviceList?.devices, performBackupUpload, performMigrationToNewFlow, showAlertToStaff,