diff --git a/docker.go b/docker.go index e3ee0b1..1284177 100644 --- a/docker.go +++ b/docker.go @@ -46,13 +46,13 @@ services: return dockerComposeFile } -func batchCreateDockerContainers(menuItems []MenuItem, frame *tview.Frame) []error { +func batchCreateDockerContainers(menuItems []MenuItem, form *tview.Form) []error { var errors []error for _, item := range menuItems { if !item.Config.IsConfigured() { continue } - _, err := item.Config.ConfigureDocker(KIND_DIRECTLY_CONFIGURE_DOCKER, frame) + _, err := item.Config.ConfigureDocker(KIND_DIRECTLY_CONFIGURE_DOCKER, form) if err != nil { errors = append(errors, err) } @@ -94,13 +94,13 @@ func pullImageBlocking(imageName string, logView *tview.TextView) error { return nil } -func createContainer(name string, containerConfig *container.Config, hostConfig *container.HostConfig, frame *tview.Frame) error { +func createContainer(name string, containerConfig *container.Config, hostConfig *container.HostConfig, form *tview.Form) error { client, err := getDockerClient() if err != nil { return err } - logView := frame.GetPrimitive().(*tview.TextView) + logView := form.GetFormItemByLabel("").(*tview.TextView) if err := pullImageBlocking(containerConfig.Image, logView); err != nil { return err @@ -111,7 +111,7 @@ func createContainer(name string, containerConfig *container.Config, hostConfig return err } for _, warning := range out.Warnings { - logView.Write([]byte(warning)) + logView.Write([]byte(warning + "\n")) logView.ScrollToEnd() } return client.ContainerStart(context.Background(), out.ID, container.StartOptions{}) diff --git a/earnapp.go b/earnapp.go index 001cc41..1f4f947 100644 --- a/earnapp.go +++ b/earnapp.go @@ -64,7 +64,7 @@ func (i *EarnAppConfig) ConfigureForm(form *tview.Form, frame *tview.Frame, app }) } -func (i *EarnAppConfig) ConfigureDocker(kind DockerConfigKind, frame *tview.Frame) (string, error) { +func (i *EarnAppConfig) ConfigureDocker(kind DockerConfigKind, form *tview.Form) (string, error) { switch kind { case KIND_DOCKER_COMPOSE: return `earnapp: @@ -96,7 +96,7 @@ func (i *EarnAppConfig) ConfigureDocker(kind DockerConfigKind, frame *tview.Fram }, }, } - return "", createContainer("earnapp", containerConfig, hostConfig, frame) + return "", createContainer("earnapp", containerConfig, hostConfig, form) default: return "", errors.New("unknown kind") } @@ -105,3 +105,9 @@ func (i *EarnAppConfig) ConfigureDocker(kind DockerConfigKind, frame *tview.Fram func (i *EarnAppConfig) IsConfigured() bool { return i.Configured } + +func (i *EarnAppConfig) PostConfigure(form *tview.Form, app *tview.Application) { + form.AddButton("Open EarnApp Claim URL", func() { + webbrowser.Open("https://earnapp.com/r/" + i.UUID) + }) +} diff --git a/grass.go b/grass.go index 000aed8..681bb45 100644 --- a/grass.go +++ b/grass.go @@ -51,7 +51,7 @@ func (i *GrassConfig) ConfigureForm(form *tview.Form, frame *tview.Frame, app *t }) } -func (i *GrassConfig) ConfigureDocker(kind DockerConfigKind, frame *tview.Frame) (string, error) { +func (i *GrassConfig) ConfigureDocker(kind DockerConfigKind, form *tview.Form) (string, error) { switch kind { case KIND_DOCKER_COMPOSE: return `grass: @@ -74,7 +74,7 @@ func (i *GrassConfig) ConfigureDocker(kind DockerConfigKind, frame *tview.Frame) Name: "unless-stopped", }, } - return "", createContainer("grass", containerConfig, hostConfig, frame) + return "", createContainer("grass", containerConfig, hostConfig, form) default: return "", errors.New("unknown kind") } @@ -83,3 +83,6 @@ func (i *GrassConfig) ConfigureDocker(kind DockerConfigKind, frame *tview.Frame) func (i *GrassConfig) IsConfigured() bool { return i.Configured } + +func (i *GrassConfig) PostConfigure(form *tview.Form, app *tview.Application) { +} diff --git a/honeygain.go b/honeygain.go index 13d2464..84bdbd4 100644 --- a/honeygain.go +++ b/honeygain.go @@ -57,7 +57,7 @@ func (i *HoneygainConfig) ConfigureForm(form *tview.Form, frame *tview.Frame, ap }) } -func (i *HoneygainConfig) ConfigureDocker(kind DockerConfigKind, frame *tview.Frame) (string, error) { +func (i *HoneygainConfig) ConfigureDocker(kind DockerConfigKind, form *tview.Form) (string, error) { switch kind { case KIND_DOCKER_COMPOSE: return `honeygain: @@ -87,7 +87,7 @@ func (i *HoneygainConfig) ConfigureDocker(kind DockerConfigKind, frame *tview.Fr i.DeviceName, }, } - return "", createContainer("honeygain", containerConfig, hostConfig, frame) + return "", createContainer("honeygain", containerConfig, hostConfig, form) default: return "", errors.New("unknown kind") } @@ -96,3 +96,6 @@ func (i *HoneygainConfig) ConfigureDocker(kind DockerConfigKind, frame *tview.Fr func (i *HoneygainConfig) IsConfigured() bool { return i.Configured } + +func (i *HoneygainConfig) PostConfigure(form *tview.Form, app *tview.Application) { +} diff --git a/main.go b/main.go index 42845a0..f9529bc 100644 --- a/main.go +++ b/main.go @@ -55,18 +55,27 @@ func main() { }) list.AddItem("[*] Create Docker Containers", "Create docker containers from the selected items (Recommended)", 0, func() { - dockerFrame := tview.NewFrame(tview.NewTextView(). - SetDynamicColors(true). - SetChangedFunc(func() { - app.Draw() - })). - AddText("Creating Docker Containers", true, tview.AlignCenter, tview.Styles.PrimaryTextColor). - AddText("This may take a while", true, tview.AlignCenter, tview.Styles.ContrastSecondaryTextColor) + form. + Clear(true). + SetTitle("Creating Docker Containers"). + SetBorder(true). + SetTitleAlign(tview.AlignCenter) + form. + AddTextView("", "", 0, 0, true, true) + logView := form.GetFormItemByLabel("").(*tview.TextView) + logView.SetChangedFunc(func() { + app.Draw() + }) go func() { - errors := batchCreateDockerContainers(menuItems, dockerFrame) + errors := batchCreateDockerContainers(menuItems, form) if len(errors) == 0 { form.AddTextView("Success", "All containers created successfully", 0, 0, true, false) + for _, item := range menuItems { + if item.Config.IsConfigured() { + item.Config.PostConfigure(form, app) + } + } } else { form.AddTextView("Errors", "Some containers failed to create", 0, 0, true, false) for _, err := range errors { @@ -76,8 +85,9 @@ func main() { form.AddButton("Return", func() { returnToMenu(mainFrame, app) }) + app.Draw() }() - app.SetRoot(dockerFrame, true) + app.SetRoot(form, true) }) app.SetRoot(mainFrame, true).Run() } diff --git a/menuItem.go b/menuItem.go index fbdd6fe..876a0a2 100644 --- a/menuItem.go +++ b/menuItem.go @@ -4,8 +4,9 @@ import "github.com/rivo/tview" type MenuItemConfig interface { ConfigureForm(form *tview.Form, frame *tview.Frame, app *tview.Application) - ConfigureDocker(kind DockerConfigKind, frame *tview.Frame) (string, error) + ConfigureDocker(kind DockerConfigKind, form *tview.Form) (string, error) IsConfigured() bool + PostConfigure(form *tview.Form, app *tview.Application) } type MenuItem struct { diff --git a/mystnode.go b/mystnode.go index 36f024c..fd8cb39 100644 --- a/mystnode.go +++ b/mystnode.go @@ -34,7 +34,7 @@ func (i *MystConfig) ConfigureForm(form *tview.Form, frame *tview.Frame, app *tv }) } -func (i *MystConfig) ConfigureDocker(kind DockerConfigKind, frame *tview.Frame) (string, error) { +func (i *MystConfig) ConfigureDocker(kind DockerConfigKind, form *tview.Form) (string, error) { switch kind { case KIND_DOCKER_COMPOSE: return `myst: @@ -73,7 +73,7 @@ func (i *MystConfig) ConfigureDocker(kind DockerConfigKind, frame *tview.Frame) }, }, } - return "", createContainer("myst", containerConfig, hostConfig, frame) + return "", createContainer("myst", containerConfig, hostConfig, form) } return "", errors.New("unknown kind") } @@ -81,3 +81,6 @@ func (i *MystConfig) ConfigureDocker(kind DockerConfigKind, frame *tview.Frame) func (i *MystConfig) IsConfigured() bool { return i.Configured } + +func (i *MystConfig) PostConfigure(form *tview.Form, app *tview.Application) { +} diff --git a/packetstream.go b/packetstream.go index 2c82be1..2347a26 100644 --- a/packetstream.go +++ b/packetstream.go @@ -45,7 +45,7 @@ func (i *PacketStreamConfig) ConfigureForm(form *tview.Form, frame *tview.Frame, }) } -func (i *PacketStreamConfig) ConfigureDocker(kind DockerConfigKind, frame *tview.Frame) (string, error) { +func (i *PacketStreamConfig) ConfigureDocker(kind DockerConfigKind, form *tview.Form) (string, error) { switch kind { case KIND_DOCKER_COMPOSE: return `packetstream: @@ -66,7 +66,7 @@ func (i *PacketStreamConfig) ConfigureDocker(kind DockerConfigKind, frame *tview Name: "unless-stopped", }, } - return "", createContainer("packetstream", containerConfig, hostConfig, frame) + return "", createContainer("packetstream", containerConfig, hostConfig, form) default: return "", errors.New("unknown kind") } @@ -75,3 +75,6 @@ func (i *PacketStreamConfig) ConfigureDocker(kind DockerConfigKind, frame *tview func (i *PacketStreamConfig) IsConfigured() bool { return i.Configured } + +func (i *PacketStreamConfig) PostConfigure(form *tview.Form, app *tview.Application) { +} diff --git a/pawnsapp.go b/pawnsapp.go index c9ef5ff..4926bf9 100644 --- a/pawnsapp.go +++ b/pawnsapp.go @@ -57,7 +57,7 @@ func (i *PawnsAppConfig) ConfigureForm(form *tview.Form, frame *tview.Frame, app }) } -func (i *PawnsAppConfig) ConfigureDocker(kind DockerConfigKind, frame *tview.Frame) (string, error) { +func (i *PawnsAppConfig) ConfigureDocker(kind DockerConfigKind, form *tview.Form) (string, error) { switch kind { case KIND_DOCKER_COMPOSE: return `pawnsapp: @@ -80,7 +80,7 @@ func (i *PawnsAppConfig) ConfigureDocker(kind DockerConfigKind, frame *tview.Fra Name: "unless-stopped", }, } - return "", createContainer("pawnsapp", containerConfig, hostConfig, frame) + return "", createContainer("pawnsapp", containerConfig, hostConfig, form) default: return "", errors.New("unknown kind") } @@ -89,3 +89,6 @@ func (i *PawnsAppConfig) ConfigureDocker(kind DockerConfigKind, frame *tview.Fra func (i *PawnsAppConfig) IsConfigured() bool { return i.Configured } + +func (i *PawnsAppConfig) PostConfigure(form *tview.Form, app *tview.Application) { +} diff --git a/peer2profit.go b/peer2profit.go index bd2a0b7..7e17d02 100644 --- a/peer2profit.go +++ b/peer2profit.go @@ -46,7 +46,7 @@ func (i *Peer2ProfitConfig) ConfigureForm(form *tview.Form, frame *tview.Frame, }) } -func (i *Peer2ProfitConfig) ConfigureDocker(kind DockerConfigKind, frame *tview.Frame) (string, error) { +func (i *Peer2ProfitConfig) ConfigureDocker(kind DockerConfigKind, form *tview.Form) (string, error) { switch kind { case KIND_DOCKER_COMPOSE: compose := `peer2profit: @@ -80,7 +80,7 @@ func (i *Peer2ProfitConfig) ConfigureDocker(kind DockerConfigKind, frame *tview. Name: "unless-stopped", }, } - if err := createContainer("binfmt", containerConfig, hostConfig, frame); err != nil { + if err := createContainer("binfmt", containerConfig, hostConfig, form); err != nil { return "", err } } @@ -96,7 +96,7 @@ func (i *Peer2ProfitConfig) ConfigureDocker(kind DockerConfigKind, frame *tview. Name: "unless-stopped", }, } - return "", createContainer("peer2profit", containerConfig, hostConfig, frame) + return "", createContainer("peer2profit", containerConfig, hostConfig, form) } return "", errors.New("unknown kind") } @@ -104,3 +104,6 @@ func (i *Peer2ProfitConfig) ConfigureDocker(kind DockerConfigKind, frame *tview. func (i *Peer2ProfitConfig) IsConfigured() bool { return i.Configured } + +func (i *Peer2ProfitConfig) PostConfigure(form *tview.Form, app *tview.Application) { +} diff --git a/watchtower.go b/watchtower.go index dfab11b..875e178 100644 --- a/watchtower.go +++ b/watchtower.go @@ -29,7 +29,7 @@ func (i *WatchtowerConfig) ConfigureForm(form *tview.Form, frame *tview.Frame, a }) } -func (i *WatchtowerConfig) ConfigureDocker(kind DockerConfigKind, frame *tview.Frame) (string, error) { +func (i *WatchtowerConfig) ConfigureDocker(kind DockerConfigKind, form *tview.Form) (string, error) { switch kind { case KIND_DOCKER_COMPOSE: return `watchtower: @@ -50,7 +50,7 @@ func (i *WatchtowerConfig) ConfigureDocker(kind DockerConfigKind, frame *tview.F Name: "always", }, } - return "", createContainer("watchtower", containerConfig, hostConfig, frame) + return "", createContainer("watchtower", containerConfig, hostConfig, form) default: return "", errors.New("unknown kind") } @@ -59,3 +59,6 @@ func (i *WatchtowerConfig) ConfigureDocker(kind DockerConfigKind, frame *tview.F func (i *WatchtowerConfig) IsConfigured() bool { return i.Configured } + +func (i *WatchtowerConfig) PostConfigure(form *tview.Form, app *tview.Application) { +}