Add hints

This commit is contained in:
Ваше Имя 2025-12-20 18:07:13 +05:00
parent 0f25186736
commit de5e4d9efb
4 changed files with 47 additions and 10 deletions

BIN
hello

Binary file not shown.

28
main.go
View File

@ -70,10 +70,12 @@ type MenuItem struct {
Catch []string `yaml:"catch,omitempty"`
Vars []string `yaml:"vars,omitempty"`
Env string `yaml:"env,omitempty"`
Hint string `yaml:"hint,omitempty"` // Добавляем hint в MenuItem
}
// Menu управляет отображением меню
type Menu struct {
hint string
items map[int]MenuItem
variables *Variables
baseDir string
@ -82,7 +84,6 @@ type Menu struct {
// NewMenu инициализирует меню из YAML
func NewMenu(yamlFile string) *Menu {
currDir, _ := os.Getwd()
// baseDir := filepath.Join(currDir, "menu") // Базовая директория меню
baseDir := currDir
yamlPath := resolvePath(baseDir, yamlFile)
@ -94,16 +95,18 @@ func NewMenu(yamlFile string) *Menu {
defer file.Close()
decoder := yaml.NewDecoder(file)
var menu struct {
var menuData struct {
Hint string `yaml:"hint,omitempty"` // Добавляем поле hint
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)
}
return &Menu{
items: menu.Items,
hint: menuData.Hint,
items: menuData.Items,
variables: NewVariables("env.ini"),
baseDir: baseDir,
}
@ -127,6 +130,14 @@ func resolvePath(baseDir, yamlFile string) string {
// ShowItems отображает главное меню
func (m *Menu) ShowItems() {
// Выводим подсказку, если она есть
if m.hint != "" {
fmt.Println(m.hint)
// fmt.Println() // Пустая строка после подсказки
} else {
fmt.Println()
}
fmt.Println("0. Выход")
// Извлекаем ключи из мапы
@ -149,6 +160,7 @@ func (m *Menu) Loop() {
for {
m.ShowItems()
fmt.Print("\n")
fmt.Print("Выберите действие: ")
input, _ := reader.ReadString('\n')
input = strings.TrimSpace(input)
@ -180,7 +192,13 @@ func (m *Menu) ChooseItem(itemNum int) {
subMenu := NewMenu(filePath)
subMenu.Loop()
} 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()
} else if len(item.Commands) > 0 {
vars := m.getVars(item, true)

View File

@ -1,3 +1,12 @@
hint: |
/======================================\
| ************************************ |
| * МЕНЮ УПРАВЛЕНИЯ СИСТЕМОЙ * |
| * ver. 1.0.0 (2024) * |
| ************************************ |
\======================================/
items:
1:
title: '1. Build'
@ -38,9 +47,10 @@ items:
title: '5. Stop'
env: 'dev'
commands:
- 'docker-compose --project-name %(appName)s --file conf/docker/docker-compose_dev.yml stop'
- 'sleep 3'
- 'docker network rm dockernet'
- 'docker stop $(docker ps -q)'
# - 'docker-compose --project-name %(appName)s --file conf/docker/docker-compose_dev.yml stop'
# - 'sleep 3'
# - 'docker network rm dockernet'
vars:
- appName
6:

View File

@ -1,3 +1,12 @@
hint: |
/======================================\
| ************************************ |
| * МЕНЮ УПРАВЛЕНИЯ СИСТЕМОЙ * |
| * ver. 1.0.0 (2024) * |
| ************************************ |
\======================================/
items:
1:
title: '1. Develop'