Files
universal-merge/core_actions.sh
T
2025-07-08 17:56:26 +07:00

103 lines
3.9 KiB
Bash

#!/bin/bash
#==============================================================================
# Модуль действий: выполнение mkvmerge, создание симлинков и т.д.
#==============================================================================
# ... (функции action_merge_mkv и action_create_symlink остаются без изменений)
action_merge_mkv() {
local video_file="$1"
local audio_file="$2"
local final_output_file="$3"
mkvmerge \
-o "$TEMP_MERGE_FILE" \
--track-order 1:0,0:0 \
--language 0:rus "$audio_file" \
"$video_file" \
&& \
mv "$TEMP_MERGE_FILE" "$final_output_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: Выполнение с прогресс-баром (без изменений)
{
local total_files=${#FILE_TRIPLETS[@]}
local current_file_num=0
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"
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[@]}")
echo "100"
echo -e "XXX\nГотово!\nНажмите Enter\nXXX"
sleep 2
} | dialog "${DIALOG_OPTS[@]}" --title "Выполнение..." --gauge "Подготовка..." 10 70 0
# --- НОВЫЙ БЛОК: ФИНАЛЬНЫЙ ОТЧЕТ ---
# Шаг 3: Показываем отчет о проделанной работе
local action_text
local total_processed=${#FILE_TRIPLETS[@]}
case "$CURRENT_ACTION" in
"MERGE")
action_text="Склейка файлов завершена."
;;
"SYMLINK")
action_text="Создание символических ссылок завершено."
;;
esac
local report_message="Статус: $action_text\n\n"
report_message+="Обработано файлов: $total_processed\n"
report_message+="Результаты сохранены в:\n$OUTPUT_BASE_DIR"
ui_show_message "Отчёт о выполнении" "$report_message"
clear
}