put function calls inside TUI

master
Joshua Herring 1 month ago
parent df8c447a23
commit cb1ce4dab9

@ -2,6 +2,7 @@ package main
import (
"fmt"
"io"
"os"
"github.com/charmbracelet/bubbles/list"
@ -10,6 +11,15 @@ import (
"periodic/prddeploy/commands"
)
type sshExecCmd struct {
run func()
}
func (c *sshExecCmd) Run() error { c.run(); return nil }
func (c *sshExecCmd) SetStdin(_ io.Reader) {}
func (c *sshExecCmd) SetStdout(_ io.Writer) {}
func (c *sshExecCmd) SetStderr(_ io.Writer) {}
type appState int
const (
@ -117,11 +127,33 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
}
if m.form.State == huh.StateCompleted {
m.ReadForm()
return m, tea.Quit
var execCmd tea.ExecCommand
if m.choice == 0 {
args := commands.RunCommandArgs{
RemoteCommand: m.RemoteCommand,
PrivateKeyFile: m.PrivateKeyFile,
Username: m.Username,
Host: m.Host,
}
execCmd = &sshExecCmd{run: func() { commands.RunCommand(args) }}
} else {
args := commands.UploadFileArgs{
LocalFilepath: m.LocalFilepath,
DestinationFilepath: m.DestinationFilepath,
PrivateKeyFile: m.PrivateKeyFile,
Username: m.Username,
Host: m.Host,
}
execCmd = &sshExecCmd{run: func() { commands.UploadFile(args) }}
}
m.state = stateList
m.form = nil
return m, tea.Exec(execCmd, func(err error) tea.Msg { return nil })
}
if m.form.State == huh.StateAborted {
m.ReadForm()
return m, tea.Quit
m.state = stateList
m.form = nil
return m, nil
}
return m, cmd
}
@ -141,33 +173,8 @@ func (m model) View() string {
func main() {
p := tea.NewProgram(newModel(), tea.WithAltScreen())
result, err := p.Run()
if err != nil {
if _, err := p.Run(); err != nil {
fmt.Fprintf(os.Stderr, "Error running program: %v\n", err)
os.Exit(1)
}
m, ok := result.(model)
if !ok || m.form == nil || m.form.State != huh.StateCompleted {
return
}
m.DebugState()
if m.choice == 0 {
commands.RunCommand(commands.RunCommandArgs{
RemoteCommand: m.RemoteCommand,
PrivateKeyFile: m.PrivateKeyFile,
Username: m.Username,
Host: m.Host,
})
} else {
commands.UploadFile(commands.UploadFileArgs{
LocalFilepath: m.LocalFilepath,
DestinationFilepath: m.DestinationFilepath,
PrivateKeyFile: m.PrivateKeyFile,
Username: m.Username,
Host: m.Host,
})
}
}

Loading…
Cancel
Save