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.js51
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';
2import path from 'path'; 2import path from 'path';
3import normalizeUrl from 'normalize-url'; 3import normalizeUrl from 'normalize-url';
4 4
5const debug = require('debug')('Franz:Service');
6
5export default class Service { 7export 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 }