aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Bennett <hello@vantezzen.io>2020-10-04 16:27:26 +0200
committerLibravatar GitHub <noreply@github.com>2020-10-04 15:27:26 +0100
commitc9c067b286505621fbae3fc212638b45ae1c733a (patch)
treebeb3001b26ec3ffc05528d11fe60033971655a7c
parentFine-tune nightly releases scripts (diff)
downloadferdium-app-c9c067b286505621fbae3fc212638b45ae1c733a.tar.gz
ferdium-app-c9c067b286505621fbae3fc212638b45ae1c733a.tar.zst
ferdium-app-c9c067b286505621fbae3fc212638b45ae1c733a.zip
Add setting to enable nightly releases updates (#742)
Co-authored-by: Amine Mouafik <amine@mouafik.fr>
-rw-r--r--src/components/layout/AppLayout.js2
-rw-r--r--src/components/settings/settings/EditSettingsForm.js12
-rw-r--r--src/components/ui/ToggleRaw.js74
-rw-r--r--src/config.js1
-rw-r--r--src/containers/settings/EditSettingsScreen.js1
-rw-r--r--src/electron/ipc-api/autoUpdate.js9
-rw-r--r--src/features/nightlyBuilds/Component.js141
-rw-r--r--src/features/nightlyBuilds/index.js45
-rw-r--r--src/i18n/locales/defaultMessages.json197
-rw-r--r--src/i18n/locales/en-US.json6
-rw-r--r--src/i18n/locales/whitelist_en-US.json3
-rw-r--r--src/i18n/messages/src/components/layout/AppLayout.json16
-rw-r--r--src/i18n/messages/src/components/settings/settings/EditSettingsForm.json124
-rw-r--r--src/i18n/messages/src/features/nightlyBuilds/Component.json54
-rw-r--r--src/stores/FeaturesStore.js2
-rw-r--r--src/styles/features.scss (renamed from src/styles/quick-switch.scss)2
-rw-r--r--src/styles/main.scss2
17 files changed, 547 insertions, 144 deletions
diff --git a/src/components/layout/AppLayout.js b/src/components/layout/AppLayout.js
index 3b732e602..a60270a6f 100644
--- a/src/components/layout/AppLayout.js
+++ b/src/components/layout/AppLayout.js
@@ -9,6 +9,7 @@ import InfoBar from '../ui/InfoBar';
9import { Component as BasicAuth } from '../../features/basicAuth'; 9import { Component as BasicAuth } from '../../features/basicAuth';
10import { Component as ShareFranz } from '../../features/shareFranz'; 10import { Component as ShareFranz } from '../../features/shareFranz';
11import { Component as QuickSwitch } from '../../features/quickSwitch'; 11import { Component as QuickSwitch } from '../../features/quickSwitch';
12import { Component as NightlyBuilds } from '../../features/nightlyBuilds';
12import { Component as PublishDebugInfo } from '../../features/publishDebugInfo'; 13import { Component as PublishDebugInfo } from '../../features/publishDebugInfo';
13import ErrorBoundary from '../util/ErrorBoundary'; 14import ErrorBoundary from '../util/ErrorBoundary';
14 15
@@ -197,6 +198,7 @@ class AppLayout extends Component {
197 <BasicAuth /> 198 <BasicAuth />
198 <ShareFranz /> 199 <ShareFranz />
199 <QuickSwitch /> 200 <QuickSwitch />
201 <NightlyBuilds />
200 <PublishDebugInfo /> 202 <PublishDebugInfo />
201 {services} 203 {services}
202 {children} 204 {children}
diff --git a/src/components/settings/settings/EditSettingsForm.js b/src/components/settings/settings/EditSettingsForm.js
index 031203308..b6698b8e2 100644
--- a/src/components/settings/settings/EditSettingsForm.js
+++ b/src/components/settings/settings/EditSettingsForm.js
@@ -7,6 +7,7 @@ import { defineMessages, intlShape } from 'react-intl';
7import Form from '../../../lib/Form'; 7import Form from '../../../lib/Form';
8import Button from '../../ui/Button'; 8import Button from '../../ui/Button';
9import Toggle from '../../ui/Toggle'; 9import Toggle from '../../ui/Toggle';
10import ToggleRaw from '../../ui/ToggleRaw';
10import Select from '../../ui/Select'; 11import Select from '../../ui/Select';
11import PremiumFeatureContainer from '../../ui/PremiumFeatureContainer'; 12import PremiumFeatureContainer from '../../ui/PremiumFeatureContainer';
12import Input from '../../ui/Input'; 13import Input from '../../ui/Input';
@@ -170,6 +171,7 @@ export default @observer class EditSettingsForm extends Component {
170 hibernationEnabled: PropTypes.bool.isRequired, 171 hibernationEnabled: PropTypes.bool.isRequired,
171 isDarkmodeEnabled: PropTypes.bool.isRequired, 172 isDarkmodeEnabled: PropTypes.bool.isRequired,
172 isAdaptableDarkModeEnabled: PropTypes.bool.isRequired, 173 isAdaptableDarkModeEnabled: PropTypes.bool.isRequired,
174 isNightlyEnabled: PropTypes.bool.isRequired,
173 openProcessManager: PropTypes.func.isRequired, 175 openProcessManager: PropTypes.func.isRequired,
174 }; 176 };
175 177
@@ -224,6 +226,7 @@ export default @observer class EditSettingsForm extends Component {
224 isDarkmodeEnabled, 226 isDarkmodeEnabled,
225 openProcessManager, 227 openProcessManager,
226 isTodosActivated, 228 isTodosActivated,
229 isNightlyEnabled,
227 } = this.props; 230 } = this.props;
228 const { intl } = this.context; 231 const { intl } = this.context;
229 232
@@ -593,6 +596,15 @@ export default @observer class EditSettingsForm extends Component {
593 {automaticUpdates && ( 596 {automaticUpdates && (
594 <div> 597 <div>
595 <Toggle field={form.$('beta')} /> 598 <Toggle field={form.$('beta')} />
599 <ToggleRaw
600 field={{
601 value: isNightlyEnabled,
602 id: 'nightly',
603 label: 'Include nightly versions',
604 name: 'Nightly builds',
605 }}
606 onChange={window.ferdi.features.nightlyBuilds.toggleFeature}
607 />
596 {updateIsReadyToInstall ? ( 608 {updateIsReadyToInstall ? (
597 <Button 609 <Button
598 label={intl.formatMessage(messages.buttonInstallUpdate)} 610 label={intl.formatMessage(messages.buttonInstallUpdate)}
diff --git a/src/components/ui/ToggleRaw.js b/src/components/ui/ToggleRaw.js
new file mode 100644
index 000000000..ee817356b
--- /dev/null
+++ b/src/components/ui/ToggleRaw.js
@@ -0,0 +1,74 @@
1/**
2 * "Raw" Toggle - for usage without a MobX Form element
3 */
4import React, { Component } from 'react';
5import PropTypes from 'prop-types';
6import { observer } from 'mobx-react';
7import classnames from 'classnames';
8
9export default @observer class ToggleRaw extends Component {
10 static propTypes = {
11 onChange: PropTypes.func.isRequired,
12 field: PropTypes.shape({
13 value: PropTypes.bool.isRequired,
14 id: PropTypes.string,
15 name: PropTypes.string,
16 label: PropTypes.string,
17 }).isRequired,
18 className: PropTypes.string,
19 showLabel: PropTypes.bool,
20 disabled: PropTypes.bool,
21 };
22
23 static defaultProps = {
24 className: '',
25 showLabel: true,
26 disabled: false,
27 };
28
29 onChange(e) {
30 const { onChange } = this.props;
31
32 onChange(e);
33 }
34
35 render() {
36 const {
37 field,
38 className,
39 showLabel,
40 disabled,
41 } = this.props;
42
43 return (
44 <div
45 className={classnames([
46 'franz-form__field',
47 'franz-form__toggle-wrapper',
48 'franz-form__toggle-disabled',
49 className,
50 ])}
51 >
52 <label
53 htmlFor={field.id}
54 className={classnames({
55 'franz-form__toggle': true,
56 'is-active': field.value,
57 })}
58 >
59 <div className="franz-form__toggle-button" />
60 <input
61 type="checkbox"
62 id={field.id}
63 name={field.name}
64 value={field.name}
65 checked={field.value}
66 onChange={e => (!disabled ? this.onChange(e) : null)}
67 />
68 </label>
69 {field.error && <div className={field.error}>{field.error}</div>}
70 {field.label && showLabel && <label className="franz-form__label" htmlFor={field.id}>{field.label}</label>}
71 </div>
72 );
73 }
74}
diff --git a/src/config.js b/src/config.js
index f9eecf375..c53ec7da9 100644
--- a/src/config.js
+++ b/src/config.js
@@ -130,6 +130,7 @@ export const DEFAULT_APP_SETTINGS = {
130 serviceRibbonWidth: 68, 130 serviceRibbonWidth: 68,
131 iconSize: iconSizeBias, 131 iconSize: iconSizeBias,
132 sentry: false, 132 sentry: false,
133 nightly: false,
133 navigationBarBehaviour: 'custom', 134 navigationBarBehaviour: 'custom',
134}; 135};
135 136
diff --git a/src/containers/settings/EditSettingsScreen.js b/src/containers/settings/EditSettingsScreen.js
index c6149fd9e..aa50bac68 100644
--- a/src/containers/settings/EditSettingsScreen.js
+++ b/src/containers/settings/EditSettingsScreen.js
@@ -586,6 +586,7 @@ export default @inject('stores', 'actions') @observer class EditSettingsScreen e
586 isAdaptableDarkModeEnabled={this.props.stores.settings.app.adaptableDarkMode} 586 isAdaptableDarkModeEnabled={this.props.stores.settings.app.adaptableDarkMode}
587 isTodosActivated={this.props.stores.todos.isFeatureEnabledByUser} 587 isTodosActivated={this.props.stores.todos.isFeatureEnabledByUser}
588 isUsingCustomTodoService={this.props.stores.todos.isUsingCustomTodoService} 588 isUsingCustomTodoService={this.props.stores.todos.isUsingCustomTodoService}
589 isNightlyEnabled={this.props.stores.settings.app.nightly}
589 openProcessManager={() => this.openProcessManager()} 590 openProcessManager={() => this.openProcessManager()}
590 /> 591 />
591 </ErrorBoundary> 592 </ErrorBoundary>
diff --git a/src/electron/ipc-api/autoUpdate.js b/src/electron/ipc-api/autoUpdate.js
index 8c4d908dc..148ca5640 100644
--- a/src/electron/ipc-api/autoUpdate.js
+++ b/src/electron/ipc-api/autoUpdate.js
@@ -15,6 +15,15 @@ export default (params) => {
15 try { 15 try {
16 autoUpdater.autoInstallOnAppQuit = false; 16 autoUpdater.autoInstallOnAppQuit = false;
17 autoUpdater.allowPrerelease = Boolean(params.settings.app.get('beta')); 17 autoUpdater.allowPrerelease = Boolean(params.settings.app.get('beta'));
18
19 if (params.settings.app.get('nightly')) {
20 autoUpdater.setFeedURL({
21 provider: 'github',
22 repo: 'nightlies',
23 owner: 'getferdi',
24 });
25 }
26
18 if (args.action === 'check') { 27 if (args.action === 'check') {
19 autoUpdater.checkForUpdates(); 28 autoUpdater.checkForUpdates();
20 } else if (args.action === 'install') { 29 } else if (args.action === 'install') {
diff --git a/src/features/nightlyBuilds/Component.js b/src/features/nightlyBuilds/Component.js
new file mode 100644
index 000000000..b340a0a7e
--- /dev/null
+++ b/src/features/nightlyBuilds/Component.js
@@ -0,0 +1,141 @@
1import React, { Component } from 'react';
2import PropTypes from 'prop-types';
3import { observer, inject } from 'mobx-react';
4import injectSheet from 'react-jss';
5import { defineMessages, intlShape } from 'react-intl';
6import { H1 } from '@meetfranz/ui';
7
8import Modal from '../../components/ui/Modal';
9import Button from '../../components/ui/Button';
10import { state as ModalState } from '.';
11import SettingsStore from '../../stores/SettingsStore';
12
13const messages = defineMessages({
14 title: {
15 id: 'feature.nightlyBuilds.title',
16 defaultMessage: '!!!Nightly Builds',
17 },
18 info: {
19 id: 'feature.nightlyBuilds.info',
20 defaultMessage: '!!!Nightly builds are highly experimental versions of Ferdi that may contain unpolished or uncompleted features. These nightly builds are mainly used by developers to test their newly developed features and how they will perform in the final build. If you don\'t know what you are doing, we suggest not activating nightly builds.',
21 },
22 activate: {
23 id: 'feature.nightlyBuilds.activate',
24 defaultMessage: '!!!Activate',
25 },
26 cancel: {
27 id: 'feature.nightlyBuilds.cancel',
28 defaultMessage: '!!!Cancel',
29 },
30});
31
32const styles = () => ({
33 info: {
34 paddingTop: 20,
35 paddingBottom: 20,
36 },
37 headline: {
38 fontSize: 20,
39 marginBottom: 20,
40 },
41 buttonContainer: {
42 display: 'flex',
43 },
44 button: {
45 width: '50%',
46 marginTop: 10,
47 cursor: 'pointer',
48 },
49 activateButton: {
50 marginRight: 10,
51 background: '#c45a5a !important',
52 color: '#ffffff !important',
53 },
54});
55
56export default @injectSheet(styles) @inject('stores', 'actions') @observer class nightlyBuildsModal extends Component {
57 static contextTypes = {
58 intl: intlShape,
59 };
60
61 close() {
62 ModalState.isModalVisible = false;
63
64 const { ui } = this.props.actions;
65 ui.openSettings({ path: 'app' });
66 }
67
68 activate() {
69 const { settings, user } = this.props.actions;
70
71 settings.update({
72 type: 'app',
73 data: {
74 nightly: true,
75 },
76 });
77 user.update({
78 userData: {
79 nightly: true,
80 },
81 });
82 this.close();
83 }
84
85 render() {
86 const { isModalVisible } = ModalState;
87
88 const {
89 classes,
90 } = this.props;
91
92 const { intl } = this.context;
93
94 return (
95 <Modal
96 isOpen={isModalVisible}
97 shouldCloseOnOverlayClick
98 close={this.close.bind(this)}
99 >
100 <H1 className={classes.headline}>
101 {intl.formatMessage(messages.title)}
102 </H1>
103
104 <p className={classes.info}>{intl.formatMessage(messages.info)}</p>
105
106 <div className={classes.buttonContainer}>
107 <Button
108 type="button"
109 label={intl.formatMessage(messages.activate)}
110 className={`${classes.button} ${classes.activateButton}`}
111 onClick={() => this.activate()}
112 />
113 <Button
114 type="button"
115 label={intl.formatMessage(messages.cancel)}
116 className={classes.button}
117 onClick={() => this.close()}
118 />
119 </div>
120 </Modal>
121 );
122 }
123}
124
125nightlyBuildsModal.wrappedComponent.propTypes = {
126 stores: PropTypes.shape({
127 settings: PropTypes.instanceOf(SettingsStore).isRequired,
128 }).isRequired,
129 actions: PropTypes.shape({
130 settings: PropTypes.shape({
131 update: PropTypes.func.isRequired,
132 }).isRequired,
133 user: PropTypes.shape({
134 update: PropTypes.func.isRequired,
135 }).isRequired,
136 ui: PropTypes.shape({
137 openSettings: PropTypes.func.isRequired,
138 }).isRequired,
139 }).isRequired,
140 classes: PropTypes.object.isRequired,
141};
diff --git a/src/features/nightlyBuilds/index.js b/src/features/nightlyBuilds/index.js
new file mode 100644
index 000000000..34fe37d4d
--- /dev/null
+++ b/src/features/nightlyBuilds/index.js
@@ -0,0 +1,45 @@
1import { observable } from 'mobx';
2
3export { default as Component } from './Component';
4
5const debug = require('debug')('Ferdi:feature:nightlyBuilds');
6
7const defaultState = {
8 isModalVisible: false,
9};
10
11export const state = observable(defaultState);
12
13export default function initialize() {
14 debug('Initialize nightlyBuilds feature');
15
16 function showModal() {
17 state.isModalVisible = true;
18 }
19
20 function toggleFeature() {
21 if (window.ferdi.stores.settings.app.nightly) {
22 window.ferdi.actions.settings.update({
23 type: 'app',
24 data: {
25 nightly: false,
26 },
27 });
28 window.ferdi.actions.user.update({
29 userData: {
30 nightly: false,
31 },
32 });
33 } else {
34 // We need to close the settings, otherwise the modal will be drawn under the settings window
35 window.ferdi.actions.ui.closeSettings();
36 showModal();
37 }
38 }
39
40 window.ferdi.features.nightlyBuilds = {
41 state,
42 showModal,
43 toggleFeature,
44 };
45}
diff --git a/src/i18n/locales/defaultMessages.json b/src/i18n/locales/defaultMessages.json
index 58f37ebad..34bf58203 100644
--- a/src/i18n/locales/defaultMessages.json
+++ b/src/i18n/locales/defaultMessages.json
@@ -1056,52 +1056,52 @@
1056 "defaultMessage": "!!!Your services have been updated.", 1056 "defaultMessage": "!!!Your services have been updated.",
1057 "end": { 1057 "end": {
1058 "column": 3, 1058 "column": 3,
1059 "line": 34 1059 "line": 35
1060 }, 1060 },
1061 "file": "src/components/layout/AppLayout.js", 1061 "file": "src/components/layout/AppLayout.js",
1062 "id": "infobar.servicesUpdated", 1062 "id": "infobar.servicesUpdated",
1063 "start": { 1063 "start": {
1064 "column": 19, 1064 "column": 19,
1065 "line": 31 1065 "line": 32
1066 } 1066 }
1067 }, 1067 },
1068 { 1068 {
1069 "defaultMessage": "!!!Reload services", 1069 "defaultMessage": "!!!Reload services",
1070 "end": { 1070 "end": {
1071 "column": 3, 1071 "column": 3,
1072 "line": 38 1072 "line": 39
1073 }, 1073 },
1074 "file": "src/components/layout/AppLayout.js", 1074 "file": "src/components/layout/AppLayout.js",
1075 "id": "infobar.buttonReloadServices", 1075 "id": "infobar.buttonReloadServices",
1076 "start": { 1076 "start": {
1077 "column": 24, 1077 "column": 24,
1078 "line": 35 1078 "line": 36
1079 } 1079 }
1080 }, 1080 },
1081 { 1081 {
1082 "defaultMessage": "!!!Could not load services and user information", 1082 "defaultMessage": "!!!Could not load services and user information",
1083 "end": { 1083 "end": {
1084 "column": 3, 1084 "column": 3,
1085 "line": 42 1085 "line": 43
1086 }, 1086 },
1087 "file": "src/components/layout/AppLayout.js", 1087 "file": "src/components/layout/AppLayout.js",
1088 "id": "infobar.requiredRequestsFailed", 1088 "id": "infobar.requiredRequestsFailed",
1089 "start": { 1089 "start": {
1090 "column": 26, 1090 "column": 26,
1091 "line": 39 1091 "line": 40
1092 } 1092 }
1093 }, 1093 },
1094 { 1094 {
1095 "defaultMessage": "!!!There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", 1095 "defaultMessage": "!!!There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.",
1096 "end": { 1096 "end": {
1097 "column": 3, 1097 "column": 3,
1098 "line": 46 1098 "line": 47
1099 }, 1099 },
1100 "file": "src/components/layout/AppLayout.js", 1100 "file": "src/components/layout/AppLayout.js",
1101 "id": "infobar.authRequestFailed", 1101 "id": "infobar.authRequestFailed",
1102 "start": { 1102 "start": {
1103 "column": 21, 1103 "column": 21,
1104 "line": 43 1104 "line": 44
1105 } 1105 }
1106 } 1106 }
1107 ], 1107 ],
@@ -3075,403 +3075,403 @@
3075 "defaultMessage": "!!!Settings", 3075 "defaultMessage": "!!!Settings",
3076 "end": { 3076 "end": {
3077 "column": 3, 3077 "column": 3,
3078 "line": 25 3078 "line": 26
3079 }, 3079 },
3080 "file": "src/components/settings/settings/EditSettingsForm.js", 3080 "file": "src/components/settings/settings/EditSettingsForm.js",
3081 "id": "settings.app.headline", 3081 "id": "settings.app.headline",
3082 "start": { 3082 "start": {
3083 "column": 12, 3083 "column": 12,
3084 "line": 22 3084 "line": 23
3085 } 3085 }
3086 }, 3086 },
3087 { 3087 {
3088 "defaultMessage": "!!!General", 3088 "defaultMessage": "!!!General",
3089 "end": { 3089 "end": {
3090 "column": 3, 3090 "column": 3,
3091 "line": 29 3091 "line": 30
3092 }, 3092 },
3093 "file": "src/components/settings/settings/EditSettingsForm.js", 3093 "file": "src/components/settings/settings/EditSettingsForm.js",
3094 "id": "settings.app.headlineGeneral", 3094 "id": "settings.app.headlineGeneral",
3095 "start": { 3095 "start": {
3096 "column": 19, 3096 "column": 19,
3097 "line": 26 3097 "line": 27
3098 } 3098 }
3099 }, 3099 },
3100 { 3100 {
3101 "defaultMessage": "!!!Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data! Changing this option requires you to restart Ferdi.", 3101 "defaultMessage": "!!!Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data! Changing this option requires you to restart Ferdi.",
3102 "end": { 3102 "end": {
3103 "column": 3, 3103 "column": 3,
3104 "line": 33 3104 "line": 34
3105 }, 3105 },
3106 "file": "src/components/settings/settings/EditSettingsForm.js", 3106 "file": "src/components/settings/settings/EditSettingsForm.js",
3107 "id": "settings.app.sentryInfo", 3107 "id": "settings.app.sentryInfo",
3108 "start": { 3108 "start": {
3109 "column": 14, 3109 "column": 14,
3110 "line": 30 3110 "line": 31
3111 } 3111 }
3112 }, 3112 },
3113 { 3113 {
3114 "defaultMessage": "!!!By default, Ferdi will keep all your services open and loaded in the background so they are ready when you want to use them. Service Hibernation will unload your services after a specified amount. This is useful to save RAM or keeping services from slowing down your computer.", 3114 "defaultMessage": "!!!By default, Ferdi will keep all your services open and loaded in the background so they are ready when you want to use them. Service Hibernation will unload your services after a specified amount. This is useful to save RAM or keeping services from slowing down your computer.",
3115 "end": { 3115 "end": {
3116 "column": 3, 3116 "column": 3,
3117 "line": 37 3117 "line": 38
3118 }, 3118 },
3119 "file": "src/components/settings/settings/EditSettingsForm.js", 3119 "file": "src/components/settings/settings/EditSettingsForm.js",
3120 "id": "settings.app.hibernateInfo", 3120 "id": "settings.app.hibernateInfo",
3121 "start": { 3121 "start": {
3122 "column": 17, 3122 "column": 17,
3123 "line": 34 3123 "line": 35
3124 } 3124 }
3125 }, 3125 },
3126 { 3126 {
3127 "defaultMessage": "!!!Minutes of inactivity, after which Ferdi should automatically lock. Use 0 to disable", 3127 "defaultMessage": "!!!Minutes of inactivity, after which Ferdi should automatically lock. Use 0 to disable",
3128 "end": { 3128 "end": {
3129 "column": 3, 3129 "column": 3,
3130 "line": 41 3130 "line": 42
3131 }, 3131 },
3132 "file": "src/components/settings/settings/EditSettingsForm.js", 3132 "file": "src/components/settings/settings/EditSettingsForm.js",
3133 "id": "settings.app.inactivityLockInfo", 3133 "id": "settings.app.inactivityLockInfo",
3134 "start": { 3134 "start": {
3135 "column": 22, 3135 "column": 22,
3136 "line": 38 3136 "line": 39
3137 } 3137 }
3138 }, 3138 },
3139 { 3139 {
3140 "defaultMessage": "!!!This server will be used for the \"Franz Todo\" feature. (default: https://app.franztodos.com)", 3140 "defaultMessage": "!!!This server will be used for the \"Franz Todo\" feature. (default: https://app.franztodos.com)",
3141 "end": { 3141 "end": {
3142 "column": 3, 3142 "column": 3,
3143 "line": 45 3143 "line": 46
3144 }, 3144 },
3145 "file": "src/components/settings/settings/EditSettingsForm.js", 3145 "file": "src/components/settings/settings/EditSettingsForm.js",
3146 "id": "settings.app.todoServerInfo", 3146 "id": "settings.app.todoServerInfo",
3147 "start": { 3147 "start": {
3148 "column": 18, 3148 "column": 18,
3149 "line": 42 3149 "line": 43
3150 } 3150 }
3151 }, 3151 },
3152 { 3152 {
3153 "defaultMessage": "!!!Password", 3153 "defaultMessage": "!!!Password",
3154 "end": { 3154 "end": {
3155 "column": 3, 3155 "column": 3,
3156 "line": 49 3156 "line": 50
3157 }, 3157 },
3158 "file": "src/components/settings/settings/EditSettingsForm.js", 3158 "file": "src/components/settings/settings/EditSettingsForm.js",
3159 "id": "settings.app.lockedPassword", 3159 "id": "settings.app.lockedPassword",
3160 "start": { 3160 "start": {
3161 "column": 18, 3161 "column": 18,
3162 "line": 46 3162 "line": 47
3163 } 3163 }
3164 }, 3164 },
3165 { 3165 {
3166 "defaultMessage": "!!!Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", 3166 "defaultMessage": "!!!Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.",
3167 "end": { 3167 "end": {
3168 "column": 3, 3168 "column": 3,
3169 "line": 53 3169 "line": 54
3170 }, 3170 },
3171 "file": "src/components/settings/settings/EditSettingsForm.js", 3171 "file": "src/components/settings/settings/EditSettingsForm.js",
3172 "id": "settings.app.lockedPasswordInfo", 3172 "id": "settings.app.lockedPasswordInfo",
3173 "start": { 3173 "start": {
3174 "column": 22, 3174 "column": 22,
3175 "line": 50 3175 "line": 51
3176 } 3176 }
3177 }, 3177 },
3178 { 3178 {
3179 "defaultMessage": "!!!Password Lock allows you to keep your messages protected.\nUsing Password Lock, you will be prompted to enter your password everytime you start Ferdi or lock Ferdi yourself using the lock symbol in the bottom left corner or the shortcut CMD/CTRL+Shift+L.", 3179 "defaultMessage": "!!!Password Lock allows you to keep your messages protected.\nUsing Password Lock, you will be prompted to enter your password everytime you start Ferdi or lock Ferdi yourself using the lock symbol in the bottom left corner or the shortcut CMD/CTRL+Shift+L.",
3180 "end": { 3180 "end": {
3181 "column": 3, 3181 "column": 3,
3182 "line": 57 3182 "line": 58
3183 }, 3183 },
3184 "file": "src/components/settings/settings/EditSettingsForm.js", 3184 "file": "src/components/settings/settings/EditSettingsForm.js",
3185 "id": "settings.app.lockInfo", 3185 "id": "settings.app.lockInfo",
3186 "start": { 3186 "start": {
3187 "column": 12, 3187 "column": 12,
3188 "line": 54 3188 "line": 55
3189 } 3189 }
3190 }, 3190 },
3191 { 3191 {
3192 "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.", 3192 "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.",
3193 "end": { 3193 "end": {
3194 "column": 3, 3194 "column": 3,
3195 "line": 61 3195 "line": 62
3196 }, 3196 },
3197 "file": "src/components/settings/settings/EditSettingsForm.js", 3197 "file": "src/components/settings/settings/EditSettingsForm.js",
3198 "id": "settings.app.scheduledDNDTimeInfo", 3198 "id": "settings.app.scheduledDNDTimeInfo",
3199 "start": { 3199 "start": {
3200 "column": 24, 3200 "column": 24,
3201 "line": 58 3201 "line": 59
3202 } 3202 }
3203 }, 3203 },
3204 { 3204 {
3205 "defaultMessage": "!!!Scheduled Do-not-Disturb allows you to define a period of time in which you do not want to get Notifications from Ferdi.", 3205 "defaultMessage": "!!!Scheduled Do-not-Disturb allows you to define a period of time in which you do not want to get Notifications from Ferdi.",
3206 "end": { 3206 "end": {
3207 "column": 3, 3207 "column": 3,
3208 "line": 65 3208 "line": 66
3209 }, 3209 },
3210 "file": "src/components/settings/settings/EditSettingsForm.js", 3210 "file": "src/components/settings/settings/EditSettingsForm.js",
3211 "id": "settings.app.scheduledDNDInfo", 3211 "id": "settings.app.scheduledDNDInfo",
3212 "start": { 3212 "start": {
3213 "column": 20, 3213 "column": 20,
3214 "line": 62 3214 "line": 63
3215 } 3215 }
3216 }, 3216 },
3217 { 3217 {
3218 "defaultMessage": "!!!Language", 3218 "defaultMessage": "!!!Language",
3219 "end": { 3219 "end": {
3220 "column": 3, 3220 "column": 3,
3221 "line": 69 3221 "line": 70
3222 }, 3222 },
3223 "file": "src/components/settings/settings/EditSettingsForm.js", 3223 "file": "src/components/settings/settings/EditSettingsForm.js",
3224 "id": "settings.app.headlineLanguage", 3224 "id": "settings.app.headlineLanguage",
3225 "start": { 3225 "start": {
3226 "column": 20, 3226 "column": 20,
3227 "line": 66 3227 "line": 67
3228 } 3228 }
3229 }, 3229 },
3230 { 3230 {
3231 "defaultMessage": "!!!Updates", 3231 "defaultMessage": "!!!Updates",
3232 "end": { 3232 "end": {
3233 "column": 3, 3233 "column": 3,
3234 "line": 73 3234 "line": 74
3235 }, 3235 },
3236 "file": "src/components/settings/settings/EditSettingsForm.js", 3236 "file": "src/components/settings/settings/EditSettingsForm.js",
3237 "id": "settings.app.headlineUpdates", 3237 "id": "settings.app.headlineUpdates",
3238 "start": { 3238 "start": {
3239 "column": 19, 3239 "column": 19,
3240 "line": 70 3240 "line": 71
3241 } 3241 }
3242 }, 3242 },
3243 { 3243 {
3244 "defaultMessage": "!!!Appearance", 3244 "defaultMessage": "!!!Appearance",
3245 "end": { 3245 "end": {
3246 "column": 3, 3246 "column": 3,
3247 "line": 77 3247 "line": 78
3248 }, 3248 },
3249 "file": "src/components/settings/settings/EditSettingsForm.js", 3249 "file": "src/components/settings/settings/EditSettingsForm.js",
3250 "id": "settings.app.headlineAppearance", 3250 "id": "settings.app.headlineAppearance",
3251 "start": { 3251 "start": {
3252 "column": 22, 3252 "column": 22,
3253 "line": 74 3253 "line": 75
3254 } 3254 }
3255 }, 3255 },
3256 { 3256 {
3257 "defaultMessage": "!!!Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 3257 "defaultMessage": "!!!Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
3258 "end": { 3258 "end": {
3259 "column": 3, 3259 "column": 3,
3260 "line": 81 3260 "line": 82
3261 }, 3261 },
3262 "file": "src/components/settings/settings/EditSettingsForm.js", 3262 "file": "src/components/settings/settings/EditSettingsForm.js",
3263 "id": "settings.app.universalDarkModeInfo", 3263 "id": "settings.app.universalDarkModeInfo",
3264 "start": { 3264 "start": {
3265 "column": 25, 3265 "column": 25,
3266 "line": 78 3266 "line": 79
3267 } 3267 }
3268 }, 3268 },
3269 { 3269 {
3270 "defaultMessage": "!!!Write your accent color in a CSS-compatible format. (Default: #7367f0)", 3270 "defaultMessage": "!!!Write your accent color in a CSS-compatible format. (Default: #7367f0)",
3271 "end": { 3271 "end": {
3272 "column": 3, 3272 "column": 3,
3273 "line": 85 3273 "line": 86
3274 }, 3274 },
3275 "file": "src/components/settings/settings/EditSettingsForm.js", 3275 "file": "src/components/settings/settings/EditSettingsForm.js",
3276 "id": "settings.app.accentColorInfo", 3276 "id": "settings.app.accentColorInfo",
3277 "start": { 3277 "start": {
3278 "column": 19, 3278 "column": 19,
3279 "line": 82 3279 "line": 83
3280 } 3280 }
3281 }, 3281 },
3282 { 3282 {
3283 "defaultMessage": "!!!Advanced", 3283 "defaultMessage": "!!!Advanced",
3284 "end": { 3284 "end": {
3285 "column": 3, 3285 "column": 3,
3286 "line": 89 3286 "line": 90
3287 }, 3287 },
3288 "file": "src/components/settings/settings/EditSettingsForm.js", 3288 "file": "src/components/settings/settings/EditSettingsForm.js",
3289 "id": "settings.app.headlineAdvanced", 3289 "id": "settings.app.headlineAdvanced",
3290 "start": { 3290 "start": {
3291 "column": 20, 3291 "column": 20,
3292 "line": 86 3292 "line": 87
3293 } 3293 }
3294 }, 3294 },
3295 { 3295 {
3296 "defaultMessage": "!!!Help us to translate Ferdi into your language.", 3296 "defaultMessage": "!!!Help us to translate Ferdi into your language.",
3297 "end": { 3297 "end": {
3298 "column": 3, 3298 "column": 3,
3299 "line": 93 3299 "line": 94
3300 }, 3300 },
3301 "file": "src/components/settings/settings/EditSettingsForm.js", 3301 "file": "src/components/settings/settings/EditSettingsForm.js",
3302 "id": "settings.app.translationHelp", 3302 "id": "settings.app.translationHelp",
3303 "start": { 3303 "start": {
3304 "column": 19, 3304 "column": 19,
3305 "line": 90 3305 "line": 91
3306 } 3306 }
3307 }, 3307 },
3308 { 3308 {
3309 "defaultMessage": "!!!Ferdi uses your Mac's build-in spellchecker to check for typos. If you want to change the languages the spellchecker checks for, you can do so in your Mac's System Preferences.", 3309 "defaultMessage": "!!!Ferdi uses your Mac's build-in spellchecker to check for typos. If you want to change the languages the spellchecker checks for, you can do so in your Mac's System Preferences.",
3310 "end": { 3310 "end": {
3311 "column": 3, 3311 "column": 3,
3312 "line": 97 3312 "line": 98
3313 }, 3313 },
3314 "file": "src/components/settings/settings/EditSettingsForm.js", 3314 "file": "src/components/settings/settings/EditSettingsForm.js",
3315 "id": "settings.app.spellCheckerLanguageInfo", 3315 "id": "settings.app.spellCheckerLanguageInfo",
3316 "start": { 3316 "start": {
3317 "column": 28, 3317 "column": 28,
3318 "line": 94 3318 "line": 95
3319 } 3319 }
3320 }, 3320 },
3321 { 3321 {
3322 "defaultMessage": "!!!Cache", 3322 "defaultMessage": "!!!Cache",
3323 "end": { 3323 "end": {
3324 "column": 3, 3324 "column": 3,
3325 "line": 101 3325 "line": 102
3326 }, 3326 },
3327 "file": "src/components/settings/settings/EditSettingsForm.js", 3327 "file": "src/components/settings/settings/EditSettingsForm.js",
3328 "id": "settings.app.subheadlineCache", 3328 "id": "settings.app.subheadlineCache",
3329 "start": { 3329 "start": {
3330 "column": 20, 3330 "column": 20,
3331 "line": 98 3331 "line": 99
3332 } 3332 }
3333 }, 3333 },
3334 { 3334 {
3335 "defaultMessage": "!!!Ferdi cache is currently using {size} of disk space.", 3335 "defaultMessage": "!!!Ferdi cache is currently using {size} of disk space.",
3336 "end": { 3336 "end": {
3337 "column": 3, 3337 "column": 3,
3338 "line": 105 3338 "line": 106
3339 }, 3339 },
3340 "file": "src/components/settings/settings/EditSettingsForm.js", 3340 "file": "src/components/settings/settings/EditSettingsForm.js",
3341 "id": "settings.app.cacheInfo", 3341 "id": "settings.app.cacheInfo",
3342 "start": { 3342 "start": {
3343 "column": 13, 3343 "column": 13,
3344 "line": 102 3344 "line": 103
3345 } 3345 }
3346 }, 3346 },
3347 { 3347 {
3348 "defaultMessage": "!!!Couldn't clear all cache", 3348 "defaultMessage": "!!!Couldn't clear all cache",
3349 "end": { 3349 "end": {
3350 "column": 3, 3350 "column": 3,
3351 "line": 109 3351 "line": 110
3352 }, 3352 },
3353 "file": "src/components/settings/settings/EditSettingsForm.js", 3353 "file": "src/components/settings/settings/EditSettingsForm.js",
3354 "id": "settings.app.cacheNotCleared", 3354 "id": "settings.app.cacheNotCleared",
3355 "start": { 3355 "start": {
3356 "column": 19, 3356 "column": 19,
3357 "line": 106 3357 "line": 107
3358 } 3358 }
3359 }, 3359 },
3360 { 3360 {
3361 "defaultMessage": "!!!Clear cache", 3361 "defaultMessage": "!!!Clear cache",
3362 "end": { 3362 "end": {
3363 "column": 3, 3363 "column": 3,
3364 "line": 113 3364 "line": 114
3365 }, 3365 },
3366 "file": "src/components/settings/settings/EditSettingsForm.js", 3366 "file": "src/components/settings/settings/EditSettingsForm.js",
3367 "id": "settings.app.buttonClearAllCache", 3367 "id": "settings.app.buttonClearAllCache",
3368 "start": { 3368 "start": {
3369 "column": 23, 3369 "column": 23,
3370 "line": 110 3370 "line": 111
3371 } 3371 }
3372 }, 3372 },
3373 { 3373 {
3374 "defaultMessage": "!!!Check for updates", 3374 "defaultMessage": "!!!Check for updates",
3375 "end": { 3375 "end": {
3376 "column": 3, 3376 "column": 3,
3377 "line": 117 3377 "line": 118
3378 }, 3378 },
3379 "file": "src/components/settings/settings/EditSettingsForm.js", 3379 "file": "src/components/settings/settings/EditSettingsForm.js",
3380 "id": "settings.app.buttonSearchForUpdate", 3380 "id": "settings.app.buttonSearchForUpdate",
3381 "start": { 3381 "start": {
3382 "column": 25, 3382 "column": 25,
3383 "line": 114 3383 "line": 115
3384 } 3384 }
3385 }, 3385 },
3386 { 3386 {
3387 "defaultMessage": "!!!Restart & install update", 3387 "defaultMessage": "!!!Restart & install update",
3388 "end": { 3388 "end": {
3389 "column": 3, 3389 "column": 3,
3390 "line": 121 3390 "line": 122
3391 }, 3391 },
3392 "file": "src/components/settings/settings/EditSettingsForm.js", 3392 "file": "src/components/settings/settings/EditSettingsForm.js",
3393 "id": "settings.app.buttonInstallUpdate", 3393 "id": "settings.app.buttonInstallUpdate",
3394 "start": { 3394 "start": {
3395 "column": 23, 3395 "column": 23,
3396 "line": 118 3396 "line": 119
3397 } 3397 }
3398 }, 3398 },
3399 { 3399 {
3400 "defaultMessage": "!!!Is searching for update", 3400 "defaultMessage": "!!!Is searching for update",
3401 "end": { 3401 "end": {
3402 "column": 3, 3402 "column": 3,
3403 "line": 125 3403 "line": 126
3404 }, 3404 },
3405 "file": "src/components/settings/settings/EditSettingsForm.js", 3405 "file": "src/components/settings/settings/EditSettingsForm.js",
3406 "id": "settings.app.updateStatusSearching", 3406 "id": "settings.app.updateStatusSearching",
3407 "start": { 3407 "start": {
3408 "column": 25, 3408 "column": 25,
3409 "line": 122 3409 "line": 123
3410 } 3410 }
3411 }, 3411 },
3412 { 3412 {
3413 "defaultMessage": "!!!Update available, downloading...", 3413 "defaultMessage": "!!!Update available, downloading...",
3414 "end": { 3414 "end": {
3415 "column": 3, 3415 "column": 3,
3416 "line": 129 3416 "line": 130
3417 }, 3417 },
3418 "file": "src/components/settings/settings/EditSettingsForm.js", 3418 "file": "src/components/settings/settings/EditSettingsForm.js",
3419 "id": "settings.app.updateStatusAvailable", 3419 "id": "settings.app.updateStatusAvailable",
3420 "start": { 3420 "start": {
3421 "column": 25, 3421 "column": 25,
3422 "line": 126 3422 "line": 127
3423 } 3423 }
3424 }, 3424 },
3425 { 3425 {
3426 "defaultMessage": "!!!You are using the latest version of Ferdi", 3426 "defaultMessage": "!!!You are using the latest version of Ferdi",
3427 "end": { 3427 "end": {
3428 "column": 3, 3428 "column": 3,
3429 "line": 133 3429 "line": 134
3430 }, 3430 },
3431 "file": "src/components/settings/settings/EditSettingsForm.js", 3431 "file": "src/components/settings/settings/EditSettingsForm.js",
3432 "id": "settings.app.updateStatusUpToDate", 3432 "id": "settings.app.updateStatusUpToDate",
3433 "start": { 3433 "start": {
3434 "column": 24, 3434 "column": 24,
3435 "line": 130 3435 "line": 131
3436 } 3436 }
3437 }, 3437 },
3438 { 3438 {
3439 "defaultMessage": "!!!Current version:", 3439 "defaultMessage": "!!!Current version:",
3440 "end": { 3440 "end": {
3441 "column": 3, 3441 "column": 3,
3442 "line": 137 3442 "line": 138
3443 }, 3443 },
3444 "file": "src/components/settings/settings/EditSettingsForm.js", 3444 "file": "src/components/settings/settings/EditSettingsForm.js",
3445 "id": "settings.app.currentVersion", 3445 "id": "settings.app.currentVersion",
3446 "start": { 3446 "start": {
3447 "column": 18, 3447 "column": 18,
3448 "line": 134 3448 "line": 135
3449 } 3449 }
3450 }, 3450 },
3451 { 3451 {
3452 "defaultMessage": "!!!Changes require restart", 3452 "defaultMessage": "!!!Changes require restart",
3453 "end": { 3453 "end": {
3454 "column": 3, 3454 "column": 3,
3455 "line": 141 3455 "line": 142
3456 }, 3456 },
3457 "file": "src/components/settings/settings/EditSettingsForm.js", 3457 "file": "src/components/settings/settings/EditSettingsForm.js",
3458 "id": "settings.app.restartRequired", 3458 "id": "settings.app.restartRequired",
3459 "start": { 3459 "start": {
3460 "column": 29, 3460 "column": 29,
3461 "line": 138 3461 "line": 139
3462 } 3462 }
3463 }, 3463 },
3464 { 3464 {
3465 "defaultMessage": "!!!Official translations are English & German. All other languages are community based translations.", 3465 "defaultMessage": "!!!Official translations are English & German. All other languages are community based translations.",
3466 "end": { 3466 "end": {
3467 "column": 3, 3467 "column": 3,
3468 "line": 145 3468 "line": 146
3469 }, 3469 },
3470 "file": "src/components/settings/settings/EditSettingsForm.js", 3470 "file": "src/components/settings/settings/EditSettingsForm.js",
3471 "id": "settings.app.languageDisclaimer", 3471 "id": "settings.app.languageDisclaimer",
3472 "start": { 3472 "start": {
3473 "column": 22, 3473 "column": 22,
3474 "line": 142 3474 "line": 143
3475 } 3475 }
3476 } 3476 }
3477 ], 3477 ],
@@ -5317,6 +5317,63 @@
5317 { 5317 {
5318 "descriptors": [ 5318 "descriptors": [
5319 { 5319 {
5320 "defaultMessage": "!!!Nightly Builds",
5321 "end": {
5322 "column": 3,
5323 "line": 17
5324 },
5325 "file": "src/features/nightlyBuilds/Component.js",
5326 "id": "feature.nightlyBuilds.title",
5327 "start": {
5328 "column": 9,
5329 "line": 14
5330 }
5331 },
5332 {
5333 "defaultMessage": "!!!Nightly builds are highly experimental versions of Ferdi that may contain unpolished or uncompleted features. These nightly builds are mainly used by developers to test their newly developed features and how they will perform in the final build. If you don't know what you are doing, we suggest not activating nightly builds.",
5334 "end": {
5335 "column": 3,
5336 "line": 21
5337 },
5338 "file": "src/features/nightlyBuilds/Component.js",
5339 "id": "feature.nightlyBuilds.info",
5340 "start": {
5341 "column": 8,
5342 "line": 18
5343 }
5344 },
5345 {
5346 "defaultMessage": "!!!Activate",
5347 "end": {
5348 "column": 3,
5349 "line": 25
5350 },
5351 "file": "src/features/nightlyBuilds/Component.js",
5352 "id": "feature.nightlyBuilds.activate",
5353 "start": {
5354 "column": 12,
5355 "line": 22
5356 }
5357 },
5358 {
5359 "defaultMessage": "!!!Cancel",
5360 "end": {
5361 "column": 3,
5362 "line": 29
5363 },
5364 "file": "src/features/nightlyBuilds/Component.js",
5365 "id": "feature.nightlyBuilds.cancel",
5366 "start": {
5367 "column": 10,
5368 "line": 26
5369 }
5370 }
5371 ],
5372 "path": "src/features/nightlyBuilds/Component.json"
5373 },
5374 {
5375 "descriptors": [
5376 {
5320 "defaultMessage": "!!!per month", 5377 "defaultMessage": "!!!per month",
5321 "end": { 5378 "end": {
5322 "column": 3, 5379 "column": 3,
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index fd5c0755b..95481f5de 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -19,6 +19,10 @@
19 "feature.delayApp.trial.headline": "Get the free Ferdi Professional 14 day trial and skip the line", 19 "feature.delayApp.trial.headline": "Get the free Ferdi Professional 14 day trial and skip the line",
20 "feature.delayApp.upgrade.action": "Get a Ferdi Supporter License", 20 "feature.delayApp.upgrade.action": "Get a Ferdi Supporter License",
21 "feature.delayApp.upgrade.actionShort": "Upgrade account", 21 "feature.delayApp.upgrade.actionShort": "Upgrade account",
22 "feature.nightlyBuilds.activate": "Activate",
23 "feature.nightlyBuilds.cancel": "Cancel",
24 "feature.nightlyBuilds.info": "Nightly builds are highly experimental versions of Ferdi that may contain unpolished or uncompleted features. These nightly builds are mainly used by developers to test their newly developed features and how they will perform in the final build. If you don't know what you are doing, we suggest not activating nightly builds.",
25 "feature.nightlyBuilds.title": "Nightly Builds",
22 "feature.planSelection.cta.ctaDowngradeFree": "Downgrade to Free", 26 "feature.planSelection.cta.ctaDowngradeFree": "Downgrade to Free",
23 "feature.planSelection.cta.stayOnFree": "Stay on Free", 27 "feature.planSelection.cta.stayOnFree": "Stay on Free",
24 "feature.planSelection.cta.trial": "Start my free 14-days Trial", 28 "feature.planSelection.cta.trial": "Start my free 14-days Trial",
@@ -529,4 +533,4 @@
529 "workspaceDrawer.workspaceFeatureInfo": "<p>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.</p><p>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.</p>", 533 "workspaceDrawer.workspaceFeatureInfo": "<p>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.</p><p>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.</p>",
530 "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", 534 "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings",
531 "workspaces.switchingIndicator.switchingTo": "Switching to" 535 "workspaces.switchingIndicator.switchingTo": "Switching to"
532} 536} \ 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 fe51488c7..32960f8ce 100644
--- a/src/i18n/locales/whitelist_en-US.json
+++ b/src/i18n/locales/whitelist_en-US.json
@@ -1 +1,2 @@
1[] 1[
2] \ No newline at end of file
diff --git a/src/i18n/messages/src/components/layout/AppLayout.json b/src/i18n/messages/src/components/layout/AppLayout.json
index 5a8e082f2..554758f82 100644
--- a/src/i18n/messages/src/components/layout/AppLayout.json
+++ b/src/i18n/messages/src/components/layout/AppLayout.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Your services have been updated.", 4 "defaultMessage": "!!!Your services have been updated.",
5 "file": "src/components/layout/AppLayout.js", 5 "file": "src/components/layout/AppLayout.js",
6 "start": { 6 "start": {
7 "line": 31, 7 "line": 32,
8 "column": 19 8 "column": 19
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 34, 11 "line": 35,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,11 +17,11 @@
17 "defaultMessage": "!!!Reload services", 17 "defaultMessage": "!!!Reload services",
18 "file": "src/components/layout/AppLayout.js", 18 "file": "src/components/layout/AppLayout.js",
19 "start": { 19 "start": {
20 "line": 35, 20 "line": 36,
21 "column": 24 21 "column": 24
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 38, 24 "line": 39,
25 "column": 3 25 "column": 3
26 } 26 }
27 }, 27 },
@@ -30,11 +30,11 @@
30 "defaultMessage": "!!!Could not load services and user information", 30 "defaultMessage": "!!!Could not load services and user information",
31 "file": "src/components/layout/AppLayout.js", 31 "file": "src/components/layout/AppLayout.js",
32 "start": { 32 "start": {
33 "line": 39, 33 "line": 40,
34 "column": 26 34 "column": 26
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 42, 37 "line": 43,
38 "column": 3 38 "column": 3
39 } 39 }
40 }, 40 },
@@ -43,11 +43,11 @@
43 "defaultMessage": "!!!There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.", 43 "defaultMessage": "!!!There were errors while trying to perform an authenticated request. Please try logging out and back in if this error persists.",
44 "file": "src/components/layout/AppLayout.js", 44 "file": "src/components/layout/AppLayout.js",
45 "start": { 45 "start": {
46 "line": 43, 46 "line": 44,
47 "column": 21 47 "column": 21
48 }, 48 },
49 "end": { 49 "end": {
50 "line": 46, 50 "line": 47,
51 "column": 3 51 "column": 3
52 } 52 }
53 } 53 }
diff --git a/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json b/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json
index 373cd78f9..ccd006117 100644
--- a/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json
+++ b/src/i18n/messages/src/components/settings/settings/EditSettingsForm.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Settings", 4 "defaultMessage": "!!!Settings",
5 "file": "src/components/settings/settings/EditSettingsForm.js", 5 "file": "src/components/settings/settings/EditSettingsForm.js",
6 "start": { 6 "start": {
7 "line": 22, 7 "line": 23,
8 "column": 12 8 "column": 12
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 25, 11 "line": 26,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,11 +17,11 @@
17 "defaultMessage": "!!!General", 17 "defaultMessage": "!!!General",
18 "file": "src/components/settings/settings/EditSettingsForm.js", 18 "file": "src/components/settings/settings/EditSettingsForm.js",
19 "start": { 19 "start": {
20 "line": 26, 20 "line": 27,
21 "column": 19 21 "column": 19
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 29, 24 "line": 30,
25 "column": 3 25 "column": 3
26 } 26 }
27 }, 27 },
@@ -30,11 +30,11 @@
30 "defaultMessage": "!!!Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data! Changing this option requires you to restart Ferdi.", 30 "defaultMessage": "!!!Sending telemetry data allows us to find errors in Ferdi - we will not send any personal information like your message data! Changing this option requires you to restart Ferdi.",
31 "file": "src/components/settings/settings/EditSettingsForm.js", 31 "file": "src/components/settings/settings/EditSettingsForm.js",
32 "start": { 32 "start": {
33 "line": 30, 33 "line": 31,
34 "column": 14 34 "column": 14
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 33, 37 "line": 34,
38 "column": 3 38 "column": 3
39 } 39 }
40 }, 40 },
@@ -43,11 +43,11 @@
43 "defaultMessage": "!!!By default, Ferdi will keep all your services open and loaded in the background so they are ready when you want to use them. Service Hibernation will unload your services after a specified amount. This is useful to save RAM or keeping services from slowing down your computer.", 43 "defaultMessage": "!!!By default, Ferdi will keep all your services open and loaded in the background so they are ready when you want to use them. Service Hibernation will unload your services after a specified amount. This is useful to save RAM or keeping services from slowing down your computer.",
44 "file": "src/components/settings/settings/EditSettingsForm.js", 44 "file": "src/components/settings/settings/EditSettingsForm.js",
45 "start": { 45 "start": {
46 "line": 34, 46 "line": 35,
47 "column": 17 47 "column": 17
48 }, 48 },
49 "end": { 49 "end": {
50 "line": 37, 50 "line": 38,
51 "column": 3 51 "column": 3
52 } 52 }
53 }, 53 },
@@ -56,11 +56,11 @@
56 "defaultMessage": "!!!Minutes of inactivity, after which Ferdi should automatically lock. Use 0 to disable", 56 "defaultMessage": "!!!Minutes of inactivity, after which Ferdi should automatically lock. Use 0 to disable",
57 "file": "src/components/settings/settings/EditSettingsForm.js", 57 "file": "src/components/settings/settings/EditSettingsForm.js",
58 "start": { 58 "start": {
59 "line": 38, 59 "line": 39,
60 "column": 22 60 "column": 22
61 }, 61 },
62 "end": { 62 "end": {
63 "line": 41, 63 "line": 42,
64 "column": 3 64 "column": 3
65 } 65 }
66 }, 66 },
@@ -69,11 +69,11 @@
69 "defaultMessage": "!!!This server will be used for the \"Franz Todo\" feature. (default: https://app.franztodos.com)", 69 "defaultMessage": "!!!This server will be used for the \"Franz Todo\" feature. (default: https://app.franztodos.com)",
70 "file": "src/components/settings/settings/EditSettingsForm.js", 70 "file": "src/components/settings/settings/EditSettingsForm.js",
71 "start": { 71 "start": {
72 "line": 42, 72 "line": 43,
73 "column": 18 73 "column": 18
74 }, 74 },
75 "end": { 75 "end": {
76 "line": 45, 76 "line": 46,
77 "column": 3 77 "column": 3
78 } 78 }
79 }, 79 },
@@ -82,11 +82,11 @@
82 "defaultMessage": "!!!Password", 82 "defaultMessage": "!!!Password",
83 "file": "src/components/settings/settings/EditSettingsForm.js", 83 "file": "src/components/settings/settings/EditSettingsForm.js",
84 "start": { 84 "start": {
85 "line": 46, 85 "line": 47,
86 "column": 18 86 "column": 18
87 }, 87 },
88 "end": { 88 "end": {
89 "line": 49, 89 "line": 50,
90 "column": 3 90 "column": 3
91 } 91 }
92 }, 92 },
@@ -95,11 +95,11 @@
95 "defaultMessage": "!!!Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.", 95 "defaultMessage": "!!!Please make sure to set a password you'll remember.\nIf you loose this password, you will have to reinstall Ferdi.",
96 "file": "src/components/settings/settings/EditSettingsForm.js", 96 "file": "src/components/settings/settings/EditSettingsForm.js",
97 "start": { 97 "start": {
98 "line": 50, 98 "line": 51,
99 "column": 22 99 "column": 22
100 }, 100 },
101 "end": { 101 "end": {
102 "line": 53, 102 "line": 54,
103 "column": 3 103 "column": 3
104 } 104 }
105 }, 105 },
@@ -108,11 +108,11 @@
108 "defaultMessage": "!!!Password Lock allows you to keep your messages protected.\nUsing Password Lock, you will be prompted to enter your password everytime you start Ferdi or lock Ferdi yourself using the lock symbol in the bottom left corner or the shortcut CMD/CTRL+Shift+L.", 108 "defaultMessage": "!!!Password Lock allows you to keep your messages protected.\nUsing Password Lock, you will be prompted to enter your password everytime you start Ferdi or lock Ferdi yourself using the lock symbol in the bottom left corner or the shortcut CMD/CTRL+Shift+L.",
109 "file": "src/components/settings/settings/EditSettingsForm.js", 109 "file": "src/components/settings/settings/EditSettingsForm.js",
110 "start": { 110 "start": {
111 "line": 54, 111 "line": 55,
112 "column": 12 112 "column": 12
113 }, 113 },
114 "end": { 114 "end": {
115 "line": 57, 115 "line": 58,
116 "column": 3 116 "column": 3
117 } 117 }
118 }, 118 },
@@ -121,11 +121,11 @@
121 "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.", 121 "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.",
122 "file": "src/components/settings/settings/EditSettingsForm.js", 122 "file": "src/components/settings/settings/EditSettingsForm.js",
123 "start": { 123 "start": {
124 "line": 58, 124 "line": 59,
125 "column": 24 125 "column": 24
126 }, 126 },
127 "end": { 127 "end": {
128 "line": 61, 128 "line": 62,
129 "column": 3 129 "column": 3
130 } 130 }
131 }, 131 },
@@ -134,11 +134,11 @@
134 "defaultMessage": "!!!Scheduled Do-not-Disturb allows you to define a period of time in which you do not want to get Notifications from Ferdi.", 134 "defaultMessage": "!!!Scheduled Do-not-Disturb allows you to define a period of time in which you do not want to get Notifications from Ferdi.",
135 "file": "src/components/settings/settings/EditSettingsForm.js", 135 "file": "src/components/settings/settings/EditSettingsForm.js",
136 "start": { 136 "start": {
137 "line": 62, 137 "line": 63,
138 "column": 20 138 "column": 20
139 }, 139 },
140 "end": { 140 "end": {
141 "line": 65, 141 "line": 66,
142 "column": 3 142 "column": 3
143 } 143 }
144 }, 144 },
@@ -147,11 +147,11 @@
147 "defaultMessage": "!!!Language", 147 "defaultMessage": "!!!Language",
148 "file": "src/components/settings/settings/EditSettingsForm.js", 148 "file": "src/components/settings/settings/EditSettingsForm.js",
149 "start": { 149 "start": {
150 "line": 66, 150 "line": 67,
151 "column": 20 151 "column": 20
152 }, 152 },
153 "end": { 153 "end": {
154 "line": 69, 154 "line": 70,
155 "column": 3 155 "column": 3
156 } 156 }
157 }, 157 },
@@ -160,11 +160,11 @@
160 "defaultMessage": "!!!Updates", 160 "defaultMessage": "!!!Updates",
161 "file": "src/components/settings/settings/EditSettingsForm.js", 161 "file": "src/components/settings/settings/EditSettingsForm.js",
162 "start": { 162 "start": {
163 "line": 70, 163 "line": 71,
164 "column": 19 164 "column": 19
165 }, 165 },
166 "end": { 166 "end": {
167 "line": 73, 167 "line": 74,
168 "column": 3 168 "column": 3
169 } 169 }
170 }, 170 },
@@ -173,11 +173,11 @@
173 "defaultMessage": "!!!Appearance", 173 "defaultMessage": "!!!Appearance",
174 "file": "src/components/settings/settings/EditSettingsForm.js", 174 "file": "src/components/settings/settings/EditSettingsForm.js",
175 "start": { 175 "start": {
176 "line": 74, 176 "line": 75,
177 "column": 22 177 "column": 22
178 }, 178 },
179 "end": { 179 "end": {
180 "line": 77, 180 "line": 78,
181 "column": 3 181 "column": 3
182 } 182 }
183 }, 183 },
@@ -186,11 +186,11 @@
186 "defaultMessage": "!!!Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.", 186 "defaultMessage": "!!!Universal Dark Mode tries to dynamically generate dark mode styles for services that are otherwise not currently supported.",
187 "file": "src/components/settings/settings/EditSettingsForm.js", 187 "file": "src/components/settings/settings/EditSettingsForm.js",
188 "start": { 188 "start": {
189 "line": 78, 189 "line": 79,
190 "column": 25 190 "column": 25
191 }, 191 },
192 "end": { 192 "end": {
193 "line": 81, 193 "line": 82,
194 "column": 3 194 "column": 3
195 } 195 }
196 }, 196 },
@@ -199,11 +199,11 @@
199 "defaultMessage": "!!!Write your accent color in a CSS-compatible format. (Default: #7367f0)", 199 "defaultMessage": "!!!Write your accent color in a CSS-compatible format. (Default: #7367f0)",
200 "file": "src/components/settings/settings/EditSettingsForm.js", 200 "file": "src/components/settings/settings/EditSettingsForm.js",
201 "start": { 201 "start": {
202 "line": 82, 202 "line": 83,
203 "column": 19 203 "column": 19
204 }, 204 },
205 "end": { 205 "end": {
206 "line": 85, 206 "line": 86,
207 "column": 3 207 "column": 3
208 } 208 }
209 }, 209 },
@@ -212,11 +212,11 @@
212 "defaultMessage": "!!!Advanced", 212 "defaultMessage": "!!!Advanced",
213 "file": "src/components/settings/settings/EditSettingsForm.js", 213 "file": "src/components/settings/settings/EditSettingsForm.js",
214 "start": { 214 "start": {
215 "line": 86, 215 "line": 87,
216 "column": 20 216 "column": 20
217 }, 217 },
218 "end": { 218 "end": {
219 "line": 89, 219 "line": 90,
220 "column": 3 220 "column": 3
221 } 221 }
222 }, 222 },
@@ -225,11 +225,11 @@
225 "defaultMessage": "!!!Help us to translate Ferdi into your language.", 225 "defaultMessage": "!!!Help us to translate Ferdi into your language.",
226 "file": "src/components/settings/settings/EditSettingsForm.js", 226 "file": "src/components/settings/settings/EditSettingsForm.js",
227 "start": { 227 "start": {
228 "line": 90, 228 "line": 91,
229 "column": 19 229 "column": 19
230 }, 230 },
231 "end": { 231 "end": {
232 "line": 93, 232 "line": 94,
233 "column": 3 233 "column": 3
234 } 234 }
235 }, 235 },
@@ -238,11 +238,11 @@
238 "defaultMessage": "!!!Ferdi uses your Mac's build-in spellchecker to check for typos. If you want to change the languages the spellchecker checks for, you can do so in your Mac's System Preferences.", 238 "defaultMessage": "!!!Ferdi uses your Mac's build-in spellchecker to check for typos. If you want to change the languages the spellchecker checks for, you can do so in your Mac's System Preferences.",
239 "file": "src/components/settings/settings/EditSettingsForm.js", 239 "file": "src/components/settings/settings/EditSettingsForm.js",
240 "start": { 240 "start": {
241 "line": 94, 241 "line": 95,
242 "column": 28 242 "column": 28
243 }, 243 },
244 "end": { 244 "end": {
245 "line": 97, 245 "line": 98,
246 "column": 3 246 "column": 3
247 } 247 }
248 }, 248 },
@@ -251,11 +251,11 @@
251 "defaultMessage": "!!!Cache", 251 "defaultMessage": "!!!Cache",
252 "file": "src/components/settings/settings/EditSettingsForm.js", 252 "file": "src/components/settings/settings/EditSettingsForm.js",
253 "start": { 253 "start": {
254 "line": 98, 254 "line": 99,
255 "column": 20 255 "column": 20
256 }, 256 },
257 "end": { 257 "end": {
258 "line": 101, 258 "line": 102,
259 "column": 3 259 "column": 3
260 } 260 }
261 }, 261 },
@@ -264,11 +264,11 @@
264 "defaultMessage": "!!!Ferdi cache is currently using {size} of disk space.", 264 "defaultMessage": "!!!Ferdi cache is currently using {size} of disk space.",
265 "file": "src/components/settings/settings/EditSettingsForm.js", 265 "file": "src/components/settings/settings/EditSettingsForm.js",
266 "start": { 266 "start": {
267 "line": 102, 267 "line": 103,
268 "column": 13 268 "column": 13
269 }, 269 },
270 "end": { 270 "end": {
271 "line": 105, 271 "line": 106,
272 "column": 3 272 "column": 3
273 } 273 }
274 }, 274 },
@@ -277,11 +277,11 @@
277 "defaultMessage": "!!!Couldn't clear all cache", 277 "defaultMessage": "!!!Couldn't clear all cache",
278 "file": "src/components/settings/settings/EditSettingsForm.js", 278 "file": "src/components/settings/settings/EditSettingsForm.js",
279 "start": { 279 "start": {
280 "line": 106, 280 "line": 107,
281 "column": 19 281 "column": 19
282 }, 282 },
283 "end": { 283 "end": {
284 "line": 109, 284 "line": 110,
285 "column": 3 285 "column": 3
286 } 286 }
287 }, 287 },
@@ -290,11 +290,11 @@
290 "defaultMessage": "!!!Clear cache", 290 "defaultMessage": "!!!Clear cache",
291 "file": "src/components/settings/settings/EditSettingsForm.js", 291 "file": "src/components/settings/settings/EditSettingsForm.js",
292 "start": { 292 "start": {
293 "line": 110, 293 "line": 111,
294 "column": 23 294 "column": 23
295 }, 295 },
296 "end": { 296 "end": {
297 "line": 113, 297 "line": 114,
298 "column": 3 298 "column": 3
299 } 299 }
300 }, 300 },
@@ -303,11 +303,11 @@
303 "defaultMessage": "!!!Check for updates", 303 "defaultMessage": "!!!Check for updates",
304 "file": "src/components/settings/settings/EditSettingsForm.js", 304 "file": "src/components/settings/settings/EditSettingsForm.js",
305 "start": { 305 "start": {
306 "line": 114, 306 "line": 115,
307 "column": 25 307 "column": 25
308 }, 308 },
309 "end": { 309 "end": {
310 "line": 117, 310 "line": 118,
311 "column": 3 311 "column": 3
312 } 312 }
313 }, 313 },
@@ -316,11 +316,11 @@
316 "defaultMessage": "!!!Restart & install update", 316 "defaultMessage": "!!!Restart & install update",
317 "file": "src/components/settings/settings/EditSettingsForm.js", 317 "file": "src/components/settings/settings/EditSettingsForm.js",
318 "start": { 318 "start": {
319 "line": 118, 319 "line": 119,
320 "column": 23 320 "column": 23
321 }, 321 },
322 "end": { 322 "end": {
323 "line": 121, 323 "line": 122,
324 "column": 3 324 "column": 3
325 } 325 }
326 }, 326 },
@@ -329,11 +329,11 @@
329 "defaultMessage": "!!!Is searching for update", 329 "defaultMessage": "!!!Is searching for update",
330 "file": "src/components/settings/settings/EditSettingsForm.js", 330 "file": "src/components/settings/settings/EditSettingsForm.js",
331 "start": { 331 "start": {
332 "line": 122, 332 "line": 123,
333 "column": 25 333 "column": 25
334 }, 334 },
335 "end": { 335 "end": {
336 "line": 125, 336 "line": 126,
337 "column": 3 337 "column": 3
338 } 338 }
339 }, 339 },
@@ -342,11 +342,11 @@
342 "defaultMessage": "!!!Update available, downloading...", 342 "defaultMessage": "!!!Update available, downloading...",
343 "file": "src/components/settings/settings/EditSettingsForm.js", 343 "file": "src/components/settings/settings/EditSettingsForm.js",
344 "start": { 344 "start": {
345 "line": 126, 345 "line": 127,
346 "column": 25 346 "column": 25
347 }, 347 },
348 "end": { 348 "end": {
349 "line": 129, 349 "line": 130,
350 "column": 3 350 "column": 3
351 } 351 }
352 }, 352 },
@@ -355,11 +355,11 @@
355 "defaultMessage": "!!!You are using the latest version of Ferdi", 355 "defaultMessage": "!!!You are using the latest version of Ferdi",
356 "file": "src/components/settings/settings/EditSettingsForm.js", 356 "file": "src/components/settings/settings/EditSettingsForm.js",
357 "start": { 357 "start": {
358 "line": 130, 358 "line": 131,
359 "column": 24 359 "column": 24
360 }, 360 },
361 "end": { 361 "end": {
362 "line": 133, 362 "line": 134,
363 "column": 3 363 "column": 3
364 } 364 }
365 }, 365 },
@@ -368,11 +368,11 @@
368 "defaultMessage": "!!!Current version:", 368 "defaultMessage": "!!!Current version:",
369 "file": "src/components/settings/settings/EditSettingsForm.js", 369 "file": "src/components/settings/settings/EditSettingsForm.js",
370 "start": { 370 "start": {
371 "line": 134, 371 "line": 135,
372 "column": 18 372 "column": 18
373 }, 373 },
374 "end": { 374 "end": {
375 "line": 137, 375 "line": 138,
376 "column": 3 376 "column": 3
377 } 377 }
378 }, 378 },
@@ -381,11 +381,11 @@
381 "defaultMessage": "!!!Changes require restart", 381 "defaultMessage": "!!!Changes require restart",
382 "file": "src/components/settings/settings/EditSettingsForm.js", 382 "file": "src/components/settings/settings/EditSettingsForm.js",
383 "start": { 383 "start": {
384 "line": 138, 384 "line": 139,
385 "column": 29 385 "column": 29
386 }, 386 },
387 "end": { 387 "end": {
388 "line": 141, 388 "line": 142,
389 "column": 3 389 "column": 3
390 } 390 }
391 }, 391 },
@@ -394,11 +394,11 @@
394 "defaultMessage": "!!!Official translations are English & German. All other languages are community based translations.", 394 "defaultMessage": "!!!Official translations are English & German. All other languages are community based translations.",
395 "file": "src/components/settings/settings/EditSettingsForm.js", 395 "file": "src/components/settings/settings/EditSettingsForm.js",
396 "start": { 396 "start": {
397 "line": 142, 397 "line": 143,
398 "column": 22 398 "column": 22
399 }, 399 },
400 "end": { 400 "end": {
401 "line": 145, 401 "line": 146,
402 "column": 3 402 "column": 3
403 } 403 }
404 } 404 }
diff --git a/src/i18n/messages/src/features/nightlyBuilds/Component.json b/src/i18n/messages/src/features/nightlyBuilds/Component.json
new file mode 100644
index 000000000..6b86ec29f
--- /dev/null
+++ b/src/i18n/messages/src/features/nightlyBuilds/Component.json
@@ -0,0 +1,54 @@
1[
2 {
3 "id": "feature.nightlyBuilds.title",
4 "defaultMessage": "!!!Nightly Builds",
5 "file": "src/features/nightlyBuilds/Component.js",
6 "start": {
7 "line": 14,
8 "column": 9
9 },
10 "end": {
11 "line": 17,
12 "column": 3
13 }
14 },
15 {
16 "id": "feature.nightlyBuilds.info",
17 "defaultMessage": "!!!Nightly builds are highly experimental versions of Ferdi that may contain unpolished or uncompleted features. These nightly builds are mainly used by developers to test their newly developed features and how they will perform in the final build. If you don't know what you are doing, we suggest not activating nightly builds.",
18 "file": "src/features/nightlyBuilds/Component.js",
19 "start": {
20 "line": 18,
21 "column": 8
22 },
23 "end": {
24 "line": 21,
25 "column": 3
26 }
27 },
28 {
29 "id": "feature.nightlyBuilds.activate",
30 "defaultMessage": "!!!Activate",
31 "file": "src/features/nightlyBuilds/Component.js",
32 "start": {
33 "line": 22,
34 "column": 12
35 },
36 "end": {
37 "line": 25,
38 "column": 3
39 }
40 },
41 {
42 "id": "feature.nightlyBuilds.cancel",
43 "defaultMessage": "!!!Cancel",
44 "file": "src/features/nightlyBuilds/Component.js",
45 "start": {
46 "line": 26,
47 "column": 10
48 },
49 "end": {
50 "line": 29,
51 "column": 3
52 }
53 }
54] \ No newline at end of file
diff --git a/src/stores/FeaturesStore.js b/src/stores/FeaturesStore.js
index 8a279bc8a..631d0318e 100644
--- a/src/stores/FeaturesStore.js
+++ b/src/stores/FeaturesStore.js
@@ -14,6 +14,7 @@ import serviceProxy from '../features/serviceProxy';
14import basicAuth from '../features/basicAuth'; 14import basicAuth from '../features/basicAuth';
15import workspaces from '../features/workspaces'; 15import workspaces from '../features/workspaces';
16import quickSwitch from '../features/quickSwitch'; 16import quickSwitch from '../features/quickSwitch';
17import nightlyBuilds from '../features/nightlyBuilds';
17import publishDebugInfo from '../features/publishDebugInfo'; 18import publishDebugInfo from '../features/publishDebugInfo';
18import shareFranz from '../features/shareFranz'; 19import shareFranz from '../features/shareFranz';
19import announcements from '../features/announcements'; 20import announcements from '../features/announcements';
@@ -85,6 +86,7 @@ export default class FeaturesStore extends Store {
85 basicAuth(this.stores, this.actions); 86 basicAuth(this.stores, this.actions);
86 workspaces(this.stores, this.actions); 87 workspaces(this.stores, this.actions);
87 quickSwitch(this.stores, this.actions); 88 quickSwitch(this.stores, this.actions);
89 nightlyBuilds(this.stores, this.actions);
88 publishDebugInfo(this.stores, this.actions); 90 publishDebugInfo(this.stores, this.actions);
89 shareFranz(this.stores, this.actions); 91 shareFranz(this.stores, this.actions);
90 announcements(this.stores, this.actions); 92 announcements(this.stores, this.actions);
diff --git a/src/styles/quick-switch.scss b/src/styles/features.scss
index 356123c4c..d2931f837 100644
--- a/src/styles/quick-switch.scss
+++ b/src/styles/features.scss
@@ -10,4 +10,4 @@
10 .active { 10 .active {
11 background: $theme-brand-primary; 11 background: $theme-brand-primary;
12 } 12 }
13} \ No newline at end of file 13}
diff --git a/src/styles/main.scss b/src/styles/main.scss
index ceec4a95e..c57dc6fcd 100644
--- a/src/styles/main.scss
+++ b/src/styles/main.scss
@@ -30,7 +30,7 @@ $mdi-font-path: '../node_modules/mdi/fonts';
30@import './content-tabs.scss'; 30@import './content-tabs.scss';
31@import './invite.scss'; 31@import './invite.scss';
32@import './title-bar.scss'; 32@import './title-bar.scss';
33@import './quick-switch.scss'; 33@import './features.scss';
34 34
35// form 35// form
36@import './input.scss'; 36@import './input.scss';