Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e84e170

Browse files
committed
fix: fix an issue that cannot display Elenctron app
1 parent c1acf88 commit e84e170

File tree

9 files changed

+314
-159
lines changed

9 files changed

+314
-159
lines changed

src/app/containers/Settings/Workspace/ImportSettings.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class ImportSettings extends PureComponent {
4444
btnStyle="danger"
4545
onClick={() => {
4646
// Persist data locally
47-
store.persist(data);
47+
store.persist(data); // async
4848

4949
// Refresh
5050
window.location.reload();

src/app/containers/Settings/Workspace/RestoreDefaults.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class RestoreDefaults extends PureComponent {
4343
store.state = defaultState;
4444

4545
// Persist data locally
46-
store.persist();
46+
store.persist(); // async
4747

4848
// Refresh
4949
window.location.reload();

src/app/containers/Settings/Workspace/Workspace.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,9 @@ class Workspace extends PureComponent {
9898
this.fileInput.click();
9999
};
100100

101-
handleExport = (event) => {
101+
handleExport = async (event) => {
102102
// https://github.com/mholt/PapaParse/issues/175#issuecomment-201308792
103-
const text = store.getConfig();
103+
const text = await store.getConfig(); // async
104104
const data = new Blob([text], {
105105
type: 'text/plain;charset=utf-8;'
106106
});

src/app/index.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ series([
158158
}
159159

160160
if (settings.error.corruptedWorkspaceSettings) {
161-
const text = store.getConfig();
161+
const text = await store.getConfig(); // async
162162
const url = 'data:text/plain;charset=utf-8,' + encodeURIComponent(text);
163163
const filename = `${settings.name}-${settings.version}.json`;
164164

@@ -193,7 +193,7 @@ series([
193193
store.state = defaultState;
194194

195195
// Persist data locally
196-
store.persist();
196+
store.persist(); // async
197197
},
198198
onClose
199199
)}

src/app/lib/user.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export const signin = ({ token, name, password }) => new Promise((resolve, rejec
1313
config.set('session.name', name);
1414

1515
// Persist data after successful login to prevent debounced update
16-
config.persist();
16+
config.persist(); // async
1717

1818
_authenticated = true;
1919
resolve({ authenticated: true, token: token });

src/app/store/index.js

Lines changed: 34 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -12,37 +12,33 @@ import ImmutableStore from '../lib/immutable-store';
1212
import log from '../lib/log';
1313
import defaultState from './defaultState';
1414

15-
const store = new ImmutableStore(defaultState);
15+
const cnc = {
16+
version: settings.version,
17+
state: {}
18+
};
1619

17-
let userData = null;
20+
const store = new ImmutableStore(defaultState);
1821

19-
// Check whether the code is running in Electron renderer process
20-
if (isElectron()) {
21-
const electron = window.require('electron');
22-
const path = window.require('path'); // Require the path module within Electron
23-
const app = electron.remote.app;
24-
userData = {
25-
path: path.join(app.getPath('userData'), 'cnc.json')
26-
};
27-
}
22+
// Debouncing enforces that a function not be called again until a certain amount of time (e.g. 100ms) has passed without it being called.
23+
store.on('change', debounce(async (state) => {
24+
await persist({ state: state });
25+
}, 100));
2826

29-
const getConfig = () => {
27+
const getConfig = async () => {
3028
let content = '';
3129

3230
// Check whether the code is running in Electron renderer process
3331
if (isElectron()) {
34-
const fs = window.require('fs'); // Require the fs module within Electron
35-
if (fs.existsSync(userData.path)) {
36-
content = fs.readFileSync(userData.path, 'utf8') || '{}';
37-
}
32+
const electron = window.require('electron');
33+
content = await electron.ipcRenderer.invoke('read-user-data');
3834
} else {
3935
content = localStorage.getItem('cnc') || '{}';
4036
}
4137

4238
return content;
4339
};
4440

45-
const persist = (data) => {
41+
const persist = async (data) => {
4642
const { version, state } = { ...data };
4743

4844
data = {
@@ -58,8 +54,8 @@ const persist = (data) => {
5854

5955
// Check whether the code is running in Electron renderer process
6056
if (isElectron()) {
61-
const fs = window.require('fs'); // Use window.require to require fs module in Electron
62-
fs.writeFileSync(userData.path, value);
57+
const electron = window.require('electron');
58+
await electron.ipcRenderer.invoke('write-user-data', value);
6359
} else {
6460
localStorage.setItem('cnc', value);
6561
}
@@ -117,28 +113,6 @@ const normalizeState = (state) => {
117113
return state;
118114
};
119115

120-
const cnc = {
121-
version: settings.version,
122-
state: {}
123-
};
124-
125-
try {
126-
const text = getConfig();
127-
const data = JSON.parse(text);
128-
cnc.version = get(data, 'version', settings.version);
129-
cnc.state = get(data, 'state', {});
130-
} catch (e) {
131-
set(settings, 'error.corruptedWorkspaceSettings', true);
132-
log.error(e);
133-
}
134-
135-
store.state = normalizeState(merge({}, defaultState, cnc.state || {}));
136-
137-
// Debouncing enforces that a function not be called again until a certain amount of time (e.g. 100ms) has passed without it being called.
138-
store.on('change', debounce((state) => {
139-
persist({ state: state });
140-
}, 100));
141-
142116
//
143117
// Migration
144118
//
@@ -194,11 +168,25 @@ const migrateStore = () => {
194168
}
195169
};
196170

197-
try {
198-
migrateStore();
199-
} catch (err) {
200-
log.error(err);
201-
}
171+
(async () => {
172+
try {
173+
const text = await getConfig();
174+
const data = JSON.parse(text);
175+
cnc.version = get(data, 'version', settings.version);
176+
cnc.state = get(data, 'state', {});
177+
} catch (e) {
178+
set(settings, 'error.corruptedWorkspaceSettings', true);
179+
log.error(e);
180+
}
181+
182+
store.state = normalizeState(merge({}, defaultState, cnc.state || {}));
183+
184+
try {
185+
migrateStore();
186+
} catch (err) {
187+
log.error(err);
188+
}
189+
})();
202190

203191
store.getConfig = getConfig;
204192
store.persist = persist;

0 commit comments

Comments
 (0)