Add fatal error dialog

This commit is contained in:
Elara 2021-08-27 08:47:24 -07:00
parent f4d2f4e6eb
commit 44607ba9e2
6 changed files with 34 additions and 12 deletions

View File

@ -2,6 +2,7 @@ package main
import (
"image/color"
"os"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/canvas"
@ -10,7 +11,7 @@ import (
"fyne.io/fyne/v2/widget"
)
func guiErr(err error, msg string, parent fyne.Window) {
func guiErr(err error, msg string, fatal bool, parent fyne.Window) {
// Create new label containing message
msgLbl := widget.NewLabel(msg)
// Text formatting settings
@ -33,6 +34,20 @@ func guiErr(err error, msg string, parent fyne.Window) {
widget.NewAccordionItem("More Details", errLbl),
))
}
// Show error dialog
dialog.NewCustom("Error", "Ok", content, parent).Show()
if fatal {
// Create new error dialog
errDlg := dialog.NewCustom("Error", "Close", content, parent)
// On close, exit with code 1
errDlg.SetOnClosed(func() {
os.Exit(1)
})
// Show dialog
errDlg.Show()
// Run app prematurely to stop further execution
parent.ShowAndRun()
} else {
// Show error dialog
dialog.NewCustom("Error", "Ok", content, parent).Show()
}
}

View File

@ -58,7 +58,7 @@ func infoTab(parent fyne.Window) *fyne.Container {
fwVerString, err := get(types.ReqTypeFwVersion)
if err != nil {
panic(err)
guiErr(err, "Error getting firmware string", true, parent)
}
fwVer := container.NewVBox(
@ -99,7 +99,7 @@ func watch(req int, onRecv func(data interface{}), parent fyne.Window) error {
for scanner.Scan() {
res, err := getResp(scanner.Bytes())
if err != nil {
guiErr(err, "Error getting response from connection", parent)
guiErr(err, "Error getting response from connection", false, parent)
continue
}
onRecv(res.Value)

View File

@ -1,6 +1,8 @@
package main
import (
"net"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
)
@ -13,6 +15,11 @@ func main() {
// Create new window with title "itgui"
window := a.NewWindow("itgui")
_, err := net.Dial("unix", SockPath)
if err != nil {
guiErr(err, "Error dialing itd socket", true, window)
}
// Create new app tabs container
tabs := container.NewAppTabs(
container.NewTabItem("Info", infoTab(window)),

View File

@ -25,7 +25,7 @@ func notifyTab(parent fyne.Window) *fyne.Container {
// Dial itd UNIX socket
conn, err := net.Dial("unix", SockPath)
if err != nil {
guiErr(err, "Error dialing socket", parent)
guiErr(err, "Error dialing socket", false, parent)
return
}
// Encode notify request on connection

View File

@ -29,7 +29,7 @@ func timeTab(parent fyne.Window) *fyne.Container {
// Parse time as RFC1123 string
parsedTime, err := time.Parse(time.RFC1123, timeEntry.Text)
if err != nil {
guiErr(err, "Error parsing time string", parent)
guiErr(err, "Error parsing time string", false, parent)
return
}
// Set time to parsed time

View File

@ -92,7 +92,7 @@ func upgradeTab(parent fyne.Window) *fyne.Container {
// If archive path does not exist and both init packet and firmware paths
// also do not exist, return error
if archivePath == "" && (initPktPath == "" && fiwmarePath == "") {
guiErr(nil, "Upgrade requires archive or files selected", parent)
guiErr(nil, "Upgrade requires archive or files selected", false, parent)
return
}
@ -125,7 +125,7 @@ func upgradeTab(parent fyne.Window) *fyne.Container {
// Dial itd UNIX socket
conn, err := net.Dial("unix", SockPath)
if err != nil {
guiErr(err, "Error dialing socket", parent)
guiErr(err, "Error dialing socket", false, parent)
return
}
defer conn.Close()
@ -150,18 +150,18 @@ func upgradeTab(parent fyne.Window) *fyne.Container {
// Decode scanned line into response struct
err = json.Unmarshal(scanner.Bytes(), &res)
if err != nil {
guiErr(err, "Error decoding response", parent)
guiErr(err, "Error decoding response", false, parent)
return
}
if res.Error {
guiErr(err, "Error returned in response", parent)
guiErr(err, "Error returned in response", false, parent)
return
}
var event types.DFUProgress
// Decode response data into progress struct
err = mapstructure.Decode(res.Value, &event)
if err != nil {
guiErr(err, "Error decoding response value", parent)
guiErr(err, "Error decoding response value", false, parent)
return
}
// If transfer finished, break