move
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
#!/bin/bash
|
||||
|
||||
#==============================================================================
|
||||
# Модуль действий: выполнение mkvmerge, создание симлинков и т.д.
|
||||
#==============================================================================
|
||||
|
||||
action_merge_mkv() {
|
||||
local video_file="$1"
|
||||
local audio_file="$2"
|
||||
local output_file="$3"
|
||||
|
||||
# Мы больше не выводим echo здесь, так как это будет скрыто.
|
||||
# Команда выполняется "молча". Ошибки в stderr все равно будут видны.
|
||||
mkvmerge \
|
||||
-o "$output_file" \
|
||||
--track-order 1:0,0:0 \
|
||||
--language 0:rus "$audio_file" \
|
||||
"$video_file"
|
||||
}
|
||||
|
||||
action_create_symlink() {
|
||||
local video_file="$1"
|
||||
local output_file="$2"
|
||||
# Аналогично, выполняем молча.
|
||||
ln -s "$video_file" "$output_file"
|
||||
}
|
||||
|
||||
# --- ПОЛНОСТЬЮ ПЕРЕРАБОТАННАЯ ФУНКЦИЯ ЗАПУСКА ---
|
||||
run_processing() {
|
||||
# Шаг 1: Готовим список файлов, как и раньше
|
||||
if ! logic_prepare_file_lists; then return 1; fi
|
||||
if [ ${#FILE_TRIPLETS[@]} -eq 0 ]; then
|
||||
ui_show_message "Запуск" "Нет файлов для обработки."
|
||||
return
|
||||
fi
|
||||
|
||||
local confirmation_text="Вы уверены, что хотите выполнить '${CURRENT_ACTION}' для ${#FILE_TRIPLETS[@]} файлов?\n\n"
|
||||
confirmation_text+="Результаты будут сохранены в:\n$OUTPUT_BASE_DIR"
|
||||
if ! ui_confirm "Финальное подтверждение" "$confirmation_text"; then
|
||||
ui_show_message "Отмена" "Операция отменена пользователем."
|
||||
return
|
||||
fi
|
||||
|
||||
if [ ! -d "$OUTPUT_BASE_DIR" ]; then
|
||||
if ui_confirm "Создание каталога" "Каталог '$OUTPUT_BASE_DIR' не существует. Создать его?"; then
|
||||
mkdir -p "$OUTPUT_BASE_DIR"
|
||||
if [ $? -ne 0 ]; then ui_show_message "Ошибка" "Не удалось создать каталог."; return; fi
|
||||
else
|
||||
ui_show_message "Отмена" "Операция отменена."; return
|
||||
fi
|
||||
fi
|
||||
|
||||
# Шаг 2: Запускаем dialog в конвейере.
|
||||
# Вся логика теперь находится внутри блока {...} для чистоты.
|
||||
{
|
||||
local total_files=${#FILE_TRIPLETS[@]}
|
||||
local current_file_num=0
|
||||
|
||||
# Шаг 3: Используем цикл while с read для надежного разбора каждой строки
|
||||
# Это более надежно, чем итерация по массиву сложных строк
|
||||
while IFS=$'\t' read -r video audio output; do
|
||||
# Увеличиваем счетчик В НАЧАЛЕ
|
||||
((current_file_num++))
|
||||
|
||||
# Рассчитываем прогресс ДО начала работы
|
||||
local progress_before=$(( ((current_file_num - 1) * 100) / total_files ))
|
||||
|
||||
# Обновляем текст и шкалу ПЕРЕД началом работы
|
||||
echo "$progress_before"
|
||||
echo -e "XXX\n($current_file_num/$total_files) Обработка:\n$(basename "$video")\nXXX"
|
||||
|
||||
# Шаг 4: Выполняем работу. Вывод полностью скрываем.
|
||||
case "$CURRENT_ACTION" in
|
||||
"MERGE")
|
||||
action_merge_mkv "$video" "$audio" "$output" >/dev/null 2>&1 ;;
|
||||
"SYMLINK")
|
||||
action_create_symlink "$video" "$output" >/dev/null 2>&1 ;;
|
||||
esac
|
||||
|
||||
done < <(printf "%s\n" "${FILE_TRIPLETS[@]}") # Превращаем массив в поток строк для read
|
||||
|
||||
# Шаг 5: Финальное обновление до 100%
|
||||
echo "100"
|
||||
echo -e "XXX\nГотово!\nНажмите Enter\nXXX"
|
||||
sleep 2
|
||||
|
||||
} | dialog "${DIALOG_OPTS[@]}" --title "Выполнение..." --gauge "Подготовка..." 10 70 0
|
||||
clear
|
||||
}
|
||||
Reference in New Issue
Block a user