diff options
Diffstat (limited to 'src/models/Service.js')
-rw-r--r-- | src/models/Service.js | 76 |
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'; | |||
8 | import { isValidExternalURL } from '../helpers/url-helpers'; | 8 | import { isValidExternalURL } from '../helpers/url-helpers'; |
9 | import UserAgent from './UserAgent'; | 9 | import UserAgent from './UserAgent'; |
10 | import { DEFAULT_SERVICE_ORDER } from '../config'; | 10 | import { DEFAULT_SERVICE_ORDER } from '../config'; |
11 | import { ifUndefinedString, ifUndefinedBoolean, ifUndefinedNumber } from '../jsUtils'; | ||
11 | 12 | ||
12 | const debug = require('debug')('Ferdi:Service'); | 13 | const 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} })();`))); |