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.

86 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 и корректного возврата результата.
# $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 $?
}