master
Sergey Marinkevich 5 months ago
parent 21ddbab08b
commit e0947a405d

@ -4,30 +4,36 @@
# Модуль действий: выполнение mkvmerge, создание симлинков и т.д.
#==============================================================================
# --- ИЗМЕНЕННАЯ ФУНКЦИЯ ---
action_merge_mkv() {
local video_file="$1"
local audio_file="$2"
local output_file="$3"
# Переименуем переменную для ясности
local final_output_file="$3"
# Мы больше не выводим echo здесь, так как это будет скрыто.
# Команда выполняется "молча". Ошибки в stderr все равно будут видны.
# Теперь команда состоит из двух частей, соединенных '&&'.
# Это означает, что вторая команда (mv) выполнится ТОЛЬКО В ТОМ СЛУЧАЕ,
# если первая команда (mkvmerge) завершится успешно (с кодом выхода 0).
#
# 1. mkvmerge собирает результат во временный файл (TEMP_MERGE_FILE).
# 2. mv атомарно перемещает готовый файл в конечный каталог.
mkvmerge \
-o "$output_file" \
-o "$TEMP_MERGE_FILE" \
--track-order 1:0,0:0 \
--language 0:rus "$audio_file" \
"$video_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 "Запуск" "Нет файлов для обработки."
@ -50,36 +56,28 @@ run_processing() {
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
done < <(printf "%s\n" "${FILE_TRIPLETS[@]}")
# Шаг 5: Финальное обновление до 100%
echo "100"
echo -e "XXX\nГотово!\nНажмите Enter\nXXX"
sleep 2

@ -15,6 +15,10 @@ DEFAULT_ROOT_PATH="/var/www/nextcloud/data/grayhook/files/"
DEFAULT_TORRENTS_DIR="${DEFAULT_ROOT_PATH}/Torrents"
DEFAULT_ARCHIVE_DIR="${DEFAULT_ROOT_PATH}/Archive/Anime"
# Путь к временному файлу для mkvmerge.
# Рекомендуется использовать путь в tmpfs (/tmp) или на быстром диске (NVMe).
TEMP_MERGE_FILE="/tmp/tmp.mkv"
# --- Переменные состояния ---
# ... (все переменные состояния остаются без изменений)
VIDEO_SRC_DIR=""

Loading…
Cancel
Save