diff options
Diffstat (limited to 'src/models/Service.js')
-rw-r--r-- | src/models/Service.js | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/models/Service.js b/src/models/Service.js index 41180dd76..4cc6102ff 100644 --- a/src/models/Service.js +++ b/src/models/Service.js | |||
@@ -2,11 +2,17 @@ import { computed, observable, autorun } from 'mobx'; | |||
2 | import path from 'path'; | 2 | import path from 'path'; |
3 | import normalizeUrl from 'normalize-url'; | 3 | import normalizeUrl from 'normalize-url'; |
4 | 4 | ||
5 | const debug = require('debug')('Franz:Service'); | ||
6 | |||
5 | export default class Service { | 7 | export default class Service { |
6 | id = ''; | 8 | id = ''; |
9 | |||
7 | recipe = ''; | 10 | recipe = ''; |
11 | |||
8 | webview = null; | 12 | webview = null; |
13 | |||
9 | timer = null; | 14 | timer = null; |
15 | |||
10 | events = {}; | 16 | events = {}; |
11 | 17 | ||
12 | isAttached = false; | 18 | isAttached = false; |
@@ -14,22 +20,45 @@ export default class Service { | |||
14 | @observable isActive = false; // Is current webview active | 20 | @observable isActive = false; // Is current webview active |
15 | 21 | ||
16 | @observable name = ''; | 22 | @observable name = ''; |
23 | |||
17 | @observable unreadDirectMessageCount = 0; | 24 | @observable unreadDirectMessageCount = 0; |
25 | |||
18 | @observable unreadIndirectMessageCount = 0; | 26 | @observable unreadIndirectMessageCount = 0; |
19 | 27 | ||
20 | @observable order = 99; | 28 | @observable order = 99; |
29 | |||
21 | @observable isEnabled = true; | 30 | @observable isEnabled = true; |
31 | |||
22 | @observable isMuted = false; | 32 | @observable isMuted = false; |
33 | |||
23 | @observable team = ''; | 34 | @observable team = ''; |
35 | |||
24 | @observable customUrl = ''; | 36 | @observable customUrl = ''; |
37 | |||
25 | @observable isNotificationEnabled = true; | 38 | @observable isNotificationEnabled = true; |
39 | |||
26 | @observable isBadgeEnabled = true; | 40 | @observable isBadgeEnabled = true; |
41 | |||
27 | @observable isIndirectMessageBadgeEnabled = true; | 42 | @observable isIndirectMessageBadgeEnabled = true; |
43 | |||
28 | @observable iconUrl = ''; | 44 | @observable iconUrl = ''; |
45 | |||
29 | @observable hasCustomUploadedIcon = false; | 46 | @observable hasCustomUploadedIcon = false; |
47 | |||
30 | @observable hasCrashed = false; | 48 | @observable hasCrashed = false; |
49 | |||
31 | @observable isDarkModeEnabled = false; | 50 | @observable isDarkModeEnabled = false; |
32 | 51 | ||
52 | @observable spellcheckerLanguage = null; | ||
53 | |||
54 | @observable isFirstLoad = true; | ||
55 | |||
56 | @observable isLoading = true; | ||
57 | |||
58 | @observable isError = false; | ||
59 | |||
60 | @observable errorMessage = ''; | ||
61 | |||
33 | constructor(data, recipe) { | 62 | constructor(data, recipe) { |
34 | if (!data) { | 63 | if (!data) { |
35 | console.error('Service config not valid'); | 64 | console.error('Service config not valid'); |
@@ -71,6 +100,8 @@ export default class Service { | |||
71 | 100 | ||
72 | this.proxy = data.proxy !== undefined ? data.proxy : this.proxy; | 101 | this.proxy = data.proxy !== undefined ? data.proxy : this.proxy; |
73 | 102 | ||
103 | this.spellcheckerLanguage = data.spellcheckerLanguage !== undefined ? data.spellcheckerLanguage : this.spellcheckerLanguage; | ||
104 | |||
74 | this.recipe = recipe; | 105 | this.recipe = recipe; |
75 | 106 | ||
76 | autorun(() => { | 107 | autorun(() => { |
@@ -147,9 +178,29 @@ export default class Service { | |||
147 | 178 | ||
148 | this.webview.addEventListener('did-start-loading', () => { | 179 | this.webview.addEventListener('did-start-loading', () => { |
149 | this.hasCrashed = false; | 180 | this.hasCrashed = false; |
181 | this.isLoading = true; | ||
182 | this.isError = false; | ||
183 | }); | ||
184 | |||
185 | this.webview.addEventListener('did-frame-finish-load', () => { | ||
186 | this.isLoading = false; | ||
187 | |||
188 | if (!this.isError) { | ||
189 | this.isFirstLoad = false; | ||
190 | } | ||
191 | }); | ||
192 | |||
193 | this.webview.addEventListener('did-fail-load', (event) => { | ||
194 | debug('Service failed to load', this.name, event); | ||
195 | if (event.isMainFrame) { | ||
196 | this.isError = true; | ||
197 | this.errorMessage = event.errorDescription; | ||
198 | this.isLoading = false; | ||
199 | } | ||
150 | }); | 200 | }); |
151 | 201 | ||
152 | this.webview.addEventListener('crashed', () => { | 202 | this.webview.addEventListener('crashed', () => { |
203 | debug('Service crashed', this.name); | ||
153 | this.hasCrashed = true; | 204 | this.hasCrashed = true; |
154 | }); | 205 | }); |
155 | } | 206 | } |