Files
tuio/internal/tui/cmds.go
T

99 lines
1.9 KiB
Go

package tui
import (
"fmt"
"os/exec"
"time"
tea "charm.land/bubbletea/v2"
)
// --- Messages ---
// Docker installation check
type DockerCheckedMsg struct{ Installed bool }
type DockerInstalledMsg struct{ Err error }
type TickMsg struct{}
// Image downloading and checking
type ImageCheckMsg struct {
Exists bool
Err error
}
type ImageDownloadFinishedMsg struct {
Message string
Err error
}
type DownloadTickMsg struct{}
type ConfigFileMsg struct{ Err error }
type DockerRunMsg struct{ Err error }
// --- Commands ---
func CheckDockerCmd() tea.Cmd {
return func() tea.Msg {
_, err := exec.LookPath("docker")
return DockerCheckedMsg{Installed: err == nil}
}
}
func TickCmd() tea.Cmd {
return tea.Tick(100*time.Millisecond, func(t time.Time) tea.Msg {
return TickMsg{}
})
}
func DownloadImageCmd(username, password string) tea.Cmd {
return func() tea.Msg {
url := imageName
loginOut, err := exec.Command(
"docker", "login", url,
"-u", username,
"-p", password,
).CombinedOutput()
if err != nil {
return ImageDownloadFinishedMsg{
Message: string(loginOut),
Err: fmt.Errorf("falha no login: %w", err),
}
}
message, err := PullImage(url)
return ImageDownloadFinishedMsg{Message: message, Err: err}
}
}
func CheckImageCmd(image string) tea.Cmd {
return func() tea.Msg {
cmd := exec.Command("docker", "image", "inspect", image)
err := cmd.Run()
return ImageCheckMsg{
Exists: err == nil,
Err: err,
}
}
}
func GenerateConfigFile(cv ConfigValues, path string) tea.Cmd {
return func() tea.Msg {
err := WriteConfigFile(cv, path)
return ConfigFileMsg{
Err: err,
}
}
}
func RunAppContainer(image, name, filePath, destinationPath string, cv ConfigValues) tea.Cmd {
return func() tea.Msg {
err := RunAppClienteContainer(image, name, filePath, destinationPath, cv)
return DockerRunMsg{
Err: err,
}
}
}