#!/bin/bash #============================================================================== # Модуль интерфейса (TUI) на основе 'dialog' # ИСПРАВЛЕНА ПЕРЕДАЧА АРГУМЕНТОВ ЧЕРЕЗ МАССИВ #============================================================================== # Используем МАССИВ для опций, чтобы избежать проблем с кавычками и пробелами. 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_OPTS[@]}" _call_dialog "" \ dialog "${DIALOG_OPTS[@]}" --title "Главное меню" \ --menu "Выберите опцию для редактирования или действия:" 20 85 15 "${@}" } # Получить путь к каталогу 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_select_action() { _call_dialog "" \ dialog "${DIALOG_OPTS[@]}" --title "Выбор действия" \ --menu "Какую операцию выполнить с найденными файлами?" 15 70 2 \ "MERGE" "Склеить видео и аудио с помощью mkvmerge" \ "SYMLINK" "Создать символические ссылки на видеофайлы" } # --- Функции без возврата значения --- # Показать информационное сообщение 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 $? }