2025-12-26 17:45:37 +05:00
|
|
|
|
package types
|
|
|
|
|
|
|
2026-01-26 17:46:17 +05:00
|
|
|
|
import "github.com/charmbracelet/bubbles/key"
|
|
|
|
|
|
|
2026-01-20 17:40:21 +05:00
|
|
|
|
// PackageApplication структура описывающая настраиваемое приложение
|
2025-12-26 17:45:37 +05:00
|
|
|
|
type PackageApplication struct {
|
2026-01-20 17:40:21 +05:00
|
|
|
|
Name string `yaml:"name"` //Имя приложения
|
|
|
|
|
|
Version string `yaml:"version"` //Версия приложения
|
|
|
|
|
|
Description string `yaml:"description"` //Описание приложения
|
|
|
|
|
|
Icon string `yaml:"icon"` //Иконка приложения
|
|
|
|
|
|
Type string `yaml:"type"` //Тип приложения
|
|
|
|
|
|
ConfFiles []ConfFile `yaml:"conf-files"` //Файлы конфигурации
|
|
|
|
|
|
Variables []Variable `yaml:"variables"` //Переменные настройки
|
|
|
|
|
|
Sections []Section `yaml:"sections"` //Секции настройки
|
|
|
|
|
|
Changed bool `yaml:"-"` //Вносились ли изменения
|
2025-12-26 17:45:37 +05:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-20 17:40:21 +05:00
|
|
|
|
// ConfFile структура описывающая используемый приложением конфигурационный файл
|
2025-12-26 17:45:37 +05:00
|
|
|
|
type ConfFile struct {
|
2026-01-20 17:40:21 +05:00
|
|
|
|
File string `yaml:"file"` //Путь файла
|
|
|
|
|
|
Type string `yaml:"type"` //Тип файла
|
|
|
|
|
|
Name string `yaml:"name"` //Имя файла
|
2025-12-26 17:45:37 +05:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-20 17:40:21 +05:00
|
|
|
|
// Variable структура описывающая переменную для настройки приложения
|
2025-12-26 17:45:37 +05:00
|
|
|
|
type Variable struct {
|
2026-01-20 17:40:21 +05:00
|
|
|
|
Name string `yaml:"name"` //Имя переменной
|
|
|
|
|
|
Type string `yaml:"type"` //Тип значения переменной
|
|
|
|
|
|
Default string `yaml:"default"` //Значение по умолчанию
|
|
|
|
|
|
Value interface{} `yaml:"-"` //Используемое значение
|
2025-12-26 17:45:37 +05:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-20 17:40:21 +05:00
|
|
|
|
// Section структура описывающая секцию настройки приложения
|
2025-12-26 17:45:37 +05:00
|
|
|
|
type Section struct {
|
2026-01-20 17:40:21 +05:00
|
|
|
|
Name string `yaml:"name"` //Имя секции
|
|
|
|
|
|
Type string `yaml:"type"` //Тип секции
|
|
|
|
|
|
Description string `yaml:"description"` //Описание секции
|
|
|
|
|
|
Fields []SectionField `yaml:"fields"` //Поля секции
|
|
|
|
|
|
Paragraphs []string `yaml:"paragraphs"` //Параграфы для описания приложения
|
|
|
|
|
|
Parent []string `yaml:"parent"` //Переменные от которых зависит секция
|
|
|
|
|
|
Condition string `yaml:"condition"` //Условие отображения секции
|
|
|
|
|
|
Actions []SectionAction `yaml:"actions"` //Действия выполняемые после перехода с секции
|
2025-12-26 17:45:37 +05:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-20 17:40:21 +05:00
|
|
|
|
// SectionField структура описывающая поле секции
|
2025-12-26 17:45:37 +05:00
|
|
|
|
type SectionField struct {
|
2026-01-20 17:40:21 +05:00
|
|
|
|
Name string `yaml:"name"` //Имя поля
|
|
|
|
|
|
VariableName string `yaml:"variable-name"` //Имя переменной, хранящей значение поля
|
|
|
|
|
|
FieldType string `yaml:"field-type"` //Тип поля
|
|
|
|
|
|
FileFieldExtensions []string `yaml:"file-field-extensions"` //Расширения файла для поля выбора файла
|
|
|
|
|
|
Description string `yaml:"description"` //Описание поля
|
|
|
|
|
|
Condition string `yaml:"condition"` //Условие отображения поля
|
|
|
|
|
|
Options []interface{} `yaml:"options"` //Список опций
|
|
|
|
|
|
SpecialValue string `yaml:"special-value"` //Специального значения
|
|
|
|
|
|
Compute string `yaml:"compute"` //Строка вычислений значения
|
|
|
|
|
|
Validate []FieldValidate `yaml:"validate"` //Правила проверки значения
|
|
|
|
|
|
Parent []string `yaml:"parent"` //Переменные от которых зависит поле
|
|
|
|
|
|
Variable *Variable `yaml:"-"` //Указатель на переменную
|
|
|
|
|
|
Active bool `yaml:"-"` //Активно ли поле для получения значения
|
2025-12-26 17:45:37 +05:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-20 17:40:21 +05:00
|
|
|
|
// FieldValidate структура описывающая правила проверки значения поля
|
2025-12-26 17:45:37 +05:00
|
|
|
|
type FieldValidate struct {
|
2026-01-20 17:40:21 +05:00
|
|
|
|
Rule string `yaml:"rule"` //Правило проверки
|
|
|
|
|
|
Message string `yaml:"message"` //Сообщение ошибки
|
2025-12-26 17:45:37 +05:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-20 17:40:21 +05:00
|
|
|
|
// SectionAction структура описывающая действия к выполнению
|
2025-12-26 17:45:37 +05:00
|
|
|
|
type SectionAction struct {
|
2026-01-20 17:40:21 +05:00
|
|
|
|
Name string `yaml:"name"` //Имя действия
|
|
|
|
|
|
Type string `yaml:"type"` //Тип действия
|
|
|
|
|
|
Command string `yaml:"command"` //Команда для выполнения
|
|
|
|
|
|
FileTarget string `yaml:"file-target"` //Целевой файл редактирования
|
|
|
|
|
|
FileSource string `yaml:"file-source"` //Файл источник
|
|
|
|
|
|
Condition string `yaml:"condition"` //Условие для выполнения
|
|
|
|
|
|
RunAs string `yaml:"run-as"` //Пользователь для запуска
|
|
|
|
|
|
RequirePackages []string `yaml:"require-packages"` //Требуемые пакеты
|
|
|
|
|
|
Error string `yaml:"error"` //Ошибка выполнения
|
2026-01-30 17:40:25 +05:00
|
|
|
|
AssignTo string `yaml:"assign-to"` //Переменная, которой надо присвоить значение
|
2025-12-26 17:45:37 +05:00
|
|
|
|
}
|
2026-01-21 17:56:21 +05:00
|
|
|
|
|
|
|
|
|
|
// BoolValidateFunc функция, которая возвращает ошибку, если данные checkbox неверны
|
|
|
|
|
|
type BoolValidateFunc func(bool) error
|
2026-01-26 17:46:17 +05:00
|
|
|
|
|
|
|
|
|
|
// MainKeyMap структура главных клавиш
|
|
|
|
|
|
type MainKeyMap struct {
|
|
|
|
|
|
Up key.Binding //Вверх, прошлый элемент
|
|
|
|
|
|
Down key.Binding //Вниз, следующий элемент
|
|
|
|
|
|
Left key.Binding //Влево
|
|
|
|
|
|
Right key.Binding //Вправо
|
|
|
|
|
|
Top key.Binding //На самый верх
|
|
|
|
|
|
Bottom key.Binding //В самый низ
|
|
|
|
|
|
Confirm key.Binding //Клавиша подтверждения
|
|
|
|
|
|
Help key.Binding //Отображение помощи
|
|
|
|
|
|
Log key.Binding //Отображение лого
|
|
|
|
|
|
Close key.Binding //Закрыть
|
|
|
|
|
|
Exit key.Binding //Выйти
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// MainKeys используемые клавиши
|
|
|
|
|
|
var MainKeys = MainKeyMap{
|
|
|
|
|
|
Up: key.NewBinding(key.WithKeys("up", "shift+tab"), key.WithHelp("up", "move up")),
|
|
|
|
|
|
Down: key.NewBinding(key.WithKeys("down", "tab"), key.WithHelp("down", "move down")),
|
|
|
|
|
|
Left: key.NewBinding(key.WithKeys("left"), key.WithHelp("left", "move left")),
|
|
|
|
|
|
Right: key.NewBinding(key.WithKeys("right"), key.WithHelp("right", "move right")),
|
|
|
|
|
|
Top: key.NewBinding(key.WithKeys("home"), key.WithHelp("top", "move top")),
|
|
|
|
|
|
Bottom: key.NewBinding(key.WithKeys("end"), key.WithHelp("bottom", "move bottom")),
|
|
|
|
|
|
Confirm: key.NewBinding(key.WithKeys("enter"), key.WithHelp("enter", "confirm")),
|
|
|
|
|
|
Help: key.NewBinding(key.WithKeys("?", "ctrl+h"), key.WithHelp("?/ctrl+h", "help")),
|
|
|
|
|
|
Log: key.NewBinding(key.WithKeys("ctrl+l"), key.WithHelp("ctrl+l", "show/hide log window")),
|
|
|
|
|
|
Close: key.NewBinding(key.WithKeys("esc"), key.WithHelp("esc", "close")),
|
2026-02-02 17:56:36 +05:00
|
|
|
|
Exit: key.NewBinding(key.WithKeys("ctrl+c", "ctrl+q"), key.WithHelp("ctrl+c/ctrl+q", "quit")),
|
2026-01-26 17:46:17 +05:00
|
|
|
|
}
|