1
- //node requirements
2
- const { dialog, app, BrowserWindow, ipcMain } = require ( 'electron' ) ;
1
+ // node requirements
2
+ const {
3
+ dialog, app, BrowserWindow, ipcMain,
4
+ } = require ( 'electron' ) ;
3
5
const fs = require ( 'fs' ) ;
4
6
const path = require ( 'path' ) ;
5
7
const connectSQL = require ( './model/sql-connect' ) ;
6
8
const connectMongoose = require ( './model/mongoose-connect' ) ;
7
9
const CommunicationSchema = require ( './model/mongoose-communicatonSchema' ) ;
8
10
const HealthInfoSchema = require ( './model/mongoose-healthInfoSchema' ) ;
9
11
10
- //declare a variable pool for SQL connection
12
+ // declare a variable pool for SQL connection
11
13
let pool ;
12
14
13
- //declare win variable ---> Ousman
15
+ // declare win variable ---> Ousman
14
16
let win ;
15
17
16
- //declaring a createWindow function ---> Ousman
18
+ // declaring a createWindow function ---> Ousman
17
19
function createWindow ( ) {
18
- //assign win to an instance of a new browser window.
20
+ // assign win to an instance of a new browser window.
19
21
win = new BrowserWindow ( {
20
- //giving our window its width
22
+ // giving our window its width
21
23
width : 900 ,
22
- //giving our window its hieght
24
+ // giving our window its hieght
23
25
height : 800 ,
24
- //specify the path of the icon -- Which icon is this?.. note too tsure --> Ousman
26
+ // specify the path of the icon -- Which icon is this?.. note too tsure --> Ousman
25
27
icon : path . join ( __dirname , 'app/assets/icons/icon.png' ) ,
26
- //enable node inegreation --> node intgeration, default is usally false --> Ousman
28
+ // enable node inegreation --> node intgeration, default is usally false --> Ousman
27
29
webPreferences : {
28
30
nodeIntegration : true ,
29
31
} ,
30
32
} ) ;
31
33
32
34
// Development
33
- //loads our application window to localHost 8080, application will not render without this loadUrl --> Ousman
35
+ // loads our application window to localHost 8080, application will not render without this loadUrl --> Ousman
34
36
win . loadURL ( 'http://localhost:8080/' ) ;
35
37
36
38
// Production
37
39
// win.loadURL(`file://${path.join(__dirname, './dist/index.html')}`);
38
-
39
- //assign window to null on close
40
+
41
+ // assign window to null on close and set splash property in settings.json back to true so splash page renders on restart
40
42
win . on ( 'closed' , ( ) => {
41
- win = null ;
43
+ const state = JSON . parse (
44
+ // read json from settings.json
45
+ fs . readFileSync ( path . resolve ( __dirname , './user/settings.json' ) , {
46
+ encoding : 'UTF-8' ,
47
+ } ) ,
48
+ ) ;
49
+ // reassign state.splash
50
+ state . splash = true ;
51
+ fs . writeFileSync ( path . resolve ( __dirname , './user/settings.json' ) , JSON . stringify ( state ) , { encoding : 'UTF-8' } ) ; win = null ;
42
52
} ) ;
43
53
}
44
54
45
- //invoke createWindow function on Electron application load --> Ousman
55
+ // invoke createWindow function on Electron application load --> Ousman
46
56
app . on ( 'ready' , createWindow ) ;
47
57
48
58
// quits the application when all windows are closed --> Ousman
49
59
app . on ( 'window-all-closed' , ( ) => {
50
- //process platform is a property that return a string identifying the OS platform on which NodeJs process is running --> Ousman
60
+ console . log ( 'window-all-closed message received' ) ;
61
+ const state = JSON . parse (
62
+ // read json from settings.json
63
+ fs . readFileSync ( path . resolve ( __dirname , './user/settings.json' ) , {
64
+ encoding : 'UTF-8' ,
65
+ } ) ,
66
+ ) ;
67
+ // reassign state.splash
68
+ state . splash = true ;
69
+ fs . writeFileSync ( path . resolve ( __dirname , './user/settings.json' ) , JSON . stringify ( state ) , { encoding : 'UTF-8' } ) ;
70
+ // process platform is a property that return a string identifying the OS platform on which NodeJs process is running --> Ousman
51
71
if ( process . platform !== 'darwin' ) {
52
- //quits application
72
+ // quits application
53
73
app . quit ( ) ;
54
74
}
55
75
} ) ;
56
76
57
- //event 'activate' emmitted upon application starting
77
+ // event 'activate' emmitted upon application starting
58
78
app . on ( 'activate' , ( ) => {
59
- //if there is no window present invoke the create window function --> Ousman
79
+ // if there is no window present invoke the create window function --> Ousman
60
80
if ( win === null ) {
61
81
createWindow ( ) ;
62
82
}
63
83
} ) ;
64
84
85
+ // Fired by the useEffect hook inside of the Splash.jsx component, this message route will toggle
86
+ // splash property inside of settings.json to false once the Splash page renders itself just once
87
+ ipcMain . on ( 'toggleSplash' , ( message ) => {
88
+ console . log ( 'toggleSplash message received' ) ;
89
+ const state = JSON . parse (
90
+ // read json from settings.json
91
+ fs . readFileSync ( path . resolve ( __dirname , './user/settings.json' ) , {
92
+ encoding : 'UTF-8' ,
93
+ } ) ,
94
+ ) ;
95
+ // reassign state.splash to false
96
+ state . splash = false ;
97
+
98
+ // overwrite settings.json with false splash property
99
+ fs . writeFileSync ( path . resolve ( __dirname , './user/settings.json' ) , JSON . stringify ( state ) , { encoding : 'UTF-8' } ) ;
100
+
101
+ message . returnValue = state . splash ;
102
+ } ) ;
103
+
104
+ ipcMain . on ( 'checkSplash' , ( message ) => {
105
+ console . log ( 'checkSplash message received' ) ;
106
+ const state = JSON . parse (
107
+ // read json from settings.json
108
+ fs . readFileSync ( path . resolve ( __dirname , './user/settings.json' ) , {
109
+ encoding : 'UTF-8' ,
110
+ } ) ,
111
+ ) ;
112
+
113
+ message . returnValue = state . splash ;
114
+ } ) ;
115
+
65
116
// Load settings JSON and returns current setup status back to the render process.
66
- //ipc 'setup' route --> Ousman
117
+ // ipc 'setup' route --> Ousman
67
118
ipcMain . on ( 'setup' , ( message ) => {
68
- //assigns state to the returned the object returned from settings.json --> Ousman
119
+ console . log ( 'setup message received' ) ;
120
+ // assigns state to the returned the object returned from settings.json --> Ousman
69
121
const state = JSON . parse (
70
- //read json from settings.json
122
+ // read json from settings.json
71
123
fs . readFileSync ( path . resolve ( __dirname , './user/settings.json' ) , {
72
124
encoding : 'UTF-8' ,
73
125
} ) ,
74
126
) ;
75
- //destructure setupRequired from state constant ---> Ousman
76
- const { setupRequired } = state ;
77
- //assigning message object a property of return value and assigning it the setupRequired from state destructuring --> Ousman
127
+ // destructure setupRequired from state constant ---> Ousman
128
+ const { setupRequired } = state ;
129
+ // assigning message object a property of return value and assigning it the setupRequired from state destructuring --> Ousman
78
130
message . returnValue = setupRequired ;
79
131
} ) ;
80
132
81
133
// Loads existing settings JSON and update settings to include new services entered by the user.
82
- //on ipc 'submit' request --> Ousman
134
+ // on ipc 'submit' request --> Ousman
83
135
ipcMain . on ( 'submit' , ( message , newService ) => {
84
- //assigning state to the parsed return of setting
136
+ // assigning state to the parsed return of setting
85
137
const state = JSON . parse (
86
138
fs . readFileSync ( path . resolve ( __dirname , './user/settings.json' ) , {
87
139
encoding : 'UTF-8' ,
88
140
} ) ,
89
141
) ;
90
142
// if statement is used to replace hard coded data. Hard coded data and the michelleWasHere key is needed to avoid a load error caused by Electron querying the database before a user has added or selected a database.
91
143
92
- //*** What is happening here --> Ousman */
144
+ //* ** What is happening here --> Ousman */
93
145
if ( state . setupRequired ) {
94
146
state . setupRequired = false ;
95
147
state . services = [ JSON . parse ( newService ) ] ;
@@ -102,15 +154,15 @@ ipcMain.on('submit', (message, newService) => {
102
154
} ) ;
103
155
104
156
// Load settings JSON and returns updated state back to the render process.
105
- //on ipc 'dashboard' request --> Ousman
157
+ // on ipc 'dashboard' request --> Ousman
106
158
ipcMain . on ( 'dashboard' , ( message ) => {
107
- //assign state to the parsed return of setting --> Ousman
159
+ // assign state to the parsed return of setting --> Ousman
108
160
const state = JSON . parse (
109
161
fs . readFileSync ( path . resolve ( __dirname , './user/settings.json' ) , {
110
162
encoding : 'UTF-8' ,
111
163
} ) ,
112
164
) ;
113
- //destructure services from state... what is services? --> Ousman
165
+ // destructure services from state... what is services? --> Ousman
114
166
const { services } = state ;
115
167
const dashboardList = services . reduce ( ( acc , curVal ) => {
116
168
acc . push ( curVal [ 0 ] ) ;
@@ -119,35 +171,35 @@ ipcMain.on('dashboard', (message) => {
119
171
message . returnValue = dashboardList ;
120
172
} ) ;
121
173
122
- //ipc 'deleteService' route
174
+ // ipc 'deleteService' route
123
175
ipcMain . on ( 'deleteService' , ( message , index ) => {
124
- //assigns state to the returned the object returned from settings.json
125
- let state = JSON . parse (
126
- // read json from settings.json
127
- fs . readFileSync ( path . resolve ( __dirname , './user/settings.json' ) , {
128
- encoding : 'UTF-8' ,
129
- } ) ,
130
- ) ;
131
- // updating the services
132
- if ( state . services . length > 1 ) {
133
- state . services . splice ( index , 1 ) ;
134
- } else {
135
- state = { "setupRequired" : true , "services" : [ "hard" , "coded" , "in" ] }
136
- }
137
-
138
- //write json from settings.json
139
- fs . writeFileSync ( path . resolve ( __dirname , './user/ settings.json' ) , JSON . stringify ( state ) , {
140
- encoding : 'UTF-8' } )
141
- message . sender . send ( 'deleteResponse' , state . services ) ;
142
- } ) ;
176
+ // assigns state to the returned the object returned from settings.json
177
+ let state = JSON . parse (
178
+ // read json from settings.json
179
+ fs . readFileSync ( path . resolve ( __dirname , './user/settings.json' ) , {
180
+ encoding : 'UTF-8' ,
181
+ } ) ,
182
+ ) ;
183
+ const { splash } = state ;
184
+ // updating the services
185
+ if ( state . services . length > 1 ) {
186
+ state . services . splice ( index , 1 ) ;
187
+ } else {
188
+ state = { setupRequired : true , services : [ 'hard' , 'coded' , 'in' ] , splash } ;
189
+ }
190
+
191
+ // write json from settings.json
192
+ fs . writeFileSync ( path . resolve ( __dirname , './user/settings.json' ) , JSON . stringify ( state ) , { encoding : 'UTF-8' } ) ;
193
+ message . sender . send ( 'deleteResponse' , state . services ) ;
194
+ } ) ;
143
195
144
196
145
197
// Queries the database for communications information and returns it back to the render process.
146
198
ipcMain . on ( 'overviewRequest' , ( message , index ) => {
147
- const services = JSON . parse (
199
+ const { services } = JSON . parse (
148
200
fs . readFileSync ( path . resolve ( __dirname , './user/settings.json' ) , { encoding : 'UTF-8' } ) ,
149
- ) . services ;
150
-
201
+ ) ;
202
+
151
203
const databaseType = services [ index ] [ 1 ] ;
152
204
const URI = services [ index ] [ 2 ] ;
153
205
@@ -157,36 +209,33 @@ ipcMain.on('overviewRequest', (message, index) => {
157
209
if ( err ) {
158
210
console . log ( `An error occured while querying the database: ${ err } ` ) ;
159
211
message . sender . send ( 'overviewResponse' , JSON . stringify ( err ) ) ;
160
- }
161
-
162
- const queryResults = JSON . stringify ( data ) ;
163
- // Asynchronous event emitter used to transmit query results back to the render process.
164
- message . sender . send ( 'overviewResponse' , queryResults ) ;
165
-
212
+ }
213
+
214
+ const queryResults = JSON . stringify ( data ) ;
215
+ // Asynchronous event emitter used to transmit query results back to the render process.
216
+ message . sender . send ( 'overviewResponse' , queryResults ) ;
166
217
} ) ;
167
218
}
168
-
219
+
169
220
if ( databaseType === 'SQL' ) {
170
221
pool = connectSQL ( index , URI ) ;
171
222
const getCommunications = 'SELECT * FROM communications' ;
172
223
pool . query ( getCommunications , ( err , result ) => {
173
224
if ( err ) {
225
+ // error object to log to Electron GUI ---> Ousman
226
+ const errorAlert = {
227
+ type : 'error' ,
228
+ title : 'Error in Main process' ,
229
+ message : 'Database information could not be retreived. Check that table exists.' ,
230
+ } ;
174
231
175
- //error object to log to Electron GUI ---> Ousman
176
- const errorAlert = {
177
- type : "error" ,
178
- title : "Error in Main process" ,
179
- message : "Database information could not be retreived. Check that table exists."
180
- } ;
181
-
182
- //after requiring dialog in the topmost section of main. We invoke the method showMessagebox passing the error object we created --> Ousman
183
- dialog . showMessageBox ( errorAlert ) ;
184
-
232
+ // after requiring dialog in the topmost section of main. We invoke the method showMessagebox passing the error object we created --> Ousman
233
+ dialog . showMessageBox ( errorAlert ) ;
185
234
186
- message . sender . send ( JSON . stringify ( 'Database info could not be retreived.' ) ) ;
187
235
236
+ message . sender . send ( JSON . stringify ( 'Database info could not be retreived.' ) ) ;
188
237
} else {
189
- console . log ( 'Connected to SQL Database' )
238
+ console . log ( 'Connected to SQL Database' ) ;
190
239
const queryResults = JSON . stringify ( result . rows ) ;
191
240
// Asynchronous event emitter used to transmit query results back to the render process.
192
241
message . sender . send ( 'overviewResponse' , queryResults ) ;
0 commit comments