task: extract the function for listing command menu

This commit is contained in:
oscarzhou 2022-12-26 01:56:02 +13:00
parent c32698b510
commit 747c774c98
2 changed files with 49 additions and 41 deletions

View File

@ -4,12 +4,9 @@ import (
"log"
"ocl/portainer-devtool/configs"
"ocl/portainer-devtool/tasks"
"ocl/portainer-devtool/utils"
"strconv"
)
func main() {
config, err := configs.GetConfig()
if err != nil {
log.Fatalln(err)
@ -18,50 +15,14 @@ func main() {
config.Summarize()
// Init tasks
taskItems := []tasks.Tasker{
tasks.NewGenerateJwtTokenTask(config),
tasks.NewCurlLookupTask(),
tasks.NewCodeSecurityScanTask(),
tasks.NewListDevToolCommandTask(config),
tasks.NewExitTask(),
}
for {
printMainMenu := func() {
taskNames := []string{}
for _, task := range taskItems {
taskNames = append(taskNames, task.String())
}
utils.PrintMenu("Which repository of action do you want operate:", taskNames)
// utils.MenuPrint("Which repository or action do you want to operate:", `
// 1. Portainer EE Repository
// 2. Portainer CE Repository
// 3. Portainer Agent Repository
// 4. Others
// 5. Quit`)
}
option := utils.SelectMenuItem(printMainMenu)
index, err := strconv.Atoi(option)
if err != nil {
log.Printf("please type the option number\n")
continue
}
if index < 1 || index > len(taskItems) {
log.Printf("no such option %s, please select again\n", option)
continue
}
err = taskItems[index-1].Execute()
if err != nil {
log.Fatalln(err)
}
}
tasks.ListCommandMenu(taskItems, "Which repository of action do you want operate:")
}

View File

@ -1,6 +1,53 @@
package tasks
import (
"fmt"
"ocl/portainer-devtool/utils"
"os"
"strconv"
)
type Tasker interface {
Execute() error
String() string
}
// ListCommandMenu iterates task items to display them // on the screen as the menu options
func ListCommandMenu(taskItems []Tasker, menuDesp string) error {
for {
printMainMenu := func() {
taskNames := []string{}
for _, task := range taskItems {
taskNames = append(taskNames, task.String())
}
utils.PrintMenu(menuDesp, taskNames)
// utils.MenuPrint("Which repository or action do you want to operate:", `
// 1. Portainer EE Repository
// 2. Portainer CE Repository
// 3. Portainer Agent Repository
// 4. Others
// 5. Quit`)
}
option := utils.SelectMenuItem(printMainMenu)
index, err := strconv.Atoi(option)
if err != nil {
utils.ErrorPrint("please type the option number\n")
continue
}
if index < 1 || index > len(taskItems) {
utils.ErrorPrint(fmt.Sprintf("no such option %s, please select again\n", option))
continue
}
err = taskItems[index-1].Execute()
if err != nil {
utils.ErrorPrint(err.Error())
os.Exit(1)
}
}
}