@@ -12,37 +12,33 @@ import ImmutableStore from '../lib/immutable-store';
1212import log from '../lib/log' ;
1313import 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
203191store . getConfig = getConfig ;
204192store . persist = persist ;
0 commit comments