aboutsummaryrefslogtreecommitdiffstats
path: root/src/containers/settings/EditSettingsScreen.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/containers/settings/EditSettingsScreen.tsx')
-rw-r--r--src/containers/settings/EditSettingsScreen.tsx244
1 files changed, 156 insertions, 88 deletions
diff --git a/src/containers/settings/EditSettingsScreen.tsx b/src/containers/settings/EditSettingsScreen.tsx
index fdd9bd8bc..31e8d6484 100644
--- a/src/containers/settings/EditSettingsScreen.tsx
+++ b/src/containers/settings/EditSettingsScreen.tsx
@@ -341,6 +341,32 @@ const messages = defineMessages({
341 id: 'settings.app.form.keepAllWorkspacesLoaded', 341 id: 'settings.app.form.keepAllWorkspacesLoaded',
342 defaultMessage: 'Keep all workspaces loaded', 342 defaultMessage: 'Keep all workspaces loaded',
343 }, 343 },
344 downloadFolderPath: {
345 id: 'settings.app.form.downloadFolderPath',
346 defaultMessage:
347 'Default download folder (leave blank to be prompted for each download)',
348 },
349 restartDialogTitle: {
350 id: 'settings.app.restart.restartDialogTitle',
351 defaultMessage: 'Ferdium - Relaunch Application',
352 },
353 restartNow: {
354 id: 'settings.app.restart.restartNow',
355 defaultMessage: 'Restart now',
356 },
357 restartLater: {
358 id: 'settings.app.restart.restartLater',
359 defaultMessage: 'Restart later',
360 },
361 restartDialogMessage: {
362 id: 'settings.app.restart.restartDialogMessage',
363 defaultMessage: 'Do you want to relaunch Ferdium?',
364 },
365 restartDialogDetail: {
366 id: 'settings.app.restart.restartDialogDetail',
367 defaultMessage:
368 'You made a change that requires a restart. This will close Ferdium and restart it.',
369 },
344}); 370});
345 371
346interface EditSettingsScreenProps extends StoresProps, WrappedComponentProps {} 372interface EditSettingsScreenProps extends StoresProps, WrappedComponentProps {}
@@ -364,6 +390,7 @@ class EditSettingsScreen extends Component<
364 } 390 }
365 391
366 onSubmit(settingsData) { 392 onSubmit(settingsData) {
393 const { intl } = this.props;
367 const { todos, workspaces } = this.props.stores; 394 const { todos, workspaces } = this.props.stores;
368 const { 395 const {
369 app, 396 app,
@@ -386,97 +413,130 @@ class EditSettingsScreen extends Component<
386 413
387 debug(`Updating settings store with data: ${settingsData}`); 414 debug(`Updating settings store with data: ${settingsData}`);
388 415
416 const { app: currentSettings } = this.props.stores.settings.all;
417
418 const newSettings = {
419 runInBackground: Boolean(settingsData.runInBackground),
420 enableSystemTray: Boolean(settingsData.enableSystemTray),
421 reloadAfterResume: Boolean(settingsData.reloadAfterResume),
422 reloadAfterResumeTime: Number(settingsData.reloadAfterResumeTime),
423 startMinimized: Boolean(settingsData.startMinimized),
424 confirmOnQuit: Boolean(settingsData.confirmOnQuit),
425 minimizeToSystemTray: Boolean(settingsData.minimizeToSystemTray),
426 closeToSystemTray: Boolean(settingsData.closeToSystemTray),
427 privateNotifications: Boolean(settingsData.privateNotifications),
428 clipboardNotifications: Boolean(settingsData.clipboardNotifications),
429 notifyTaskBarOnMessage: Boolean(settingsData.notifyTaskBarOnMessage),
430 isTwoFactorAutoCatcherEnabled: Boolean(
431 settingsData.isTwoFactorAutoCatcherEnabled,
432 ),
433 twoFactorAutoCatcherMatcher: settingsData.twoFactorAutoCatcherMatcher,
434 navigationBarBehaviour: settingsData.navigationBarBehaviour,
435 webRTCIPHandlingPolicy: settingsData.webRTCIPHandlingPolicy,
436 searchEngine: settingsData.searchEngine,
437 translatorEngine: settingsData.translatorEngine,
438 translatorLanguage: settingsData.translatorLanguage,
439 sentry: Boolean(settingsData.sentry),
440 hibernateOnStartup: Boolean(settingsData.hibernateOnStartup),
441 hibernationStrategy: Number(settingsData.hibernationStrategy),
442 wakeUpStrategy: Number(settingsData.wakeUpStrategy),
443 wakeUpHibernationStrategy: Number(settingsData.wakeUpHibernationStrategy),
444 wakeUpHibernationSplay: Boolean(settingsData.wakeUpHibernationSplay),
445 predefinedTodoServer: settingsData.predefinedTodoServer,
446 customTodoServer: settingsData.customTodoServer,
447 isLockingFeatureEnabled: Boolean(settingsData.isLockingFeatureEnabled),
448 lockedPassword: useOriginalPassword
449 ? this.props.stores.settings.all.app.lockedPassword
450 : hash(String(settingsData.lockedPassword)),
451 useTouchIdToUnlock: Boolean(settingsData.useTouchIdToUnlock),
452 inactivityLock: Number(settingsData.inactivityLock),
453 scheduledDNDEnabled: Boolean(settingsData.scheduledDNDEnabled),
454 scheduledDNDStart: settingsData.scheduledDNDStart,
455 scheduledDNDEnd: settingsData.scheduledDNDEnd,
456 enableGPUAcceleration: Boolean(settingsData.enableGPUAcceleration),
457 downloadFolderPath: String(settingsData.downloadFolderPath),
458 enableGlobalHideShortcut: Boolean(settingsData.enableGlobalHideShortcut),
459 showDisabledServices: Boolean(settingsData.showDisabledServices),
460 showServiceName: Boolean(settingsData.showServiceName),
461 darkMode: Boolean(settingsData.darkMode),
462 adaptableDarkMode: Boolean(settingsData.adaptableDarkMode),
463 universalDarkMode: Boolean(settingsData.universalDarkMode),
464 splitMode: Boolean(settingsData.splitMode),
465 splitColumns: Number(settingsData.splitColumns),
466 serviceRibbonWidth: Number(settingsData.serviceRibbonWidth),
467 sidebarServicesLocation: Number(settingsData.sidebarServicesLocation),
468 iconSize: Number(settingsData.iconSize),
469 enableLongPressServiceHint: Boolean(
470 settingsData.enableLongPressServiceHint,
471 ),
472 useHorizontalStyle: Boolean(settingsData.useHorizontalStyle),
473 hideCollapseButton: Boolean(settingsData.hideCollapseButton),
474 hideRecipesButton: Boolean(settingsData.hideRecipesButton),
475 hideSplitModeButton: Boolean(settingsData.hideSplitModeButton),
476 useGrayscaleServices: Boolean(settingsData.useGrayscaleServices),
477 grayscaleServicesDim: Number(settingsData.grayscaleServicesDim),
478 hideWorkspacesButton: Boolean(settingsData.hideWorkspacesButton),
479 hideNotificationsButton: Boolean(settingsData.hideNotificationsButton),
480 hideSettingsButton: Boolean(settingsData.hideSettingsButton),
481 hideDownloadButton: Boolean(settingsData.hideDownloadButton),
482 alwaysShowWorkspaces: Boolean(settingsData.alwaysShowWorkspaces),
483 hideAllServicesWorkspace: Boolean(settingsData.hideAllServicesWorkspace),
484 accentColor: settingsData.accentColor,
485 progressbarAccentColor: settingsData.progressbarAccentColor,
486 showMessageBadgeWhenMuted: Boolean(
487 settingsData.showMessageBadgeWhenMuted,
488 ),
489 showDragArea: Boolean(settingsData.showDragArea),
490 enableSpellchecking: Boolean(settingsData.enableSpellchecking),
491 enableTranslator: Boolean(settingsData.enableTranslator),
492 useSelfSignedCertificates: Boolean(
493 settingsData.useSelfSignedCertificates,
494 ),
495 spellcheckerLanguage: settingsData.spellcheckerLanguage,
496 userAgentPref: settingsData.userAgentPref,
497 beta: Boolean(settingsData.beta), // we need this info in the main process as well
498 automaticUpdates: Boolean(settingsData.automaticUpdates), // we need this info in the main process as well
499 locale: settingsData.locale, // we need this info in the main process as well
500 };
501
502 const requiredRestartKeys = [
503 'webRTCIPHandlingPolicy',
504 'sentry',
505 'searchEngine',
506 'enableSpellchecking',
507 'spellcheckerLanguage',
508 'enableGlobalHideShortcut',
509 // 'userAgentPref', // TODO: this is an input field, so it changes on every key stroke
510 ];
511
512 // Check if any of the keys that require a restart have changed
513 const requiresRestart = requiredRestartKeys.some(
514 key => newSettings[key] !== currentSettings[key],
515 );
516
517 if (requiresRestart) {
518 debug('Settings require restart');
519
520 const options: Electron.MessageBoxOptions = {
521 type: 'warning',
522 buttons: [
523 intl.formatMessage(messages.restartNow),
524 intl.formatMessage(messages.restartLater),
525 ],
526 defaultId: 0,
527 cancelId: 1,
528 title: intl.formatMessage(messages.restartDialogTitle),
529 message: intl.formatMessage(messages.restartDialogMessage),
530 detail: intl.formatMessage(messages.restartDialogDetail),
531 };
532
533 ipcRenderer.send('relaunch-app', options);
534 }
535
389 settings.update({ 536 settings.update({
390 type: 'app', 537 type: 'app',
391 // TODO: The conversions might not be necessary once we convert to typescript 538 // TODO: The conversions might not be necessary once we convert to typescript
392 data: { 539 data: newSettings,
393 runInBackground: Boolean(settingsData.runInBackground),
394 enableSystemTray: Boolean(settingsData.enableSystemTray),
395 reloadAfterResume: Boolean(settingsData.reloadAfterResume),
396 reloadAfterResumeTime: Number(settingsData.reloadAfterResumeTime),
397 startMinimized: Boolean(settingsData.startMinimized),
398 confirmOnQuit: Boolean(settingsData.confirmOnQuit),
399 minimizeToSystemTray: Boolean(settingsData.minimizeToSystemTray),
400 closeToSystemTray: Boolean(settingsData.closeToSystemTray),
401 privateNotifications: Boolean(settingsData.privateNotifications),
402 clipboardNotifications: Boolean(settingsData.clipboardNotifications),
403 notifyTaskBarOnMessage: Boolean(settingsData.notifyTaskBarOnMessage),
404 isTwoFactorAutoCatcherEnabled: Boolean(
405 settingsData.isTwoFactorAutoCatcherEnabled,
406 ),
407 twoFactorAutoCatcherMatcher: settingsData.twoFactorAutoCatcherMatcher,
408 navigationBarBehaviour: settingsData.navigationBarBehaviour,
409 webRTCIPHandlingPolicy: settingsData.webRTCIPHandlingPolicy,
410 searchEngine: settingsData.searchEngine,
411 translatorEngine: settingsData.translatorEngine,
412 translatorLanguage: settingsData.translatorLanguage,
413 sentry: Boolean(settingsData.sentry),
414 hibernateOnStartup: Boolean(settingsData.hibernateOnStartup),
415 hibernationStrategy: Number(settingsData.hibernationStrategy),
416 wakeUpStrategy: Number(settingsData.wakeUpStrategy),
417 wakeUpHibernationStrategy: Number(
418 settingsData.wakeUpHibernationStrategy,
419 ),
420 wakeUpHibernationSplay: Boolean(settingsData.wakeUpHibernationSplay),
421 predefinedTodoServer: settingsData.predefinedTodoServer,
422 customTodoServer: settingsData.customTodoServer,
423 isLockingFeatureEnabled: Boolean(settingsData.isLockingFeatureEnabled),
424 lockedPassword: useOriginalPassword
425 ? this.props.stores.settings.all.app.lockedPassword
426 : hash(String(settingsData.lockedPassword)),
427 useTouchIdToUnlock: Boolean(settingsData.useTouchIdToUnlock),
428 inactivityLock: Number(settingsData.inactivityLock),
429 scheduledDNDEnabled: Boolean(settingsData.scheduledDNDEnabled),
430 scheduledDNDStart: settingsData.scheduledDNDStart,
431 scheduledDNDEnd: settingsData.scheduledDNDEnd,
432 enableGPUAcceleration: Boolean(settingsData.enableGPUAcceleration),
433 enableGlobalHideShortcut: Boolean(
434 settingsData.enableGlobalHideShortcut,
435 ),
436 showDisabledServices: Boolean(settingsData.showDisabledServices),
437 showServiceName: Boolean(settingsData.showServiceName),
438 darkMode: Boolean(settingsData.darkMode),
439 adaptableDarkMode: Boolean(settingsData.adaptableDarkMode),
440 universalDarkMode: Boolean(settingsData.universalDarkMode),
441 splitMode: Boolean(settingsData.splitMode),
442 splitColumns: Number(settingsData.splitColumns),
443 serviceRibbonWidth: Number(settingsData.serviceRibbonWidth),
444 sidebarServicesLocation: Number(settingsData.sidebarServicesLocation),
445 iconSize: Number(settingsData.iconSize),
446 enableLongPressServiceHint: Boolean(
447 settingsData.enableLongPressServiceHint,
448 ),
449 useHorizontalStyle: Boolean(settingsData.useHorizontalStyle),
450 hideCollapseButton: Boolean(settingsData.hideCollapseButton),
451 hideRecipesButton: Boolean(settingsData.hideRecipesButton),
452 hideSplitModeButton: Boolean(settingsData.hideSplitModeButton),
453 useGrayscaleServices: Boolean(settingsData.useGrayscaleServices),
454 grayscaleServicesDim: Number(settingsData.grayscaleServicesDim),
455 hideWorkspacesButton: Boolean(settingsData.hideWorkspacesButton),
456 hideNotificationsButton: Boolean(settingsData.hideNotificationsButton),
457 hideSettingsButton: Boolean(settingsData.hideSettingsButton),
458 hideDownloadButton: Boolean(settingsData.hideDownloadButton),
459 alwaysShowWorkspaces: Boolean(settingsData.alwaysShowWorkspaces),
460 hideAllServicesWorkspace: Boolean(
461 settingsData.hideAllServicesWorkspace,
462 ),
463 accentColor: settingsData.accentColor,
464 progressbarAccentColor: settingsData.progressbarAccentColor,
465 showMessageBadgeWhenMuted: Boolean(
466 settingsData.showMessageBadgeWhenMuted,
467 ),
468 showDragArea: Boolean(settingsData.showDragArea),
469 enableSpellchecking: Boolean(settingsData.enableSpellchecking),
470 enableTranslator: Boolean(settingsData.enableTranslator),
471 useSelfSignedCertificates: Boolean(
472 settingsData.useSelfSignedCertificates,
473 ),
474 spellcheckerLanguage: settingsData.spellcheckerLanguage,
475 userAgentPref: settingsData.userAgentPref,
476 beta: Boolean(settingsData.beta), // we need this info in the main process as well
477 automaticUpdates: Boolean(settingsData.automaticUpdates), // we need this info in the main process as well
478 locale: settingsData.locale, // we need this info in the main process as well
479 },
480 }); 540 });
481 541
482 user.update({ 542 user.update({
@@ -982,6 +1042,14 @@ class EditSettingsScreen extends Component<
982 default: DEFAULT_APP_SETTINGS.userAgentPref, 1042 default: DEFAULT_APP_SETTINGS.userAgentPref,
983 placeholder: defaultUserAgent(), 1043 placeholder: defaultUserAgent(),
984 }, 1044 },
1045 downloadFolderPath: {
1046 label: intl.formatMessage(messages.downloadFolderPath),
1047 value: ifUndefined<string>(
1048 settings.all.app.downloadFolderPath,
1049 DEFAULT_APP_SETTINGS.downloadFolderPath,
1050 ),
1051 default: DEFAULT_APP_SETTINGS.userAgentPref,
1052 },
985 darkMode: { 1053 darkMode: {
986 label: intl.formatMessage(messages.darkMode), 1054 label: intl.formatMessage(messages.darkMode),
987 value: ifUndefined<boolean>( 1055 value: ifUndefined<boolean>(