diff --git a/.convert_demon_slayer-tv4.sh.swp b/.convert_demon_slayer-tv4.sh.swp deleted file mode 100644 index 98f4bdf..0000000 Binary files a/.convert_demon_slayer-tv4.sh.swp and /dev/null differ diff --git a/gemini/.core_actions.sh.swp b/gemini/.core_actions.sh.swp deleted file mode 100644 index 72f990f..0000000 Binary files a/gemini/.core_actions.sh.swp and /dev/null differ diff --git a/gemini/.core_logic.sh.swp b/gemini/.core_logic.sh.swp deleted file mode 100644 index cb43ebc..0000000 Binary files a/gemini/.core_logic.sh.swp and /dev/null differ diff --git a/gemini/.core_ui.sh.swp b/gemini/.core_ui.sh.swp deleted file mode 100644 index e1c3de3..0000000 Binary files a/gemini/.core_ui.sh.swp and /dev/null differ diff --git a/gemini/.universal_merger.sh.swp b/gemini/.universal_merger.sh.swp deleted file mode 100644 index 28a1ccf..0000000 Binary files a/gemini/.universal_merger.sh.swp and /dev/null differ diff --git a/gemini/core_actions.sh b/gemini/core_actions.sh index 8ce53dd..f7551a2 100644 --- a/gemini/core_actions.sh +++ b/gemini/core_actions.sh @@ -1,6 +1,45 @@ #!/bin/bash -# ... (action_merge_mkv и action_create_symlink без изменений) ... +# ... (начало файла и функции action_* без изменений) ... +action_merge_mkv() { + local video_file="$1" + local audio_file="$2" + local output_file="$3" + echo "---" + echo "ИСХОДНОЕ ВИДЕО : $video_file" + echo "ИСХОДНОЕ АУДИО : $audio_file" + echo "РЕЗУЛЬТАТ : $output_file" + + mkvmerge \ + -o "$output_file" \ + --language 0:und "$video_file" \ + --language 1:rus "$audio_file" + + if [ $? -eq 0 ]; then + echo "УСПЕХ: Файл создан." + else + echo "ОШИБКА: mkvmerge завершился с ошибкой." + fi + echo +} + +action_create_symlink() { + local video_file="$1" + local output_file="$2" + + echo "---" + echo "ИСТОЧНИК: $video_file" + echo "ССЫЛКА : $output_file" + + ln -s "$video_file" "$output_file" + + if [ $? -eq 0 ]; then + echo "УСПЕХ: Ссылка создана." + else + echo "ОШИБКА: Не удалось создать ссылку." + fi + echo +} # Главная функция запуска обработки run_processing() { if ! logic_prepare_file_lists; then return 1; fi @@ -9,7 +48,6 @@ run_processing() { return fi - # Больше не спрашиваем, а используем CURRENT_ACTION local confirmation_text="Вы уверены, что хотите выполнить '${CURRENT_ACTION}' для ${#FILE_TRIPLETS[@]} файлов?\n\n" confirmation_text+="Результаты будут сохранены в:\n$OUTPUT_BASE_DIR" if ! ui_confirm "Финальное подтверждение" "$confirmation_text"; then @@ -34,16 +72,18 @@ run_processing() { for triplet in "${FILE_TRIPLETS[@]}"; do progress=$(( 100 * current_file / total_files )) echo "$progress" - echo -e "XXX\n$((current_file + 1)) / $total_files\n$(basename "$triplet" | cut -f1 -d$'\t')\nXXX" + + # --- ИСПРАВЛЕНИЕ ЗДЕСЬ: БОЛЕЕ НАДЕЖНЫЙ СПОСОБ ПОЛУЧИТЬ ИМЯ ФАЙЛА --- + local video_for_display + IFS=$'\t' read -r video_for_display _ _ <<< "$triplet" + echo -e "XXX\n$((current_file + 1)) / $total_files\nОбработка: $(basename "$video_for_display")\nXXX" IFS=$'\t' read -r video audio output <<< "$triplet" - # Выполняем заранее выбранное действие case "$CURRENT_ACTION" in "MERGE") action_merge_mkv "$video" "$audio" "$output" ;; "SYMLINK") - # Для симлинка аудио-файл не нужен action_create_symlink "$video" "$output" ;; esac diff --git a/gemini/core_logic.sh b/gemini/core_logic.sh index 012e366..aa3f053 100644 --- a/gemini/core_logic.sh +++ b/gemini/core_logic.sh @@ -14,7 +14,6 @@ logic_prepare_file_lists() { common_params_ok=false fi - # 1. Находим видеофайлы (это нужно для обоих режимов) local video_list_raw if $common_params_ok; then mapfile -d '' video_list_raw < <(find "$VIDEO_SRC_DIR" -maxdepth 1 -name "$VIDEO_FILE_PATTERN" -print0 | sort -z) @@ -42,7 +41,6 @@ logic_prepare_file_lists() { return 1 fi - # Собираем триплеты for i in "${!video_list_raw[@]}"; do local video_file="${video_list_raw[$i]}" local audio_file="${audio_list_raw[$i]}" @@ -62,11 +60,14 @@ logic_prepare_file_lists() { return 1 fi - # Собираем пары (аудио-поле оставляем пустым) for video_file in "${video_list_raw[@]}"; do local output_path output_path=$(logic_generate_output_name "$video_file") || return 1 - FILE_TRIPLETS+=("$video_file"$'\t\t'"$output_path") + + # --- ИСПРАВЛЕНИЕ ЗДЕСЬ: ИСПОЛЬЗУЕМ ЯВНЫЙ ЗАПОЛНИТЕЛЬ --- + # Это гарантирует, что `read` всегда увидит три поля. + local placeholder="__SYMLINK_AUDIO_PLACEHOLDER__" + FILE_TRIPLETS+=("$video_file"$'\t'"$placeholder"$'\t'"$output_path") done fi @@ -96,7 +97,7 @@ logic_generate_output_name() { fi } -# Предпросмотр тоже адаптируется к режиму +# Предпросмотр теперь будет работать правильно logic_show_preview() { if ! logic_prepare_file_lists; then return 1; fi if [ ${#FILE_TRIPLETS[@]} -eq 0 ]; then