mirror of
https://github.com/signalapp/Signal-Desktop.git
synced 2026-04-02 00:07:56 +01:00
Add feature flag for local backups
This commit is contained in:
@@ -30,34 +30,36 @@ const log = createLogger('RemoteConfig');
|
|||||||
|
|
||||||
// Semver flags must always be set to a valid semver (no empty enabled-only keys)
|
// Semver flags must always be set to a valid semver (no empty enabled-only keys)
|
||||||
const SemverKeys = [
|
const SemverKeys = [
|
||||||
|
'desktop.adminDelete.receive.beta',
|
||||||
|
'desktop.adminDelete.receive.prod',
|
||||||
|
'desktop.adminDelete.send.beta',
|
||||||
|
'desktop.adminDelete.send.prod',
|
||||||
|
'desktop.binaryServiceId.beta',
|
||||||
|
'desktop.binaryServiceId.prod',
|
||||||
'desktop.callQualitySurvey.beta',
|
'desktop.callQualitySurvey.beta',
|
||||||
'desktop.callQualitySurvey.prod',
|
'desktop.callQualitySurvey.prod',
|
||||||
'desktop.donationPaypal.beta',
|
'desktop.donationPaypal.beta',
|
||||||
'desktop.donationPaypal.prod',
|
'desktop.donationPaypal.prod',
|
||||||
'desktop.groupMemberLabels.edit.beta',
|
'desktop.groupMemberLabels.edit.beta',
|
||||||
'desktop.groupMemberLabels.edit.prod',
|
'desktop.groupMemberLabels.edit.prod',
|
||||||
'desktop.adminDelete.receive.beta',
|
'desktop.keyTransparency.beta',
|
||||||
'desktop.adminDelete.receive.prod',
|
'desktop.keyTransparency.prod',
|
||||||
'desktop.adminDelete.send.beta',
|
'desktop.localBackups.beta',
|
||||||
'desktop.adminDelete.send.prod',
|
'desktop.localBackups.prod',
|
||||||
'desktop.pinnedMessages.receive.beta',
|
'desktop.pinnedMessages.receive.beta',
|
||||||
'desktop.pinnedMessages.receive.prod',
|
'desktop.pinnedMessages.receive.prod',
|
||||||
'desktop.pinnedMessages.send.beta',
|
'desktop.pinnedMessages.send.beta',
|
||||||
'desktop.pinnedMessages.send.prod',
|
'desktop.pinnedMessages.send.prod',
|
||||||
'desktop.plaintextExport.beta',
|
'desktop.plaintextExport.beta',
|
||||||
'desktop.plaintextExport.prod',
|
'desktop.plaintextExport.prod',
|
||||||
|
'desktop.pollSend1to1.beta',
|
||||||
|
'desktop.pollSend1to1.prod',
|
||||||
'desktop.remoteMegaphone.beta',
|
'desktop.remoteMegaphone.beta',
|
||||||
'desktop.remoteMegaphone.prod',
|
'desktop.remoteMegaphone.prod',
|
||||||
'desktop.remoteMute.send.beta',
|
'desktop.remoteMute.send.beta',
|
||||||
'desktop.remoteMute.send.prod',
|
'desktop.remoteMute.send.prod',
|
||||||
'desktop.retireAccessKeyGroupSend.beta',
|
'desktop.retireAccessKeyGroupSend.beta',
|
||||||
'desktop.retireAccessKeyGroupSend.prod',
|
'desktop.retireAccessKeyGroupSend.prod',
|
||||||
'desktop.keyTransparency.beta',
|
|
||||||
'desktop.keyTransparency.prod',
|
|
||||||
'desktop.binaryServiceId.beta',
|
|
||||||
'desktop.binaryServiceId.prod',
|
|
||||||
'desktop.pollSend1to1.beta',
|
|
||||||
'desktop.pollSend1to1.prod',
|
|
||||||
] as const;
|
] as const;
|
||||||
|
|
||||||
export type SemverKeyType = ArrayValues<typeof SemverKeys>;
|
export type SemverKeyType = ArrayValues<typeof SemverKeys>;
|
||||||
@@ -72,10 +74,11 @@ const ScalarKeys = [
|
|||||||
'desktop.loggingErrorToasts',
|
'desktop.loggingErrorToasts',
|
||||||
'desktop.mediaQuality.levels',
|
'desktop.mediaQuality.levels',
|
||||||
'desktop.messageCleanup',
|
'desktop.messageCleanup',
|
||||||
|
'desktop.recentGifs.allowLegacyTenorCdnUrls',
|
||||||
'desktop.retryRespondMaxAge',
|
'desktop.retryRespondMaxAge',
|
||||||
'desktop.senderKey.retry',
|
'desktop.senderKey.retry',
|
||||||
'desktop.senderKeyMaxAge',
|
'desktop.senderKeyMaxAge',
|
||||||
'desktop.recentGifs.allowLegacyTenorCdnUrls',
|
'global.adminDeleteMaxAgeInSeconds',
|
||||||
'global.attachments.maxBytes',
|
'global.attachments.maxBytes',
|
||||||
'global.attachments.maxReceiveBytes',
|
'global.attachments.maxReceiveBytes',
|
||||||
'global.backups.mediaTierFallbackCdnNumber',
|
'global.backups.mediaTierFallbackCdnNumber',
|
||||||
@@ -85,10 +88,9 @@ const ScalarKeys = [
|
|||||||
'global.messageQueueTimeInSeconds',
|
'global.messageQueueTimeInSeconds',
|
||||||
'global.nicknames.max',
|
'global.nicknames.max',
|
||||||
'global.nicknames.min',
|
'global.nicknames.min',
|
||||||
|
'global.normalDeleteMaxAgeInSeconds',
|
||||||
'global.pinned_message_limit',
|
'global.pinned_message_limit',
|
||||||
'global.textAttachmentLimitBytes',
|
'global.textAttachmentLimitBytes',
|
||||||
'global.normalDeleteMaxAgeInSeconds',
|
|
||||||
'global.adminDeleteMaxAgeInSeconds',
|
|
||||||
] as const;
|
] as const;
|
||||||
|
|
||||||
// These keys should always match those in Net.REMOTE_CONFIG_KEYS, prefixed by
|
// These keys should always match those in Net.REMOTE_CONFIG_KEYS, prefixed by
|
||||||
|
|||||||
@@ -80,7 +80,6 @@ import { renderToastManagerWithoutMegaphone } from './ToastManager.preload.js';
|
|||||||
import { useToastActions } from '../ducks/toast.preload.js';
|
import { useToastActions } from '../ducks/toast.preload.js';
|
||||||
import { DataReader, DataWriter } from '../../sql/Client.preload.js';
|
import { DataReader, DataWriter } from '../../sql/Client.preload.js';
|
||||||
import { deleteAllMyStories } from '../../util/deleteAllMyStories.preload.js';
|
import { deleteAllMyStories } from '../../util/deleteAllMyStories.preload.js';
|
||||||
import { isLocalBackupsEnabled } from '../../util/isLocalBackupsEnabled.dom.js';
|
|
||||||
import { SmartPreferencesDonations } from './PreferencesDonations.preload.js';
|
import { SmartPreferencesDonations } from './PreferencesDonations.preload.js';
|
||||||
import { useDonationsActions } from '../ducks/donations.preload.js';
|
import { useDonationsActions } from '../ducks/donations.preload.js';
|
||||||
import { generateDonationReceiptBlob } from '../../util/generateDonationReceipt.dom.js';
|
import { generateDonationReceiptBlob } from '../../util/generateDonationReceipt.dom.js';
|
||||||
@@ -580,7 +579,12 @@ export function SmartPreferences(): React.JSX.Element | null {
|
|||||||
Settings.isContentProtectionSupported(OS);
|
Settings.isContentProtectionSupported(OS);
|
||||||
const isContentProtectionNeeded = Settings.isContentProtectionNeeded(OS);
|
const isContentProtectionNeeded = Settings.isContentProtectionNeeded(OS);
|
||||||
|
|
||||||
const backupLocalBackupsEnabled = isLocalBackupsEnabled(items.remoteConfig);
|
const backupLocalBackupsEnabled = isFeaturedEnabledSelector({
|
||||||
|
betaKey: 'desktop.localBackups.beta',
|
||||||
|
prodKey: 'desktop.localBackups.prod',
|
||||||
|
currentVersion: version,
|
||||||
|
remoteConfig: items.remoteConfig,
|
||||||
|
});
|
||||||
const backupFreeMediaDays = getMessageQueueTime(items.remoteConfig) / DAY;
|
const backupFreeMediaDays = getMessageQueueTime(items.remoteConfig) / DAY;
|
||||||
|
|
||||||
const isPlaintextExportEnabled = isFeaturedEnabledSelector({
|
const isPlaintextExportEnabled = isFeaturedEnabledSelector({
|
||||||
|
|||||||
@@ -1,26 +1,11 @@
|
|||||||
// Copyright 2025 Signal Messenger, LLC
|
// Copyright 2025 Signal Messenger, LLC
|
||||||
// SPDX-License-Identifier: AGPL-3.0-only
|
// SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
import * as RemoteConfig from '../RemoteConfig.dom.js';
|
import { isFeaturedEnabledNoRedux } from './isFeatureEnabled.dom.js';
|
||||||
import { isTestOrMockEnvironment } from '../environment.std.js';
|
|
||||||
import { isStagingServer } from './isStagingServer.dom.js';
|
|
||||||
import { isNightly } from './version.std.js';
|
|
||||||
|
|
||||||
export function isLocalBackupsEnabled(
|
export function isLocalBackupsEnabled(): boolean {
|
||||||
reduxConfig?: RemoteConfig.ConfigMapType
|
return isFeaturedEnabledNoRedux({
|
||||||
): boolean {
|
betaKey: 'desktop.localBackups.beta',
|
||||||
if (isStagingServer() || isTestOrMockEnvironment()) {
|
prodKey: 'desktop.localBackups.prod',
|
||||||
return true;
|
});
|
||||||
}
|
|
||||||
|
|
||||||
if (RemoteConfig.isEnabled('desktop.internalUser', reduxConfig)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
const version = window.getVersion?.();
|
|
||||||
if (version != null) {
|
|
||||||
return isNightly(version);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user