aboutsummaryrefslogtreecommitdiffstats
path: root/src/models/Service.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/models/Service.js')
-rw-r--r--src/models/Service.js76
1 files changed, 36 insertions, 40 deletions
diff --git a/src/models/Service.js b/src/models/Service.js
index 4b78b9a40..4ee054b2b 100644
--- a/src/models/Service.js
+++ b/src/models/Service.js
@@ -8,6 +8,7 @@ import { todosStore } from '../features/todos';
8import { isValidExternalURL } from '../helpers/url-helpers'; 8import { isValidExternalURL } from '../helpers/url-helpers';
9import UserAgent from './UserAgent'; 9import UserAgent from './UserAgent';
10import { DEFAULT_SERVICE_ORDER } from '../config'; 10import { DEFAULT_SERVICE_ORDER } from '../config';
11import { ifUndefinedString, ifUndefinedBoolean, ifUndefinedNumber } from '../jsUtils';
11 12
12const debug = require('debug')('Ferdi:Service'); 13const debug = require('debug')('Ferdi:Service');
13 14
@@ -101,47 +102,30 @@ export default class Service {
101 throw Error('Service recipe not valid'); 102 throw Error('Service recipe not valid');
102 } 103 }
103 104
104 this.userAgentModel = new UserAgent(recipe.overrideUserAgent); 105 this.recipe = recipe;
105
106 this.id = data.id || this.id;
107 this.name = data.name || this.name;
108 this.team = data.team || this.team;
109 this.customUrl = data.customUrl || this.customUrl;
110 // this.customIconUrl = data.customIconUrl || this.customIconUrl;
111 this.iconUrl = data.iconUrl || this.iconUrl;
112
113 this.order = data.order !== undefined
114 ? data.order : this.order;
115
116 this.isEnabled = data.isEnabled !== undefined
117 ? data.isEnabled : this.isEnabled;
118
119 this.isNotificationEnabled = data.isNotificationEnabled !== undefined
120 ? data.isNotificationEnabled : this.isNotificationEnabled;
121
122 this.isBadgeEnabled = data.isBadgeEnabled !== undefined
123 ? data.isBadgeEnabled : this.isBadgeEnabled;
124
125 this.isIndirectMessageBadgeEnabled = data.isIndirectMessageBadgeEnabled !== undefined
126 ? data.isIndirectMessageBadgeEnabled : this.isIndirectMessageBadgeEnabled;
127
128 this.isMuted = data.isMuted !== undefined ? data.isMuted : this.isMuted;
129
130 this.isDarkModeEnabled = data.isDarkModeEnabled !== undefined ? data.isDarkModeEnabled : this.isDarkModeEnabled;
131
132 this.darkReaderSettings = data.darkReaderSettings !== undefined ? data.darkReaderSettings : this.darkReaderSettings;
133
134 this.hasCustomUploadedIcon = data.hasCustomIcon !== undefined ? data.hasCustomIcon : this.hasCustomUploadedIcon;
135
136 this.proxy = data.proxy !== undefined ? data.proxy : this.proxy;
137
138 this.spellcheckerLanguage = data.spellcheckerLanguage !== undefined ? data.spellcheckerLanguage : this.spellcheckerLanguage;
139
140 this.userAgentPref = data.userAgentPref !== undefined ? data.userAgentPref : this.userAgentPref;
141 106
142 this.isHibernationEnabled = data.isHibernationEnabled !== undefined ? data.isHibernationEnabled : this.isHibernationEnabled; 107 this.userAgentModel = new UserAgent(recipe.overrideUserAgent);
143 108
144 this.recipe = recipe; 109 this.id = ifUndefinedString(data.id, this.id);
110 this.name = ifUndefinedString(data.name, this.name);
111 this.team = ifUndefinedString(data.team, this.team);
112 this.customUrl = ifUndefinedString(data.customUrl, this.customUrl);
113 // this.customIconUrl = ifUndefinedString(data.customIconUrl, this.customIconUrl);
114 this.iconUrl = ifUndefinedString(data.iconUrl, this.iconUrl);
115
116 this.order = ifUndefinedNumber(data.order, this.order);
117 this.isEnabled = ifUndefinedBoolean(data.isEnabled, this.isEnabled);
118 this.isNotificationEnabled = ifUndefinedBoolean(data.isNotificationEnabled, this.isNotificationEnabled);
119 this.isBadgeEnabled = ifUndefinedBoolean(data.isBadgeEnabled, this.isBadgeEnabled);
120 this.isIndirectMessageBadgeEnabled = ifUndefinedBoolean(data.isIndirectMessageBadgeEnabled, this.isIndirectMessageBadgeEnabled);
121 this.isMuted = ifUndefinedBoolean(data.isMuted, this.isMuted);
122 this.isDarkModeEnabled = ifUndefinedBoolean(data.isDarkModeEnabled, this.isDarkModeEnabled);
123 this.darkReaderSettings = ifUndefinedString(data.darkReaderSettings, this.darkReaderSettings);
124 this.hasCustomUploadedIcon = ifUndefinedBoolean(data.hasCustomIcon, this.hasCustomUploadedIcon);
125 this.proxy = ifUndefinedString(data.proxy, this.proxy);
126 this.spellcheckerLanguage = ifUndefinedString(data.spellcheckerLanguage, this.spellcheckerLanguage);
127 this.userAgentPref = ifUndefinedString(data.userAgentPref, this.userAgentPref);
128 this.isHibernationEnabled = ifUndefinedBoolean(data.isHibernationEnabled, this.isHibernationEnabled);
145 129
146 // Check if "Hibernate on Startup" is enabled and hibernate all services except active one 130 // Check if "Hibernate on Startup" is enabled and hibernate all services except active one
147 const { hibernateOnStartup } = window.ferdi.stores.settings.app; 131 const { hibernateOnStartup } = window.ferdi.stores.settings.app;
@@ -261,7 +245,7 @@ export default class Service {
261 245
262 this.userAgentModel.setWebviewReference(this.webview); 246 this.userAgentModel.setWebviewReference(this.webview);
263 247
264 // If the recipe has implemented modifyRequestHeaders, 248 // If the recipe has implemented 'modifyRequestHeaders',
265 // Send those headers to ipcMain so that it can be set in session 249 // Send those headers to ipcMain so that it can be set in session
266 if (typeof this.recipe.modifyRequestHeaders === 'function') { 250 if (typeof this.recipe.modifyRequestHeaders === 'function') {
267 const modifiedRequestHeaders = this.recipe.modifyRequestHeaders(); 251 const modifiedRequestHeaders = this.recipe.modifyRequestHeaders();
@@ -274,6 +258,18 @@ export default class Service {
274 debug(this.name, 'modifyRequestHeaders is not defined in the recipe'); 258 debug(this.name, 'modifyRequestHeaders is not defined in the recipe');
275 } 259 }
276 260
261 // if the recipe has implemented 'knownCertificateHosts'
262 if (typeof this.recipe.knownCertificateHosts === 'function') {
263 const knownHosts = this.recipe.knownCertificateHosts();
264 debug(this.name, 'knownCertificateHosts', knownHosts);
265 ipcRenderer.send('knownCertificateHosts', {
266 knownHosts,
267 serviceId: this.id,
268 });
269 } else {
270 debug(this.name, 'knownCertificateHosts is not defined in the recipe');
271 }
272
277 this.webview.addEventListener('ipc-message', async (e) => { 273 this.webview.addEventListener('ipc-message', async (e) => {
278 if (e.channel === 'inject-js-unsafe') { 274 if (e.channel === 'inject-js-unsafe') {
279 await Promise.all(e.args.map((script) => this.webview.executeJavaScript(`"use strict"; (() => { ${script} })();`))); 275 await Promise.all(e.args.map((script) => this.webview.executeJavaScript(`"use strict"; (() => { ${script} })();`)));