diff --git a/tui.go b/tui.go index baa68a7..7c24094 100644 --- a/tui.go +++ b/tui.go @@ -27,11 +27,11 @@ func AppUI(app *tview.Application, currentFrame **tview.Frame, state *UIState, d SetError(state, "No cardputer connected") return } else { - SetSuccess(state, "Upload started") + SetError(state, "") } - newFrame := UploadUI(app, currentFrame, state, device) + newFrame := UploadToolsUI(app, currentFrame, state, device) *currentFrame = newFrame - state.Page = "upload" + state.Page = "upload-tools" app.SetRoot(newFrame, true) }) list.AddItem("Live Refresh", "Monitors for changes and automatically uploads to the Cardputer (WIP)", 'l', nil) @@ -53,6 +53,22 @@ func SetSuccess(state *UIState, text string) { state.Success = text } +func UploadToolsUI(app *tview.Application, currentFrame **tview.Frame, state *UIState, device *Device) *tview.Frame { + list := tview.NewList() + list.AddItem("Upload Package", "Uploads a chosen .cpkg file to the connected Cardputer", 'u', nil) + list.AddItem("Sync Project", "Automatically packages and uploads the current project", 's', nil) + list.AddItem("Back", "Go back to the home page", 'b', func() { + newFrame := AppUI(app, currentFrame, state, device) + *currentFrame = newFrame + state.Page = "home" + app.SetRoot(newFrame, true) + }) + frame := tview.NewFrame(list) + frame.SetBorders(0, 0, 0, 0, 0, 0) + frame.AddText("Upload Tools", true, tview.AlignLeft, tcell.ColorWhite) + return frame +} + func UploadUI(app *tview.Application, currentFrame **tview.Frame, state *UIState, device *Device) *tview.Frame { list := tview.NewFlex() list.SetDirection(tview.FlexRow) @@ -62,6 +78,37 @@ func UploadUI(app *tview.Application, currentFrame **tview.Frame, state *UIState progress.SetBorder(true) progress.SetTitle("Upload Progress") list.AddItem(progress, 0, 1, false) + go func() { + // check if a package.json file exists and load it + fsys := os.DirFS(".") + pkgData, err := loadPackageJSON(fsys) + if err != nil { // if the package.json file does not exist, show an error modal + modal := tview.NewModal() + modal.SetText("Failed to load package.json") + modal.AddButtons([]string{"OK"}) + modal.SetDoneFunc(func(buttonIndex int, buttonLabel string) { + newFrame := AppUI(app, currentFrame, state, device) + *currentFrame = newFrame + state.Page = "home" + app.SetRoot(newFrame, true) + }) + app.SetRoot(modal, true) + return + } + if pkgData == nil { // if the package.json file is empty, show an error modal + modal := tview.NewModal() + modal.SetText("Failed to load package.json") + modal.AddButtons([]string{"OK"}) + modal.SetDoneFunc(func(buttonIndex int, buttonLabel string) { + newFrame := AppUI(app, currentFrame, state, device) + *currentFrame = newFrame + state.Page = "home" + app.SetRoot(newFrame, true) + }) + app.SetRoot(modal, true) + return + } + }() return tview.NewFrame(list) } @@ -109,6 +156,8 @@ func UpdateDeviceStatus(app *tview.Application, frame *tview.Frame, state *UISta frame.AddText("Package Tools", true, tview.AlignLeft, tcell.ColorWhite) case "upload": frame.AddText("Uploading to Cardputer - Do not disconnect the cardputer until the upload is complete", true, tview.AlignLeft, tcell.ColorWhite) + case "upload-tools": + frame.AddText("Upload Tools", true, tview.AlignLeft, tcell.ColorWhite) } if state.Error != "" { frame.AddText(state.Error, false, tview.AlignRight, tcell.ColorRed)