1- //node requirements
2- const { dialog, app, BrowserWindow, ipcMain } = require ( 'electron' ) ;
1+ // node requirements
2+ const {
3+ dialog, app, BrowserWindow, ipcMain,
4+ } = require ( 'electron' ) ;
35const fs = require ( 'fs' ) ;
46const path = require ( 'path' ) ;
57const connectSQL = require ( './model/sql-connect' ) ;
68const connectMongoose = require ( './model/mongoose-connect' ) ;
79const CommunicationSchema = require ( './model/mongoose-communicatonSchema' ) ;
810const HealthInfoSchema = require ( './model/mongoose-healthInfoSchema' ) ;
911
10- //declare a variable pool for SQL connection
12+ // declare a variable pool for SQL connection
1113let pool ;
1214
13- //declare win variable ---> Ousman
15+ // declare win variable ---> Ousman
1416let win ;
1517
16- //declaring a createWindow function ---> Ousman
18+ // declaring a createWindow function ---> Ousman
1719function createWindow ( ) {
18- //assign win to an instance of a new browser window.
20+ // assign win to an instance of a new browser window.
1921 win = new BrowserWindow ( {
20- //giving our window its width
22+ // giving our window its width
2123 width : 900 ,
22- //giving our window its hieght
24+ // giving our window its hieght
2325 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
2527 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
2729 webPreferences : {
2830 nodeIntegration : true ,
2931 } ,
3032 } ) ;
3133
3234 // 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
3436 win . loadURL ( 'http://localhost:8080/' ) ;
3537
3638 // Production
3739 // 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
4042 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 ;
4252 } ) ;
4353}
4454
45- //invoke createWindow function on Electron application load --> Ousman
55+ // invoke createWindow function on Electron application load --> Ousman
4656app . on ( 'ready' , createWindow ) ;
4757
4858// quits the application when all windows are closed --> Ousman
4959app . 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
5171 if ( process . platform !== 'darwin' ) {
52- //quits application
72+ // quits application
5373 app . quit ( ) ;
5474 }
5575} ) ;
5676
57- //event 'activate' emmitted upon application starting
77+ // event 'activate' emmitted upon application starting
5878app . 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
6080 if ( win === null ) {
6181 createWindow ( ) ;
6282 }
6383} ) ;
6484
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+ //sconsole.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+
65116// Load settings JSON and returns current setup status back to the render process.
66- //ipc 'setup' route --> Ousman
117+ // ipc 'setup' route --> Ousman
67118ipcMain . 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
69121 const state = JSON . parse (
70- //read json from settings.json
122+ // read json from settings.json
71123 fs . readFileSync ( path . resolve ( __dirname , './user/settings.json' ) , {
72124 encoding : 'UTF-8' ,
73125 } ) ,
74126 ) ;
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
78130 message . returnValue = setupRequired ;
79131} ) ;
80132
81133// 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
83135ipcMain . on ( 'submit' , ( message , newService ) => {
84- //assigning state to the parsed return of setting
136+ // Declares a variable state and initialize it to the returned parsed json object from the user/settings.json file
85137 const state = JSON . parse (
86138 fs . readFileSync ( path . resolve ( __dirname , './user/settings.json' ) , {
87139 encoding : 'UTF-8' ,
88140 } ) ,
89141 ) ;
90- // 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.
91142
92- //*** What is happening here --> Ousman */
143+ // Checks if setup is required by checking if the value for the state key 'setupRequired' is true
93144 if ( state . setupRequired ) {
145+ // If setup is required, the value for key 'setupRequired' is reassign to false and the value for key 'services' is reassign to an array with newService as its only element
94146 state . setupRequired = false ;
95147 state . services = [ JSON . parse ( newService ) ] ;
96- fs . writeFileSync ( path . resolve ( __dirname , './user/settings.json' ) , JSON . stringify ( state ) ) ;
97148 } else {
98- state . setupRequired = false ;
149+ // Else the newService is pushed into the services array
99150 state . services . push ( JSON . parse ( newService ) ) ;
100- fs . writeFileSync ( path . resolve ( __dirname , './user/settings.json' ) , JSON . stringify ( state ) ) ;
101- }
151+ }
152+
153+ // Rewrites user/settings.json to show state
154+ fs . writeFileSync ( path . resolve ( __dirname , './user/settings.json' ) , JSON . stringify ( state ) ) ;
102155} ) ;
103156
104157// Load settings JSON and returns updated state back to the render process.
105- //on ipc 'dashboard' request --> Ousman
158+ // on ipc 'dashboard' request --> Ousman
106159ipcMain . on ( 'dashboard' , ( message ) => {
107- //assign state to the parsed return of setting --> Ousman
160+ // Declares a variable state and initialize it to the returned parse json object from the user/settings.json file
108161 const state = JSON . parse (
109162 fs . readFileSync ( path . resolve ( __dirname , './user/settings.json' ) , {
110163 encoding : 'UTF-8' ,
111164 } ) ,
112165 ) ;
113- //destructure services from state... what is services? --> Ousman
166+ // destructure services from state... what is services? --> Ousman
114167 const { services } = state ;
115168 const dashboardList = services . reduce ( ( acc , curVal ) => {
116169 acc . push ( curVal [ 0 ] ) ;
@@ -119,12 +172,41 @@ ipcMain.on('dashboard', (message) => {
119172 message . returnValue = dashboardList ;
120173} ) ;
121174
175+ // Deletes the service at position 'index' from the services array within the user/setting.json file,
176+ // resets the user/setting.json file to what it was originally if all of the services are deleted,
177+ // and sends the remaining services back to onDelete function within DeleteService as a response
178+ ipcMain . on ( 'deleteService' , ( message , index ) => {
179+ // Declares a variable state and initialize it to the returned parse json object from the user/settings.json file
180+ let state = JSON . parse (
181+ fs . readFileSync ( path . resolve ( __dirname , './user/settings.json' ) , {
182+ encoding : 'UTF-8' ,
183+ } ) ,
184+ ) ;
185+
186+ // Send a response back with the updated services
187+ const { splash } = state ;
188+ // Checks if there is more than one services in the services array
189+ if ( state . services . length > 1 ) {
190+ // If true, removes the service at position 'index'
191+ state . services . splice ( index , 1 ) ;
192+ } else {
193+ // Else reassign state to what the user/setting.json file was originally before any database was save
194+ state = { setupRequired : true , services : [ 'hard' , 'coded' , 'in' ] , splash } ;
195+ }
196+
197+ // Rewrites json from settings.json
198+ fs . writeFileSync ( path . resolve ( __dirname , './user/settings.json' ) , JSON . stringify ( state ) , { encoding : 'UTF-8' } ) ;
199+ message . sender . send ( 'deleteResponse' , state . services ) ;
200+ } ) ;
201+
202+
122203// Queries the database for communications information and returns it back to the render process.
123204ipcMain . on ( 'overviewRequest' , ( message , index ) => {
124- const services = JSON . parse (
205+ console . log ( 'hello from overview request' ) ;
206+ const { services } = JSON . parse (
125207 fs . readFileSync ( path . resolve ( __dirname , './user/settings.json' ) , { encoding : 'UTF-8' } ) ,
126- ) . services ;
127-
208+ ) ;
209+
128210 const databaseType = services [ index ] [ 1 ] ;
129211 const URI = services [ index ] [ 2 ] ;
130212
@@ -134,38 +216,36 @@ ipcMain.on('overviewRequest', (message, index) => {
134216 if ( err ) {
135217 console . log ( `An error occured while querying the database: ${ err } ` ) ;
136218 message . sender . send ( 'overviewResponse' , JSON . stringify ( err ) ) ;
137- }
138-
139- const queryResults = JSON . stringify ( data ) ;
140- // Asynchronous event emitter used to transmit query results back to the render process.
141- message . sender . send ( 'overviewResponse' , queryResults ) ;
142-
219+ }
220+
221+ const queryResults = JSON . stringify ( data ) ;
222+ // Asynchronous event emitter used to transmit query results back to the render process.
223+ message . sender . send ( 'overviewResponse' , queryResults ) ;
143224 } ) ;
144225 }
145-
226+
146227 if ( databaseType === 'SQL' ) {
147228 pool = connectSQL ( index , URI ) ;
148229 const getCommunications = 'SELECT * FROM communications' ;
149230 pool . query ( getCommunications , ( err , result ) => {
150231 if ( err ) {
232+ // error object to log to Electron GUI ---> Ousman
233+ const errorAlert = {
234+ type : 'error' ,
235+ title : 'Error in Main process' ,
236+ message : 'Database information could not be retreived. Check that table exists.' ,
237+ } ;
151238
152- //error object to log to Electron GUI ---> Ousman
153- const errorAlert = {
154- type : "error" ,
155- title : "Error in Main process" ,
156- message : "Database information could not be retreived. Check that table exists."
157- } ;
158-
159- //after requiring dialog in the topmost section of main. We invoke the method showMessagebox passing the error object we created --> Ousman
160- dialog . showMessageBox ( errorAlert ) ;
161-
239+ // after requiring dialog in the topmost section of main. We invoke the method showMessagebox passing the error object we created --> Ousman
240+ dialog . showMessageBox ( errorAlert ) ;
162241
163- message . sender . send ( JSON . stringify ( 'Database info could not be retreived.' ) ) ;
164242
243+ message . sender . send ( JSON . stringify ( 'Database info could not be retreived.' ) ) ;
165244 } else {
166- console . log ( 'Connected to SQL Database' )
245+ console . log ( 'Connected to SQL Database' ) ;
167246 const queryResults = JSON . stringify ( result . rows ) ;
168247 // Asynchronous event emitter used to transmit query results back to the render process.
248+ console . log ( 'ipcMain about to send overviewResponse message' ) ;
169249 message . sender . send ( 'overviewResponse' , queryResults ) ;
170250 }
171251 } ) ;
@@ -174,6 +254,7 @@ ipcMain.on('overviewRequest', (message, index) => {
174254
175255// Queries the database for computer health information and returns it back to the render process.
176256ipcMain . on ( 'detailsRequest' , ( message , index ) => {
257+ console . log ( 'detailsRequest message received' ) ;
177258 const databaseType = JSON . parse (
178259 fs . readFileSync ( path . resolve ( __dirname , './user/settings.json' ) , { encoding : 'UTF-8' } ) ,
179260 ) . services [ index ] [ 1 ] ;
@@ -197,6 +278,7 @@ ipcMain.on('detailsRequest', (message, index) => {
197278 }
198279 const queryResults = JSON . stringify ( result . rows ) ;
199280 // Asynchronous event emitter used to transmit query results back to the render process.
281+ // console.log('healthInfo data about to comeback');
200282 message . sender . send ( 'detailsResponse' , queryResults ) ;
201283 } ) ;
202284 }
0 commit comments