|
|
|
|
@ -2,68 +2,84 @@
|
|
|
|
|
|
|
|
|
|
#==============================================================================
|
|
|
|
|
# Модуль интерфейса (TUI) на основе 'dialog'
|
|
|
|
|
# ИСПРАВЛЕНА ПЕРЕДАЧА АРГУМЕНТОВ ЧЕРЕЗ МАССИВ
|
|
|
|
|
#==============================================================================
|
|
|
|
|
|
|
|
|
|
DIALOG_OPTS="--colors --backtitle 'Универсальный обработчик медиа'"
|
|
|
|
|
# Используем МАССИВ для опций, чтобы избежать проблем с кавычками и пробелами.
|
|
|
|
|
DIALOG_OPTS=(--colors --backtitle "Универсальный обработчик медиа")
|
|
|
|
|
|
|
|
|
|
# Функция-обертка для вызова dialog и корректного возврата результата.
|
|
|
|
|
# $1: Исходное значение (для возврата при отмене)
|
|
|
|
|
# $2, $3, ...: Команда 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_main_menu() {
|
|
|
|
|
dialog $DIALOG_OPTS --title "Главное меню" \
|
|
|
|
|
--menu "Выберите опцию для редактирования или действия:" 20 85 15 "${@}" 2>&1 >/dev/tty
|
|
|
|
|
# Передаем массив опций как "${DIALOG_OPTS[@]}"
|
|
|
|
|
_call_dialog "" \
|
|
|
|
|
dialog "${DIALOG_OPTS[@]}" --title "Главное меню" \
|
|
|
|
|
--menu "Выберите опцию для редактирования или действия:" 20 85 15 "${@}"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Получить путь к каталогу
|
|
|
|
|
# $1: Заголовок окна
|
|
|
|
|
# $2: Текущее значение (для старта)
|
|
|
|
|
# $3: Путь по умолчанию (если текущее значение пусто)
|
|
|
|
|
ui_get_directory() {
|
|
|
|
|
local title="$1"
|
|
|
|
|
local current_path="$2"
|
|
|
|
|
local default_path="$3"
|
|
|
|
|
local start_path="${current_path:-$default_path}"
|
|
|
|
|
|
|
|
|
|
# Убедимся, что путь заканчивается на / для dselect
|
|
|
|
|
[[ "$start_path" != */ ]] && start_path="$start_path/"
|
|
|
|
|
|
|
|
|
|
dialog $DIALOG_OPTS --title "$title" \
|
|
|
|
|
--dselect "$start_path" 10 70 2>&1 >/dev/tty
|
|
|
|
|
_call_dialog "$current_path" \
|
|
|
|
|
dialog "${DIALOG_OPTS[@]}" --title "$title" --dselect "$start_path" 10 70
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Получить текстовый ввод от пользователя
|
|
|
|
|
# $1: Заголовок окна
|
|
|
|
|
# $2: Текущее значение
|
|
|
|
|
ui_get_input() {
|
|
|
|
|
local title="$1"
|
|
|
|
|
local current_value="$2"
|
|
|
|
|
|
|
|
|
|
dialog $DIALOG_OPTS --title "$title" \
|
|
|
|
|
--inputbox "Введите новое значение:" 10 70 "$current_value" 2>&1 >/dev/tty
|
|
|
|
|
_call_dialog "$current_value" \
|
|
|
|
|
dialog "${DIALOG_OPTS[@]}" --title "$title" --inputbox "Введите новое значение:" 10 70 "$current_value"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Показать меню выбора действия перед запуском
|
|
|
|
|
ui_select_action() {
|
|
|
|
|
_call_dialog "" \
|
|
|
|
|
dialog "${DIALOG_OPTS[@]}" --title "Выбор действия" \
|
|
|
|
|
--menu "Какую операцию выполнить с найденными файлами?" 15 70 2 \
|
|
|
|
|
"MERGE" "Склеить видео и аудио с помощью mkvmerge" \
|
|
|
|
|
"SYMLINK" "Создать символические ссылки на видеофайлы"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# --- Функции без возврата значения ---
|
|
|
|
|
|
|
|
|
|
# Показать информационное сообщение
|
|
|
|
|
# $1: Заголовок
|
|
|
|
|
# $2: Текст сообщения
|
|
|
|
|
ui_show_message() {
|
|
|
|
|
local title="$1"
|
|
|
|
|
local text="$2"
|
|
|
|
|
dialog $DIALOG_OPTS --title "$title" --msgbox "$text" 20 70
|
|
|
|
|
# Здесь тоже исправляем на массив
|
|
|
|
|
dialog "${DIALOG_OPTS[@]}" --title "$title" --msgbox "$text" 20 70
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Показать окно с выбором Да/Нет
|
|
|
|
|
# $1: Заголовок
|
|
|
|
|
# $2: Текст вопроса
|
|
|
|
|
ui_confirm() {
|
|
|
|
|
local title="$1"
|
|
|
|
|
local text="$2"
|
|
|
|
|
dialog $DIALOG_OPTS --title "$title" --yesno "$text" 10 70
|
|
|
|
|
# Здесь тоже исправляем на массив
|
|
|
|
|
dialog "${DIALOG_OPTS[@]}" --title "$title" --yesno "$text" 10 70
|
|
|
|
|
return $?
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Показать меню выбора действия перед запуском
|
|
|
|
|
ui_select_action() {
|
|
|
|
|
dialog $DIALOG_OPTS --title "Выбор действия" \
|
|
|
|
|
--menu "Какую операцию выполнить с найденными файлами?" 15 70 2 \
|
|
|
|
|
"MERGE" "Склеить видео и аудио с помощью mkvmerge" \
|
|
|
|
|
"SYMLINK" "Создать символические ссылки на видеофайлы" 2>&1 >/dev/tty
|
|
|
|
|
}
|
|
|
|
|
|