From 41d5b29d097b706c2512d0147830d654fc76c756 Mon Sep 17 00:00:00 2001 From: vantezzen Date: Thu, 19 Sep 2019 12:29:02 +0200 Subject: Add 7566ccd to feature list --- README.md | 1 + 1 file changed, 1 insertion(+) (limited to 'README.md') diff --git a/README.md b/README.md index cddb525d4..4e35e8d5f 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ You can find the installers in the [latest release](https://github.com/kytwb/fer - [x] Add CTRL+← and CTRL+β†’ shortcuts and menu options to go back and forward in the service browsing history([#39](https://github.com/kytwb/ferdi/issues/39)) - [x] Add "npm run prepare-code" command for development to lint and beautify code - [x] Remove "Franz is better together" popup +- [x] Remove bug that would incorrectly display unread messages count on some services (more info in (7566ccd)[https://github.com/getferdi/ferdi/commit/7566ccd]) - [x] [Makes it possible to edit the "Franz Todo" server](https://github.com/kytwb/ferdi/wiki/Custom-Todo) - [x] Makes RocketChat self-hosted generally available ([#6](https://github.com/kytwb/ferdi/issues/6)) - [x] Comes with a custom branding proper to Ferdi -- cgit v1.2.3-70-g09d2 From 17265bad5cbb26604dc65abf8aa127ea28f7ae51 Mon Sep 17 00:00:00 2001 From: vantezzen Date: Thu, 19 Sep 2019 12:30:58 +0200 Subject: Fix incorrect link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'README.md') diff --git a/README.md b/README.md index 4e35e8d5f..207493ff3 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ You can find the installers in the [latest release](https://github.com/kytwb/fer - [x] Add CTRL+← and CTRL+β†’ shortcuts and menu options to go back and forward in the service browsing history([#39](https://github.com/kytwb/ferdi/issues/39)) - [x] Add "npm run prepare-code" command for development to lint and beautify code - [x] Remove "Franz is better together" popup -- [x] Remove bug that would incorrectly display unread messages count on some services (more info in (7566ccd)[https://github.com/getferdi/ferdi/commit/7566ccd]) +- [x] Remove bug that would incorrectly display unread messages count on some services (more info in [7566ccd](https://github.com/getferdi/ferdi/commit/7566ccd)) - [x] [Makes it possible to edit the "Franz Todo" server](https://github.com/kytwb/ferdi/wiki/Custom-Todo) - [x] Makes RocketChat self-hosted generally available ([#6](https://github.com/kytwb/ferdi/issues/6)) - [x] Comes with a custom branding proper to Ferdi -- cgit v1.2.3-70-g09d2 From cba99de2ca02a02f02eded936d7c43c3176b4806 Mon Sep 17 00:00:00 2001 From: Amine Mouafik Date: Thu, 19 Sep 2019 19:58:11 +0700 Subject: Fix GitHub links to reflect Ferdi org --- CHANGELOG.md | 12 +++---- README.md | 38 +++++++++++----------- package.json | 4 +-- src/components/auth/AuthLayout.js | 2 +- .../settings/settings/EditSettingsForm.js | 2 +- 5 files changed, 29 insertions(+), 29 deletions(-) (limited to 'README.md') diff --git a/CHANGELOG.md b/CHANGELOG.md index 9cc156de3..0df1cf631 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ # [5.3.2](https://github.com/meetfranz/franz/compare/v5.3.1...v5.3.2) (2019-09-13) Merged Franz v5.3.2 into Ferdi -## [5.3.1](https://github.com/kytwb/ferdi/compare/v5.3.0...v5.3.1) (2019-09-09) +## [5.3.1](https://github.com/getferdi/ferdi/compare/v5.3.0...v5.3.1) (2019-09-09) Merge Franz v5.3.1 into Ferdi. - Enable todos for all users @@ -16,19 +16,19 @@ Merge Franz v5.3.1 into Ferdi. ### Bug Fixes -* **Windows:** Fix app size in fullscreen ([e210701](https://github.com/kytwb/ferdi/commit/e210701)) -* **Windows:** Fix app to be cropped at the bottom on Windows ([42f97b4](https://github.com/kytwb/ferdi/commit/42f97b4)) +* **Windows:** Fix app size in fullscreen ([e210701](https://github.com/getferdi/ferdi/commit/e210701)) +* **Windows:** Fix app to be cropped at the bottom on Windows ([42f97b4](https://github.com/getferdi/ferdi/commit/42f97b4)) ### Features -* **Todos:** Add option to disable todos ([5d03b91](https://github.com/kytwb/ferdi/commit/5d03b91)) +* **Todos:** Add option to disable todos ([5d03b91](https://github.com/getferdi/ferdi/commit/5d03b91)) -## [5.3.0](https://github.com/kytwb/ferdi/compare/v5.2.1-beta.1...v5.3.0) (2019-09-06) +## [5.3.0](https://github.com/getferdi/ferdi/compare/v5.2.1-beta.1...v5.3.0) (2019-09-06) - Removes pages begging you to donate after registration - Makes all users Premium by default -- [Add option to change server to a custom](https://github.com/kytwb/ferdi#servers) [ferdi-server](https://github.com/vantezzen/ferdi-server) +- [Add option to change server to a custom](https://github.com/getferdi/ferdi#servers) [ferdi-server](https://github.com/getferdi/server) - Remove "Franz is better together" popup - Makes RocketChat self-hosted generally available - Comes with a custom branding proper to Ferdi diff --git a/README.md b/README.md index 207493ff3..673da1292 100644 --- a/README.md +++ b/README.md @@ -4,14 +4,14 @@ # Ferdi -[![Build Status Windows](https://ci.appveyor.com/api/projects/status/2ckfbmoxp36fye5b?svg=true)](https://ci.appveyor.com/project/kytwb/ferdi) - [![Build Status Mac & Linux](https://travis-ci.org/kytwb/ferdi.svg?branch=master)](https://travis-ci.org/kytwb/ferdi) +[![Build Status Windows](https://ci.appveyor.com/api/projects/status/2ckfbmoxp36fye5b?svg=true)](https://ci.appveyor.com/project/getferdi/ferdi) + [![Build Status Mac & Linux](https://travis-ci.org/getferdi/ferdi.svg?branch=master)](https://travis-ci.org/getferdi/ferdi) 🀴🏽 Hard-fork of [Franz](https://github.com/meetfranz/franz), adding awesome features and removing unwanted ones. ## Download Ferdi -You can find the installers in the [latest release](https://github.com/kytwb/ferdi/releases) assets. +You can find the installers in the [latest release](https://github.com/getferdi/ferdi/releases) assets. ### Or use homebrew (macOS only) @@ -22,18 +22,18 @@ You can find the installers in the [latest release](https://github.com/kytwb/fer ## Ferdi-specific Features - [x] Removes the counter-productive fullscreen app delay inviting users to upgrade - [x] Removes pages begging you to donate after registration -- [x] Makes all users Premium by default ([#15](https://github.com/kytwb/ferdi/issues/15)) -- [x] [Add option to change server to a custom](https://github.com/kytwb/ferdi/wiki/Custom-Server) [ferdi-server](https://github.com/vantezzen/ferdi-server) +- [x] Makes all users Premium by default ([#15](https://github.com/getferdi/ferdi/issues/15)) +- [x] [Add option to change server to a custom](https://github.com/getferdi/ferdi/wiki/Custom-Server) [ferdi-server](https://github.com/getferdi/server) - [x] Add "Private Notification"-Mode, that hides message content from notifications ([franz#879](https://github.com/meetfranz/franz/issues/879)) -- [x] Add Password Lock feature to keep your messages protected ([#41](https://github.com/kytwb/ferdi/issues/41), [franz#810](https://github.com/meetfranz/franz/issues/810), [franz#950](https://github.com/meetfranz/franz/issues/950), [franz#1430](https://github.com/meetfranz/franz/issues/1430)) -- [x] Add an option to keep individual workspaces always loaded ([#37](https://github.com/kytwb/ferdi/issues/37)) -- [x] Add an option to auto-hide the menubar ([#7](https://github.com/kytwb/ferdi/issues/7), [franz#833](https://github.com/meetfranz/franz/issues/833)) -- [x] Add CTRL+← and CTRL+β†’ shortcuts and menu options to go back and forward in the service browsing history([#39](https://github.com/kytwb/ferdi/issues/39)) +- [x] Add Password Lock feature to keep your messages protected ([#41](https://github.com/getferdi/ferdi/issues/41), [franz#810](https://github.com/meetfranz/franz/issues/810), [franz#950](https://github.com/meetfranz/franz/issues/950), [franz#1430](https://github.com/meetfranz/franz/issues/1430)) +- [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 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 - [x] Remove bug that would incorrectly display unread messages count on some services (more info in [7566ccd](https://github.com/getferdi/ferdi/commit/7566ccd)) -- [x] [Makes it possible to edit the "Franz Todo" server](https://github.com/kytwb/ferdi/wiki/Custom-Todo) -- [x] Makes RocketChat self-hosted generally available ([#6](https://github.com/kytwb/ferdi/issues/6)) +- [x] [Makes it possible to edit the "Franz Todo" server](https://github.com/getferdi/ferdi/wiki/Custom-Todo) +- [x] Makes RocketChat self-hosted generally available ([#6](https://github.com/getferdi/ferdi/issues/6)) - [x] Comes with a custom branding proper to Ferdi ## Development @@ -83,18 +83,18 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d - - - - - - + + + + + + - + - + diff --git a/package.json b/package.json index 84228befc..8c137e312 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,8 @@ "description": "Messaging app for WhatsApp, Slack, Telegram, HipChat, Hangouts and many many more.", "copyright": "kytwb", "main": "index.js", - "homepage": "https://github.com/kytwb/ferdi", - "repository": "https://github.com/kytwb/ferdi.git", + "homepage": "https://github.com/getferdi/ferdi", + "repository": "https://github.com/getferdi/ferdi.git", "private": true, "scripts": { "prestart": "npm run rebuild", diff --git a/src/components/auth/AuthLayout.js b/src/components/auth/AuthLayout.js index 641b754ed..0c5198583 100644 --- a/src/components/auth/AuthLayout.js +++ b/src/components/auth/AuthLayout.js @@ -87,7 +87,7 @@ export default @observer class AuthLayout extends Component { })} {/* */} - + diff --git a/src/components/settings/settings/EditSettingsForm.js b/src/components/settings/settings/EditSettingsForm.js index ef6ab2707..012a10aa6 100644 --- a/src/components/settings/settings/EditSettingsForm.js +++ b/src/components/settings/settings/EditSettingsForm.js @@ -217,7 +217,7 @@ export default @observer class EditSettingsForm extends Component { {' '} or {' '} - using a self-hosted ferdi-server + using a self-hosted ferdi-server {' '} (if you have the knowledge and resources to do so).
-- cgit v1.2.3-70-g09d2 From 513037e80571c55eb265bf6e1e904fe98e94ec57 Mon Sep 17 00:00:00 2001 From: Amine Mouafik η©†ζ˜‚ζ˜Ž Date: Thu, 19 Sep 2019 20:50:25 +0700 Subject: Fix AppVeyor project link on build status badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'README.md') diff --git a/README.md b/README.md index 673da1292..3b73e3c10 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ # Ferdi -[![Build Status Windows](https://ci.appveyor.com/api/projects/status/2ckfbmoxp36fye5b?svg=true)](https://ci.appveyor.com/project/getferdi/ferdi) +[![Build Status Windows](https://ci.appveyor.com/api/projects/status/2ckfbmoxp36fye5b?svg=true)](https://ci.appveyor.com/project/kytwb/ferdi) [![Build Status Mac & Linux](https://travis-ci.org/getferdi/ferdi.svg?branch=master)](https://travis-ci.org/getferdi/ferdi) 🀴🏽 Hard-fork of [Franz](https://github.com/meetfranz/franz), adding awesome features and removing unwanted ones. -- cgit v1.2.3-70-g09d2 From 854378fd70481bfc5383226f68d5bb3f106c0cde Mon Sep 17 00:00:00 2001 From: vantezzen Date: Fri, 20 Sep 2019 12:42:45 +0200 Subject: Add quick switch to feature list --- README.md | 1 + 1 file changed, 1 insertion(+) (limited to 'README.md') diff --git a/README.md b/README.md index 3b73e3c10..d525686ff 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,7 @@ You can find the installers in the [latest release](https://github.com/getferdi/ - [x] Add Password Lock feature to keep your messages protected ([#41](https://github.com/getferdi/ferdi/issues/41), [franz#810](https://github.com/meetfranz/franz/issues/810), [franz#950](https://github.com/meetfranz/franz/issues/950), [franz#1430](https://github.com/meetfranz/franz/issues/1430)) - [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 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 -- cgit v1.2.3-70-g09d2 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 (limited to 'README.md') 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-70-g09d2 From fcb4dff08f549cbfe7be0b9ec45fa3e0d0438076 Mon Sep 17 00:00:00 2001 From: vantezzen Date: Mon, 23 Sep 2019 20:23:13 +0200 Subject: Add darkreader to feature list and changelog --- CHANGELOG.md | 1 + README.md | 1 + 2 files changed, 2 insertions(+) (limited to 'README.md') diff --git a/CHANGELOG.md b/CHANGELOG.md index b10fb3eef..4cadefd38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - 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 universal Dark-Mode via the [DarkReader extension](https://github.com/darkreader/darkreader) - Add "Scheduled Do-not-Disturb" feature # [5.3.3](https://github.com/meetfranz/franz/compare/v5.3.2...v5.3.3) (2019-09-18) diff --git a/README.md b/README.md index c09f9a178..e1f2826fb 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ You can find the installers in the [latest release](https://github.com/getferdi/ - [x] Add "Private Notification"-Mode, that hides message content from notifications ([franz#879](https://github.com/meetfranz/franz/issues/879)) - [x] Add Password Lock feature to keep your messages protected ([#41](https://github.com/getferdi/ferdi/issues/41), [franz#810](https://github.com/meetfranz/franz/issues/810), [franz#950](https://github.com/meetfranz/franz/issues/950), [franz#1430](https://github.com/meetfranz/franz/issues/1430)) - [x] Add an option to keep individual workspaces always loaded ([#37](https://github.com/getferdi/ferdi/issues/37)) +- [x] Add universal Dark-Mode via the [DarkReader extension](https://github.com/darkreader/darkreader) ([#71](https://github.com/getferdi/ferdi/issues/71)) - [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)) -- cgit v1.2.3-70-g09d2
Bennett
Bennett

