From 4e1fc89de9ce3bf00f7387f39062d1b4878ecd16 Mon Sep 17 00:00:00 2001 From: vantezzen Date: Sat, 21 Sep 2019 11:37:30 +0200 Subject: Add scheduled Do-not-Disturb feature --- CHANGELOG.md | 2 + README.md | 1 + .../settings/settings/EditSettingsForm.js | 64 +++++++- src/config.js | 9 +- src/containers/settings/EditSettingsScreen.js | 32 ++++ src/helpers/schedule-helpers.js | 70 +++++++++ src/i18n/locales/defaultMessages.json | 165 ++++++++++++++------- src/i18n/locales/en-US.json | 7 +- src/i18n/locales/whitelist_en-US.json | 3 +- .../settings/settings/EditSettingsForm.json | 90 +++++++---- .../containers/settings/EditSettingsScreen.json | 75 +++++++--- src/stores/ServicesStore.js | 13 ++ 12 files changed, 425 insertions(+), 106 deletions(-) create mode 100644 src/helpers/schedule-helpers.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 597af5932..b10fb3eef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,9 @@ - Fix continuous releases/assets delivery on tags builds #53 - Attempt at making menubar hiding feature cross-platform #7 (comment) - Attempt at making "About Ferdi" consistent across platforms #47 (comment) +- Attempt at fixing "Launch on start" feature on Linux #63 - Add "Quick Switch" feature +- Add "Scheduled Do-not-Disturb" feature # [5.3.3](https://github.com/meetfranz/franz/compare/v5.3.2...v5.3.3) (2019-09-18) - Merged Franz v5.3.3 into Ferdi diff --git a/README.md b/README.md index d525686ff..c09f9a178 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ You can find the installers in the [latest release](https://github.com/getferdi/ - [x] Add an option to keep individual workspaces always loaded ([#37](https://github.com/getferdi/ferdi/issues/37)) - [x] Add an option to auto-hide the menubar ([#7](https://github.com/getferdi/ferdi/issues/7), [franz#833](https://github.com/meetfranz/franz/issues/833)) - [x] Add "Quick Switch" feature to help you navigate a long list of services (similar to Rambox's [Quick Switcher](https://rambox.pro/#feature-details/quick_switcher)) +- [x] Add "Scheduled Do-not-Disturb" feature in which you won't get notifications (similar to Rambox's [Work Hours](https://rambox.pro/#feature-details/work_hours)) - [x] Add CTRL+← and CTRL+→ shortcuts and menu options to go back and forward in the service browsing history([#39](https://github.com/getferdi/ferdi/issues/39)) - [x] Add "npm run prepare-code" command for development to lint and beautify code - [x] Remove "Franz is better together" popup diff --git a/src/components/settings/settings/EditSettingsForm.js b/src/components/settings/settings/EditSettingsForm.js index c1e812008..52bd18603 100644 --- a/src/components/settings/settings/EditSettingsForm.js +++ b/src/components/settings/settings/EditSettingsForm.js @@ -38,6 +38,14 @@ const messages = defineMessages({ id: 'settings.app.lockedPasswordInfo', defaultMessage: '!!!Please make sure to set a password you\'ll remember.\nIf you loose this password, you will have to reinstall Ferdi.', }, + scheduledDNDTimeInfo: { + id: 'settings.app.scheduledDNDTimeInfo', + defaultMessage: '!!!Times in 24-Hour-Format. End time can be before start time (e.g. start 17:00, end 09:00) to enable Do-not-Disturb overnight.', + }, + scheduledDNDInfo: { + id: 'settings.app.scheduledDNDInfo', + defaultMessage: '!!!Scheduled Do-not-Disturb allows you to define a period of time in which you do not want to get Notifications from Ferdi.', + }, headlineLanguage: { id: 'settings.app.headlineLanguage', defaultMessage: '!!!Language', @@ -167,7 +175,11 @@ export default @observer class EditSettingsForm extends Component { } const isLoggedIn = Boolean(localStorage.getItem('authToken')); - const lockingFeatureEnabled = window.ferdi.stores.settings.all.app.lockingFeatureEnabled; + + const { + lockingFeatureEnabled, + scheduledDNDEnabled, + } = window.ferdi.stores.settings.all.app; return (
@@ -273,6 +285,56 @@ export default @observer class EditSettingsForm extends Component {

+ + {scheduledDNDEnabled && ( + <> +
+
+ this.submit(e)} + field={form.$('scheduledDNDStart')} + type="time" + /> +
+
+ this.submit(e)} + field={form.$('scheduledDNDEnd')} + type="time" + /> +
+
+

+ { intl.formatMessage(messages.scheduledDNDTimeInfo) } +

+ + )} +

