Add hints
This commit is contained in:
parent
0f25186736
commit
de5e4d9efb
32
main.go
32
main.go
|
|
@ -70,10 +70,12 @@ type MenuItem struct {
|
||||||
Catch []string `yaml:"catch,omitempty"`
|
Catch []string `yaml:"catch,omitempty"`
|
||||||
Vars []string `yaml:"vars,omitempty"`
|
Vars []string `yaml:"vars,omitempty"`
|
||||||
Env string `yaml:"env,omitempty"`
|
Env string `yaml:"env,omitempty"`
|
||||||
|
Hint string `yaml:"hint,omitempty"` // Добавляем hint в MenuItem
|
||||||
}
|
}
|
||||||
|
|
||||||
// Menu управляет отображением меню
|
// Menu управляет отображением меню
|
||||||
type Menu struct {
|
type Menu struct {
|
||||||
|
hint string
|
||||||
items map[int]MenuItem
|
items map[int]MenuItem
|
||||||
variables *Variables
|
variables *Variables
|
||||||
baseDir string
|
baseDir string
|
||||||
|
|
@ -82,7 +84,6 @@ type Menu struct {
|
||||||
// NewMenu инициализирует меню из YAML
|
// NewMenu инициализирует меню из YAML
|
||||||
func NewMenu(yamlFile string) *Menu {
|
func NewMenu(yamlFile string) *Menu {
|
||||||
currDir, _ := os.Getwd()
|
currDir, _ := os.Getwd()
|
||||||
// baseDir := filepath.Join(currDir, "menu") // Базовая директория меню
|
|
||||||
baseDir := currDir
|
baseDir := currDir
|
||||||
yamlPath := resolvePath(baseDir, yamlFile)
|
yamlPath := resolvePath(baseDir, yamlFile)
|
||||||
|
|
||||||
|
|
@ -94,16 +95,18 @@ func NewMenu(yamlFile string) *Menu {
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
|
|
||||||
decoder := yaml.NewDecoder(file)
|
decoder := yaml.NewDecoder(file)
|
||||||
var menu struct {
|
var menuData struct {
|
||||||
|
Hint string `yaml:"hint,omitempty"` // Добавляем поле hint
|
||||||
Items map[int]MenuItem `yaml:"items"`
|
Items map[int]MenuItem `yaml:"items"`
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := decoder.Decode(&menu); err != nil {
|
if err := decoder.Decode(&menuData); err != nil {
|
||||||
log.Fatalf("Ошибка парсинга YAML: %v", err)
|
log.Fatalf("Ошибка парсинга YAML: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &Menu{
|
return &Menu{
|
||||||
items: menu.Items,
|
hint: menuData.Hint,
|
||||||
|
items: menuData.Items,
|
||||||
variables: NewVariables("env.ini"),
|
variables: NewVariables("env.ini"),
|
||||||
baseDir: baseDir,
|
baseDir: baseDir,
|
||||||
}
|
}
|
||||||
|
|
@ -127,15 +130,23 @@ func resolvePath(baseDir, yamlFile string) string {
|
||||||
|
|
||||||
// ShowItems отображает главное меню
|
// ShowItems отображает главное меню
|
||||||
func (m *Menu) ShowItems() {
|
func (m *Menu) ShowItems() {
|
||||||
|
// Выводим подсказку, если она есть
|
||||||
|
if m.hint != "" {
|
||||||
|
fmt.Println(m.hint)
|
||||||
|
// fmt.Println() // Пустая строка после подсказки
|
||||||
|
} else {
|
||||||
|
fmt.Println()
|
||||||
|
}
|
||||||
|
|
||||||
fmt.Println("0. Выход")
|
fmt.Println("0. Выход")
|
||||||
|
|
||||||
//Извлекаем ключи из мапы
|
// Извлекаем ключи из мапы
|
||||||
keys := make([]int, 0, len(m.items))
|
keys := make([]int, 0, len(m.items))
|
||||||
for key := range m.items {
|
for key := range m.items {
|
||||||
keys = append(keys, key)
|
keys = append(keys, key)
|
||||||
}
|
}
|
||||||
|
|
||||||
//Сортируем ключи
|
// Сортируем ключи
|
||||||
sort.Ints(keys)
|
sort.Ints(keys)
|
||||||
|
|
||||||
for _, key := range keys {
|
for _, key := range keys {
|
||||||
|
|
@ -149,6 +160,7 @@ func (m *Menu) Loop() {
|
||||||
|
|
||||||
for {
|
for {
|
||||||
m.ShowItems()
|
m.ShowItems()
|
||||||
|
fmt.Print("\n")
|
||||||
fmt.Print("Выберите действие: ")
|
fmt.Print("Выберите действие: ")
|
||||||
input, _ := reader.ReadString('\n')
|
input, _ := reader.ReadString('\n')
|
||||||
input = strings.TrimSpace(input)
|
input = strings.TrimSpace(input)
|
||||||
|
|
@ -180,7 +192,13 @@ func (m *Menu) ChooseItem(itemNum int) {
|
||||||
subMenu := NewMenu(filePath)
|
subMenu := NewMenu(filePath)
|
||||||
subMenu.Loop()
|
subMenu.Loop()
|
||||||
} else if len(item.Items) > 0 {
|
} else if len(item.Items) > 0 {
|
||||||
subMenu := &Menu{items: item.Items, variables: m.variables, baseDir: m.baseDir}
|
// Создаем подменю из вложенных items
|
||||||
|
subMenu := &Menu{
|
||||||
|
hint: item.Hint, // Используем hint из MenuItem
|
||||||
|
items: item.Items,
|
||||||
|
variables: m.variables,
|
||||||
|
baseDir: m.baseDir,
|
||||||
|
}
|
||||||
subMenu.Loop()
|
subMenu.Loop()
|
||||||
} else if len(item.Commands) > 0 {
|
} else if len(item.Commands) > 0 {
|
||||||
vars := m.getVars(item, true)
|
vars := m.getVars(item, true)
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,12 @@
|
||||||
|
hint: |
|
||||||
|
|
||||||
|
/======================================\
|
||||||
|
| ************************************ |
|
||||||
|
| * МЕНЮ УПРАВЛЕНИЯ СИСТЕМОЙ * |
|
||||||
|
| * ver. 1.0.0 (2024) * |
|
||||||
|
| ************************************ |
|
||||||
|
\======================================/
|
||||||
|
|
||||||
items:
|
items:
|
||||||
1:
|
1:
|
||||||
title: '1. Build'
|
title: '1. Build'
|
||||||
|
|
@ -38,9 +47,10 @@ items:
|
||||||
title: '5. Stop'
|
title: '5. Stop'
|
||||||
env: 'dev'
|
env: 'dev'
|
||||||
commands:
|
commands:
|
||||||
- 'docker-compose --project-name %(appName)s --file conf/docker/docker-compose_dev.yml stop'
|
- 'docker stop $(docker ps -q)'
|
||||||
- 'sleep 3'
|
# - 'docker-compose --project-name %(appName)s --file conf/docker/docker-compose_dev.yml stop'
|
||||||
- 'docker network rm dockernet'
|
# - 'sleep 3'
|
||||||
|
# - 'docker network rm dockernet'
|
||||||
vars:
|
vars:
|
||||||
- appName
|
- appName
|
||||||
6:
|
6:
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,12 @@
|
||||||
|
hint: |
|
||||||
|
|
||||||
|
/======================================\
|
||||||
|
| ************************************ |
|
||||||
|
| * МЕНЮ УПРАВЛЕНИЯ СИСТЕМОЙ * |
|
||||||
|
| * ver. 1.0.0 (2024) * |
|
||||||
|
| ************************************ |
|
||||||
|
\======================================/
|
||||||
|
|
||||||
items:
|
items:
|
||||||
1:
|
1:
|
||||||
title: '1. Develop'
|
title: '1. Develop'
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue