You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
3.2 KiB
Bash

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/bin/bash
#==============================================================================
# Модуль интерфейса (TUI) на основе 'dialog'
# ИСПРАВЛЕНА ВЫСОТА ДИНАМИЧЕСКОГО МЕНЮ
#==============================================================================
# Используем МАССИВ для опций, чтобы избежать проблем с кавычками и пробелами.
DIALOG_OPTS=(--colors --backtitle "Универсальный обработчик медиа")
# Функция-обертка для вызова dialog и корректного возврата результата.
# ... (эта функция остается без изменений)
_call_dialog() {
local original_value="$1"
shift
local result
result=$("$@" 2>&1 1>/dev/tty)
local exit_status=$?
if [ $exit_status -eq 0 ]; then
echo "$result"
else
echo "$original_value"
fi
}
# Показать начальное меню выбора действия
# ... (эта функция остается без изменений)
ui_select_initial_action() {
_call_dialog "" \
dialog "${DIALOG_OPTS[@]}" --title "Выбор действия" \
--cancel-label "Выход" \
--menu "Выберите, что вы хотите сделать:" 15 70 2 \
"MERGE" "Склеить видео и аудио (mkvmerge)" \
"SYMLINK" "Создать симлинки с новыми именами"
}
# Показать главное меню
ui_main_menu() {
# --- КЛЮЧЕВОЕ ИЗМЕНЕНИЕ ЗДЕСЬ ---
# Заменяем фиксированную высоту меню "15" на "0".
# "0" говорит dialog автоматически рассчитать высоту на основе количества пунктов.
_call_dialog "" \
dialog "${DIALOG_OPTS[@]}" --title "Главное меню" \
--cancel-label "Назад" \
--menu "Выберите опцию для редактирования или действия:" 20 85 0 "${@}"
}
# Получить путь к каталогу
# ... (эта функция остается без изменений)
ui_get_directory() {
local title="$1"
local current_path="$2"
local default_path="$3"
local start_path="${current_path:-$default_path}"
[[ "$start_path" != */ ]] && start_path="$start_path/"
_call_dialog "$current_path" \
dialog "${DIALOG_OPTS[@]}" --title "$title" --dselect "$start_path" 10 70
}
# Получить текстовый ввод от пользователя
# ... (остальные функции остаются без изменений)
ui_get_input() {
local title="$1"
local current_value="$2"
_call_dialog "$current_value" \
dialog "${DIALOG_OPTS[@]}" --title "$title" --inputbox "Введите новое значение:" 10 70 "$current_value"
}
ui_show_message() {
local title="$1"
local text="$2"
dialog "${DIALOG_OPTS[@]}" --title "$title" --msgbox "$text" 20 70
}
ui_confirm() {
local title="$1"
local text="$2"
dialog "${DIALOG_OPTS[@]}" --title "$title" --yesno "$text" 10 70
return $?
}