Skip to content

Commit

Permalink
Added exception checking on AppSettings.getData
Browse files Browse the repository at this point in the history
  • Loading branch information
AtomicSponge committed Jun 25, 2024
1 parent a044623 commit 02880a1
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 8 deletions.
51 changes: 45 additions & 6 deletions electron/lib/AppSettings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,15 @@ export class AppSettings {
* Launch menu seralized as string for Electron
*/
getData():SettingsIpc {
const tempData = (()=>{
try {
return JSON.stringify(AppSettings.#launchMenu)
} catch (error:any) {
throw new AppSettingsError(error.message, this.getData)
}
})()
return {
launchMenu: JSON.stringify(AppSettings.#launchMenu),
launchMenu: tempData,
bufferSize: AppSettings.#bufferSize,
encoding: AppSettings.#encoding,
startup: AppSettings.#startup
Expand All @@ -103,6 +110,42 @@ export class AppSettings {
* @throws Errors setting the data
*/
setData(data:SettingsIpc):void {
try {
AppSettings.#checkData(data)
AppSettings.#launchMenu = JSON.parse(data.launchMenu)
AppSettings.#bufferSize = data.bufferSize
AppSettings.#encoding = data.encoding
AppSettings.#startup = data.startup
} catch (error:any) {
throw new AppSettingsError(error.message, this.setData)
}
}

/**
* Compares passed data to the current data to see if it was changed
* @param data Data to compare
* @returns True if the data is the same, else false
* @throws Error if problems with the data format
*/
compareData(data:SettingsIpc):boolean {
try {
AppSettings.#checkData(data)
if (JSON.stringify(AppSettings.#launchMenu) !== data.launchMenu) return false
} catch (error:any) {
throw new AppSettingsError(error.message, this.compareData)
}
if (AppSettings.#bufferSize !== data.bufferSize) return false
if (AppSettings.#encoding !== data.encoding) return false
if (AppSettings.#startup !== data.startup) return false
return true
}

/**
* Checks an object for valid app settings format
* @param data Data to check
* @throws Error if problems with the data format
*/
static #checkData(data:SettingsIpc):void {
try {
if (data === undefined || data === null)
throw new Error('No data received!')
Expand All @@ -114,12 +157,8 @@ export class AppSettings {
throw new Error('Invalid data format! Missing or incorrect System Encoding!')
if (!data.hasOwnProperty('startup') || typeof data.startup !== 'boolean')
throw new Error('Invalid data format! Missing or incorrect Startup flag!')
AppSettings.#launchMenu = JSON.parse(data.launchMenu)
AppSettings.#bufferSize = data.bufferSize
AppSettings.#encoding = data.encoding
AppSettings.#startup = data.startup
} catch (error:any) {
throw new AppSettingsError(error.message, this.setData)
throw error
}
}

Expand Down
14 changes: 12 additions & 2 deletions electron/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,12 @@ const settingsEditorWindow = ():void => {
}
})
settingsWin.webContents.on('did-finish-load', () => {
settingsWin?.webContents.send('send-settings-data', appSettings.getData())
try {
settingsWin?.webContents.send('send-settings-data', appSettings.getData())
} catch (error:any) {
dialog.showErrorBox(`${appInfo.name}`,
`Error sending settings!\n\n${error.message}`)
}
})
settingsWin.on('close', (_event) => {
if (flags.trayData) {
Expand Down Expand Up @@ -190,7 +195,12 @@ ipcMain.on('reset-settings-data', (_event, data) => {
message: 'Are you sure you want to reset settings?'
}) === 0) {
appSettings.reset()
settingsWin?.webContents.send('send-settings-data', appSettings.getData())
try {
settingsWin?.webContents.send('send-settings-data', appSettings.getData())
} catch (error:any) {
dialog.showErrorBox(`${appInfo.name}`,
`Error sending settings!\n\n${error.message}`)
}
}
})

Expand Down
2 changes: 2 additions & 0 deletions renderer/Settings.vue
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,8 @@ onMounted(() => {
_startup.value = settingsData.startup
buildMenuList()
})
//window.onbeforeunload = () => { window.settingsAPI.saveSettings(parseData()) }
})
</script>

Expand Down

0 comments on commit 02880a1

Please sign in to comment.