πŸ’» 🎨 πŸ“– πŸ€” 🌍 πŸ’‘ πŸ› πŸ–‹ πŸš‡ πŸ““ πŸ’¬ πŸ“† πŸ‘€
Stefan Malzner
Stefan Malzner

πŸ’» πŸ–‹ 🎨 πŸ“– πŸ€” πŸš‡ πŸ“† ⚠️ 🌍
Amine Mouafik
Amine Mouafik

πŸ’¬ πŸ’» πŸ“– πŸ€” 🚧 πŸ“¦ πŸ“† πŸ‘€ πŸš‡
ZeroCool
ZeroCool

πŸ’» πŸ€”
rseitbekov
rseitbekov

πŸ’»
Peter Bittner
Peter Bittner

πŸ€” πŸ›
Bennett
Bennett

πŸ’» 🎨 πŸ“– πŸ€” 🌍 πŸ’‘ πŸ› πŸ–‹ πŸš‡ πŸ““ πŸ’¬ πŸ“† πŸ‘€
Stefan Malzner
Stefan Malzner

πŸ’» πŸ–‹ 🎨 πŸ“– πŸ€” πŸš‡ πŸ“† ⚠️ 🌍
Amine Mouafik
Amine Mouafik

πŸ’¬ πŸ’» πŸ“– πŸ€” 🚧 πŸ“¦ πŸ“† πŸ‘€ πŸš‡
ZeroCool
ZeroCool

πŸ’» πŸ€”
rseitbekov
rseitbekov

πŸ’»
Peter Bittner
Peter Bittner

πŸ€” πŸ›
Justus Saul
Justus Saul

πŸ› πŸ€”
Justus Saul
Justus Saul

πŸ› πŸ€”
igreil
igreil

πŸ€”
Marco Lopes
Marco Lopes

πŸ€”
dayzlun
dayzlun

πŸ›
dayzlun
dayzlun

πŸ›
Tobias GΓΌnther
Tobias GΓΌnther

πŸ€”
AGCaesar
AGCaesar

πŸ“¦