+ + { intl.formatMessage(messages.scheduledDNDInfo) } + +

+ + {/* Appearance */}

{intl.formatMessage(messages.headlineAppearance)}

diff --git a/src/config.js b/src/config.js index d01ece849..96c054cca 100644 --- a/src/config.js +++ b/src/config.js @@ -40,8 +40,6 @@ export const DEFAULT_APP_SETTINGS = { enableSystemTray: true, minimizeToSystemTray: false, privateNotifications: false, - server: LIVE_API, - todoServer: PRODUCTION_TODOS_FRONTEND_URL, showDisabledServices: true, showMessageBadgeWhenMuted: true, enableSpellchecking: true, @@ -53,10 +51,17 @@ export const DEFAULT_APP_SETTINGS = { isAppMuted: false, enableGPUAcceleration: true, serviceLimit: 5, + + // Ferdi specific options + server: LIVE_API, + todoServer: PRODUCTION_TODOS_FRONTEND_URL, autohideMenuBar: false, lockingFeatureEnabled: false, locked: false, lockedPassword: '', + scheduledDNDEnabled: false, + scheduledDNDStart: '17:00', + scheduledDNDEnd: '09:00', }; export const DEFAULT_FEATURES_CONFIG = { diff --git a/src/containers/settings/EditSettingsScreen.js b/src/containers/settings/EditSettingsScreen.js index 4d85d4f12..0ae64b6ad 100644 --- a/src/containers/settings/EditSettingsScreen.js +++ b/src/containers/settings/EditSettingsScreen.js @@ -65,6 +65,18 @@ const messages = defineMessages({ id: 'settings.app.form.lockPassword', defaultMessage: '!!!Ferdi Lock password', }, + scheduledDNDEnabled: { + id: 'settings.app.form.scheduledDNDEnabled', + defaultMessage: '!!!Enable scheduled Do-not-Disturb', + }, + scheduledDNDStart: { + id: 'settings.app.form.scheduledDNDStart', + defaultMessage: '!!!From', + }, + scheduledDNDEnd: { + id: 'settings.app.form.scheduledDNDEnd', + defaultMessage: '!!!To', + }, language: { id: 'settings.app.form.language', defaultMessage: '!!!Language', @@ -134,6 +146,9 @@ export default @inject('stores', 'actions') @observer class EditSettingsScreen e todoServer: settingsData.todoServer, lockingFeatureEnabled: settingsData.lockingFeatureEnabled, lockedPassword: settingsData.lockedPassword, + scheduledDNDEnabled: settingsData.scheduledDNDEnabled, + scheduledDNDStart: settingsData.scheduledDNDStart, + scheduledDNDEnd: settingsData.scheduledDNDEnd, enableGPUAcceleration: settingsData.enableGPUAcceleration, showDisabledServices: settingsData.showDisabledServices, darkMode: settingsData.darkMode, @@ -235,6 +250,23 @@ export default @inject('stores', 'actions') @observer class EditSettingsScreen e default: DEFAULT_LOCK_PASSWORD, type: 'password', }, + scheduledDNDEnabled: { + label: intl.formatMessage(messages.scheduledDNDEnabled), + value: settings.all.app.scheduledDNDEnabled || false, + default: false, + }, + scheduledDNDStart: { + label: intl.formatMessage(messages.scheduledDNDStart), + value: settings.all.app.scheduledDNDStart, + default: '17:00', + type: 'time', + }, + scheduledDNDEnd: { + label: intl.formatMessage(messages.scheduledDNDEnd), + value: settings.all.app.scheduledDNDEnd, + default: '09:00', + type: 'time', + }, showDisabledServices: { label: intl.formatMessage(messages.showDisabledServices), value: settings.all.app.showDisabledServices, diff --git a/src/helpers/schedule-helpers.js b/src/helpers/schedule-helpers.js new file mode 100644 index 000000000..a3020cad6 --- /dev/null +++ b/src/helpers/schedule-helpers.js @@ -0,0 +1,70 @@ +/* eslint-disable import/prefer-default-export */ + +export function isInTimeframe(start, end) { + const [ + startHourStr, + startMinuteStr, + ] = start.split(':'); + const startHour = parseInt(startHourStr, 10); + const startMinute = parseInt(startMinuteStr, 10); + + const [ + endHourStr, + endMinuteStr, + ] = end.split(':'); + const endHour = parseInt(endHourStr, 10); + const endMinute = parseInt(endMinuteStr, 10); + + const currentHour = new Date().getHours(); + const currentMinute = new Date().getMinutes(); + + // Check if the end time is before the start time (scheduled overnight) + // as we need to change our checks based on this + const endBeforeStart = (startHour > endHour || (startHour === endHour && startMinute > endMinute)); + + if ( + // End is after start (e.g. 09:00-17:00) + !endBeforeStart + // Check if past start + && ((currentHour > startHour + || ( + currentHour === startHour + && currentMinute >= startMinute + ) + ) + // Check that not past end + && (currentHour < endHour + || ( + currentHour === endHour + && currentMinute < endMinute + ) + )) + ) { + // We are in scheduled timeframe + return true; + } + if ( + // End is before start (e.g. 17:00-09:00) + endBeforeStart + // Check if past start + && ((currentHour > startHour + || ( + currentHour === startHour + && currentMinute >= startMinute + ) + ) + // Check that we are not past end + || (currentHour < endHour + || ( + currentHour === endHour + && currentMinute < endMinute + ) + )) + ) { + // We are also in scheduled timeframe + return true; + } + + // We are not in scheduled timeframe + return false; +} diff --git a/src/i18n/locales/defaultMessages.json b/src/i18n/locales/defaultMessages.json index 7f02af685..de1712048 100644 --- a/src/i18n/locales/defaultMessages.json +++ b/src/i18n/locales/defaultMessages.json @@ -2540,211 +2540,237 @@ } }, { - "defaultMessage": "!!!Language", + "defaultMessage": "!!!Times in 24-Hour-Format. End time can be before start time (e.g. start 17:00, end 09:00) to enable Do-not-Disturb overnight.", "end": { "column": 3, "line": 44 }, "file": "src/components/settings/settings/EditSettingsForm.js", + "id": "settings.app.scheduledDNDTimeInfo", + "start": { + "column": 24, + "line": 41 + } + }, + { + "defaultMessage": "!!!Scheduled Do-not-Disturb allows you to define a period of time in which you do not want to get Notifications from Ferdi.", + "end": { + "column": 3, + "line": 48 + }, + "file": "src/components/settings/settings/EditSettingsForm.js", + "id": "settings.app.scheduledDNDInfo", + "start": { + "column": 20, + "line": 45 + } + }, + { + "defaultMessage": "!!!Language", + "end": { + "column": 3, + "line": 52 + }, + "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.headlineLanguage", "start": { "column": 20, - "line": 41 + "line": 49 } }, { "defaultMessage": "!!!Updates", "end": { "column": 3, - "line": 48 + "line": 56 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.headlineUpdates", "start": { "column": 19, - "line": 45 + "line": 53 } }, { "defaultMessage": "!!!Appearance", "end": { "column": 3, - "line": 52 + "line": 60 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.headlineAppearance", "start": { "column": 22, - "line": 49 + "line": 57 } }, { "defaultMessage": "!!!Advanced", "end": { "column": 3, - "line": 56 + "line": 64 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.headlineAdvanced", "start": { "column": 20, - "line": 53 + "line": 61 } }, { "defaultMessage": "!!!Help us to translate Ferdi into your language.", "end": { "column": 3, - "line": 60 + "line": 68 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.translationHelp", "start": { "column": 19, - "line": 57 + "line": 65 } }, { "defaultMessage": "!!!Cache", "end": { "column": 3, - "line": 64 + "line": 72 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.subheadlineCache", "start": { "column": 20, - "line": 61 + "line": 69 } }, { "defaultMessage": "!!!Ferdi cache is currently using {size} of disk space.", "end": { "column": 3, - "line": 68 + "line": 76 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.cacheInfo", "start": { "column": 13, - "line": 65 + "line": 73 } }, { "defaultMessage": "!!!Clear cache", "end": { "column": 3, - "line": 72 + "line": 80 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.buttonClearAllCache", "start": { "column": 23, - "line": 69 + "line": 77 } }, { "defaultMessage": "!!!Check for updates", "end": { "column": 3, - "line": 76 + "line": 84 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.buttonSearchForUpdate", "start": { "column": 25, - "line": 73 + "line": 81 } }, { "defaultMessage": "!!!Restart & install update", "end": { "column": 3, - "line": 80 + "line": 88 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.buttonInstallUpdate", "start": { "column": 23, - "line": 77 + "line": 85 } }, { "defaultMessage": "!!!Is searching for update", "end": { "column": 3, - "line": 84 + "line": 92 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.updateStatusSearching", "start": { "column": 25, - "line": 81 + "line": 89 } }, { "defaultMessage": "!!!Update available, downloading...", "end": { "column": 3, - "line": 88 + "line": 96 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.updateStatusAvailable", "start": { "column": 25, - "line": 85 + "line": 93 } }, { "defaultMessage": "!!!You are using the latest version of Ferdi", "end": { "column": 3, - "line": 92 + "line": 100 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.updateStatusUpToDate", "start": { "column": 24, - "line": 89 + "line": 97 } }, { "defaultMessage": "!!!Current version:", "end": { "column": 3, - "line": 96 + "line": 104 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.currentVersion", "start": { "column": 18, - "line": 93 + "line": 101 } }, { "defaultMessage": "!!!Changes require restart", "end": { "column": 3, - "line": 100 + "line": 108 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.restartRequired", "start": { "column": 29, - "line": 97 + "line": 105 } }, { "defaultMessage": "!!!Official translations are English & German. All other languages are community based translations.", "end": { "column": 3, - "line": 104 + "line": 112 }, "file": "src/components/settings/settings/EditSettingsForm.js", "id": "settings.app.languageDisclaimer", "start": { "column": 22, - "line": 101 + "line": 109 } } ], @@ -3767,120 +3793,159 @@ } }, { - "defaultMessage": "!!!Language", + "defaultMessage": "!!!Enable scheduled Do-not-Disturb", "end": { "column": 3, "line": 71 }, "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.scheduledDNDEnabled", + "start": { + "column": 23, + "line": 68 + } + }, + { + "defaultMessage": "!!!From", + "end": { + "column": 3, + "line": 75 + }, + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.scheduledDNDStart", + "start": { + "column": 21, + "line": 72 + } + }, + { + "defaultMessage": "!!!To", + "end": { + "column": 3, + "line": 79 + }, + "file": "src/containers/settings/EditSettingsScreen.js", + "id": "settings.app.form.scheduledDNDEnd", + "start": { + "column": 19, + "line": 76 + } + }, + { + "defaultMessage": "!!!Language", + "end": { + "column": 3, + "line": 83 + }, + "file": "src/containers/settings/EditSettingsScreen.js", "id": "settings.app.form.language", "start": { "column": 12, - "line": 68 + "line": 80 } }, { "defaultMessage": "!!!Dark Mode", "end": { "column": 3, - "line": 75 + "line": 87 }, "file": "src/containers/settings/EditSettingsScreen.js", "id": "settings.app.form.darkMode", "start": { "column": 12, - "line": 72 + "line": 84 } }, { "defaultMessage": "!!!Display disabled services tabs", "end": { "column": 3, - "line": 79 + "line": 91 }, "file": "src/containers/settings/EditSettingsScreen.js", "id": "settings.app.form.showDisabledServices", "start": { "column": 24, - "line": 76 + "line": 88 } }, { "defaultMessage": "!!!Show unread message badge when notifications are disabled", "end": { "column": 3, - "line": 83 + "line": 95 }, "file": "src/containers/settings/EditSettingsScreen.js", "id": "settings.app.form.showMessagesBadgesWhenMuted", "start": { "column": 29, - "line": 80 + "line": 92 } }, { "defaultMessage": "!!!Enable spell checking", "end": { "column": 3, - "line": 87 + "line": 99 }, "file": "src/containers/settings/EditSettingsScreen.js", "id": "settings.app.form.enableSpellchecking", "start": { "column": 23, - "line": 84 + "line": 96 } }, { "defaultMessage": "!!!Enable GPU Acceleration", "end": { "column": 3, - "line": 91 + "line": 103 }, "file": "src/containers/settings/EditSettingsScreen.js", "id": "settings.app.form.enableGPUAcceleration", "start": { "column": 25, - "line": 88 + "line": 100 } }, { "defaultMessage": "!!!Include beta versions", "end": { "column": 3, - "line": 95 + "line": 107 }, "file": "src/containers/settings/EditSettingsScreen.js", "id": "settings.app.form.beta", "start": { "column": 8, - "line": 92 + "line": 104 } }, { "defaultMessage": "!!!Enable Franz Todos", "end": { "column": 3, - "line": 99 + "line": 111 }, "file": "src/containers/settings/EditSettingsScreen.js", "id": "settings.app.form.enableTodos", "start": { "column": 15, - "line": 96 + "line": 108 } }, { "defaultMessage": "!!!Keep all workspaces loaded", "end": { "column": 3, - "line": 103 + "line": 115 }, "file": "src/containers/settings/EditSettingsScreen.js", "id": "settings.app.form.keepAllWorkspacesLoaded", "start": { "column": 27, - "line": 100 + "line": 112 } } ], diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json index 5d32aa4c1..8997a1948 100644 --- a/src/i18n/locales/en-US.json +++ b/src/i18n/locales/en-US.json @@ -232,6 +232,9 @@ "settings.app.form.minimizeToSystemTray": "Minimize Ferdi to system tray", "settings.app.form.privateNotifications": "Don't show message content in notifications", "settings.app.form.runInBackground": "Keep Ferdi in background when closing the window", + "settings.app.form.scheduledDNDEnabled": "Enable scheduled Do-not-Disturb", + "settings.app.form.scheduledDNDEnd": "To", + "settings.app.form.scheduledDNDStart": "From", "settings.app.form.server": "Server", "settings.app.form.showDisabledServices": "Display disabled services tabs", "settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled", @@ -246,6 +249,8 @@ "settings.app.lockedPassword": "Ferdi Lock Password", "settings.app.lockedPasswordInfo": "Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", "settings.app.restartRequired": "Changes require restart", + "settings.app.scheduledDNDInfo": "Scheduled Do-not-Disturb allows you to define a period of time in which you do not want to get Notifications from Ferdi.", + "settings.app.scheduledDNDTimeInfo": "Times in 24-Hour-Format. End time can be before start time (e.g. start 17:00, end 09:00) to enable Do-not-Disturb overnight.", "settings.app.serverInfo": "We advice you to logout after changing your server as your settings might not be saved otherwise.", "settings.app.subheadlineCache": "Cache", "settings.app.todoServerInfo": "This server will be used for the \"Ferdi Todo\" feature. (default: https://app.Ferditodos.com)", @@ -412,4 +417,4 @@ "workspaceDrawer.workspaceFeatureInfo": "

Ferdi Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time.

You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.

", "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", "workspaces.switchingIndicator.switchingTo": "Switching to" -} \ No newline at end of file +} diff --git a/src/i18n/locales/whitelist_en-US.json b/src/i18n/locales/whitelist_en-US.json index 32960f8ce..fe51488c7 100644 --- a/src/i18n/locales/whitelist_en-US.json +++ b/src/i18n/locales/whitelist_en-US.json @@ -1,2 +1 @@ -[ -] \ No newline at end of file +[] diff --git a/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json b/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json index c8d85f1af..ccbc155f3 100644 --- a/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json +++ b/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json @@ -77,16 +77,42 @@ "column": 3 } }, + { + "id": "settings.app.scheduledDNDTimeInfo", + "defaultMessage": "!!!Times in 24-Hour-Format. End time can be before start time (e.g. start 17:00, end 09:00) to enable Do-not-Disturb overnight.", + "file": "src/components/settings/settings/EditSettingsForm.js", + "start": { + "line": 41, + "column": 24 + }, + "end": { + "line": 44, + "column": 3 + } + }, + { + "id": "settings.app.scheduledDNDInfo", + "defaultMessage": "!!!Scheduled Do-not-Disturb allows you to define a period of time in which you do not want to get Notifications from Ferdi.", + "file": "src/components/settings/settings/EditSettingsForm.js", + "start": { + "line": 45, + "column": 20 + }, + "end": { + "line": 48, + "column": 3 + } + }, { "id": "settings.app.headlineLanguage", "defaultMessage": "!!!Language", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 41, + "line": 49, "column": 20 }, "end": { - "line": 44, + "line": 52, "column": 3 } }, @@ -95,11 +121,11 @@ "defaultMessage": "!!!Updates", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 45, + "line": 53, "column": 19 }, "end": { - "line": 48, + "line": 56, "column": 3 } }, @@ -108,11 +134,11 @@ "defaultMessage": "!!!Appearance", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 49, + "line": 57, "column": 22 }, "end": { - "line": 52, + "line": 60, "column": 3 } }, @@ -121,11 +147,11 @@ "defaultMessage": "!!!Advanced", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 53, + "line": 61, "column": 20 }, "end": { - "line": 56, + "line": 64, "column": 3 } }, @@ -134,11 +160,11 @@ "defaultMessage": "!!!Help us to translate Ferdi into your language.", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 57, + "line": 65, "column": 19 }, "end": { - "line": 60, + "line": 68, "column": 3 } }, @@ -147,11 +173,11 @@ "defaultMessage": "!!!Cache", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 61, + "line": 69, "column": 20 }, "end": { - "line": 64, + "line": 72, "column": 3 } }, @@ -160,11 +186,11 @@ "defaultMessage": "!!!Ferdi cache is currently using {size} of disk space.", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 65, + "line": 73, "column": 13 }, "end": { - "line": 68, + "line": 76, "column": 3 } }, @@ -173,11 +199,11 @@ "defaultMessage": "!!!Clear cache", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 69, + "line": 77, "column": 23 }, "end": { - "line": 72, + "line": 80, "column": 3 } }, @@ -186,11 +212,11 @@ "defaultMessage": "!!!Check for updates", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 73, + "line": 81, "column": 25 }, "end": { - "line": 76, + "line": 84, "column": 3 } }, @@ -199,11 +225,11 @@ "defaultMessage": "!!!Restart & install update", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 77, + "line": 85, "column": 23 }, "end": { - "line": 80, + "line": 88, "column": 3 } }, @@ -212,11 +238,11 @@ "defaultMessage": "!!!Is searching for update", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 81, + "line": 89, "column": 25 }, "end": { - "line": 84, + "line": 92, "column": 3 } }, @@ -225,11 +251,11 @@ "defaultMessage": "!!!Update available, downloading...", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 85, + "line": 93, "column": 25 }, "end": { - "line": 88, + "line": 96, "column": 3 } }, @@ -238,11 +264,11 @@ "defaultMessage": "!!!You are using the latest version of Ferdi", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 89, + "line": 97, "column": 24 }, "end": { - "line": 92, + "line": 100, "column": 3 } }, @@ -251,11 +277,11 @@ "defaultMessage": "!!!Current version:", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 93, + "line": 101, "column": 18 }, "end": { - "line": 96, + "line": 104, "column": 3 } }, @@ -264,11 +290,11 @@ "defaultMessage": "!!!Changes require restart", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 97, + "line": 105, "column": 29 }, "end": { - "line": 100, + "line": 108, "column": 3 } }, @@ -277,11 +303,11 @@ "defaultMessage": "!!!Official translations are English & German. All other languages are community based translations.", "file": "src/components/settings/settings/EditSettingsForm.js", "start": { - "line": 101, + "line": 109, "column": 22 }, "end": { - "line": 104, + "line": 112, "column": 3 } } diff --git a/src/i18n/messages/src/containers/settings/EditSettingsScreen.json b/src/i18n/messages/src/containers/settings/EditSettingsScreen.json index 83d9cefe8..da3d8d7f4 100644 --- a/src/i18n/messages/src/containers/settings/EditSettingsScreen.json +++ b/src/i18n/messages/src/containers/settings/EditSettingsScreen.json @@ -129,16 +129,55 @@ "column": 3 } }, + { + "id": "settings.app.form.scheduledDNDEnabled", + "defaultMessage": "!!!Enable scheduled Do-not-Disturb", + "file": "src/containers/settings/EditSettingsScreen.js", + "start": { + "line": 68, + "column": 23 + }, + "end": { + "line": 71, + "column": 3 + } + }, + { + "id": "settings.app.form.scheduledDNDStart", + "defaultMessage": "!!!From", + "file": "src/containers/settings/EditSettingsScreen.js", + "start": { + "line": 72, + "column": 21 + }, + "end": { + "line": 75, + "column": 3 + } + }, + { + "id": "settings.app.form.scheduledDNDEnd", + "defaultMessage": "!!!To", + "file": "src/containers/settings/EditSettingsScreen.js", + "start": { + "line": 76, + "column": 19 + }, + "end": { + "line": 79, + "column": 3 + } + }, { "id": "settings.app.form.language", "defaultMessage": "!!!Language", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 68, + "line": 80, "column": 12 }, "end": { - "line": 71, + "line": 83, "column": 3 } }, @@ -147,11 +186,11 @@ "defaultMessage": "!!!Dark Mode", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 72, + "line": 84, "column": 12 }, "end": { - "line": 75, + "line": 87, "column": 3 } }, @@ -160,11 +199,11 @@ "defaultMessage": "!!!Display disabled services tabs", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 76, + "line": 88, "column": 24 }, "end": { - "line": 79, + "line": 91, "column": 3 } }, @@ -173,11 +212,11 @@ "defaultMessage": "!!!Show unread message badge when notifications are disabled", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 80, + "line": 92, "column": 29 }, "end": { - "line": 83, + "line": 95, "column": 3 } }, @@ -186,11 +225,11 @@ "defaultMessage": "!!!Enable spell checking", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 84, + "line": 96, "column": 23 }, "end": { - "line": 87, + "line": 99, "column": 3 } }, @@ -199,11 +238,11 @@ "defaultMessage": "!!!Enable GPU Acceleration", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 88, + "line": 100, "column": 25 }, "end": { - "line": 91, + "line": 103, "column": 3 } }, @@ -212,11 +251,11 @@ "defaultMessage": "!!!Include beta versions", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 92, + "line": 104, "column": 8 }, "end": { - "line": 95, + "line": 107, "column": 3 } }, @@ -225,11 +264,11 @@ "defaultMessage": "!!!Enable Franz Todos", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 96, + "line": 108, "column": 15 }, "end": { - "line": 99, + "line": 111, "column": 3 } }, @@ -238,11 +277,11 @@ "defaultMessage": "!!!Keep all workspaces loaded", "file": "src/containers/settings/EditSettingsScreen.js", "start": { - "line": 100, + "line": 112, "column": 27 }, "end": { - "line": 103, + "line": 115, "column": 3 } } diff --git a/src/stores/ServicesStore.js b/src/stores/ServicesStore.js index f88b14983..45350d8f5 100644 --- a/src/stores/ServicesStore.js +++ b/src/stores/ServicesStore.js @@ -11,6 +11,7 @@ import Store from './lib/Store'; import Request from './lib/Request'; import CachedRequest from './lib/CachedRequest'; import { matchRoute } from '../helpers/routing-helpers'; +import { isInTimeframe } from '../helpers/schedule-helpers'; import { workspaceStore } from '../features/workspaces'; import { serviceLimitStore } from '../features/serviceLimit'; import { RESTRICTION_TYPES } from '../models/Service'; @@ -422,6 +423,18 @@ export default class ServicesStore extends Store { }); } else if (channel === 'notification') { const { options } = args[0]; + + // Check if we are in scheduled Do-not-Disturb time + const { + scheduledDNDEnabled, + scheduledDNDStart, + scheduledDNDEnd, + } = this.stores.settings.all.app; + + if (scheduledDNDEnabled && isInTimeframe(scheduledDNDStart, scheduledDNDEnd)) { + return; + } + if (service.recipe.hasNotificationSound || service.isMuted || this.stores.settings.all.app.isAppMuted) { Object.assign(options, { silent: true, -- cgit v1.2.3-54-g00ecf