Пропускать серии, которые уже лежат в каталоге вывода.
Повторный запуск после докачки сезона не должен заново склеивать старые файлы. VIEW помечает такие серии как пропущенные. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+53
-3
@@ -35,7 +35,31 @@ run_processing() {
|
||||
return
|
||||
fi
|
||||
|
||||
local confirmation_text="Вы уверены, что хотите выполнить '${CURRENT_ACTION}' для ${#FILE_TRIPLETS[@]} файлов?\n\n"
|
||||
local skip_count=0
|
||||
local pending_count=0
|
||||
local triplet video audio output
|
||||
# Снимок на момент старта. Файл, появившийся уже в этом запуске,
|
||||
# нельзя считать «и так был» — иначе отчёт завысит число обработанных.
|
||||
local -A ALREADY_PRESENT=()
|
||||
for triplet in "${FILE_TRIPLETS[@]}"; do
|
||||
IFS=$'\t' read -r video audio output <<< "$triplet"
|
||||
if output_file_exists "$output"; then
|
||||
ALREADY_PRESENT["$output"]=1
|
||||
skip_count=$((skip_count + 1))
|
||||
else
|
||||
pending_count=$((pending_count + 1))
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$pending_count" -eq 0 ]; then
|
||||
ui_show_message "Запуск" "Все файлы уже есть в каталоге вывода ($skip_count шт.). Обработка не требуется."
|
||||
return
|
||||
fi
|
||||
|
||||
local confirmation_text="Вы уверены, что хотите выполнить '${CURRENT_ACTION}' для ${pending_count} файлов?\n\n"
|
||||
if [ "$skip_count" -gt 0 ]; then
|
||||
confirmation_text+="Будет пропущено (уже есть): $skip_count\n\n"
|
||||
fi
|
||||
confirmation_text+="Результаты будут сохранены в:\n$OUTPUT_BASE_DIR"
|
||||
if ! ui_confirm "Финальное подтверждение" "$confirmation_text"; then
|
||||
ui_show_message "Отмена" "Операция отменена пользователем."
|
||||
@@ -52,6 +76,8 @@ run_processing() {
|
||||
fi
|
||||
|
||||
# Шаг 2: Выполнение с прогресс-баром (без изменений)
|
||||
local conflict_file
|
||||
conflict_file=$(mktemp)
|
||||
{
|
||||
local total_files=${#FILE_TRIPLETS[@]}
|
||||
local current_file_num=0
|
||||
@@ -61,6 +87,19 @@ run_processing() {
|
||||
local progress_before=$(( ((current_file_num - 1) * 100) / total_files ))
|
||||
|
||||
echo "$progress_before"
|
||||
|
||||
if [[ -n ${ALREADY_PRESENT["$output"]+x} ]]; then
|
||||
echo -e "XXX\n($current_file_num/$total_files) Пропуск (уже есть):\n$(basename "$output")\nXXX"
|
||||
continue
|
||||
fi
|
||||
|
||||
if output_file_exists "$output"; then
|
||||
printf '%s' "$output" > "$conflict_file"
|
||||
echo -e "XXX\nОшибка: имя занято во время обработки:\n$(basename "$output")\nXXX"
|
||||
sleep 1
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo -e "XXX\n($current_file_num/$total_files) Обработка:\n$(basename "$video")\nXXX"
|
||||
|
||||
case "$CURRENT_ACTION" in
|
||||
@@ -78,10 +117,18 @@ run_processing() {
|
||||
|
||||
} | dialog "${DIALOG_OPTS[@]}" --title "Выполнение..." --gauge "Подготовка..." 10 70 0
|
||||
|
||||
if [[ -s "$conflict_file" ]]; then
|
||||
local conflict_path
|
||||
conflict_path=$(cat "$conflict_file")
|
||||
rm -f "$conflict_file"
|
||||
ui_show_message "Ошибка" "Файл появился во время обработки и не входил в список уже существующих:\n$conflict_path\n\nОбработка остановлена."
|
||||
return 1
|
||||
fi
|
||||
rm -f "$conflict_file"
|
||||
|
||||
# --- НОВЫЙ БЛОК: ФИНАЛЬНЫЙ ОТЧЕТ ---
|
||||
# Шаг 3: Показываем отчет о проделанной работе
|
||||
local action_text
|
||||
local total_processed=${#FILE_TRIPLETS[@]}
|
||||
|
||||
case "$CURRENT_ACTION" in
|
||||
"MERGE")
|
||||
@@ -93,7 +140,10 @@ run_processing() {
|
||||
esac
|
||||
|
||||
local report_message="Статус: $action_text\n\n"
|
||||
report_message+="Обработано файлов: $total_processed\n"
|
||||
report_message+="Обработано файлов: $pending_count\n"
|
||||
if [ "$skip_count" -gt 0 ]; then
|
||||
report_message+="Пропущено (уже есть): $skip_count\n"
|
||||
fi
|
||||
report_message+="Результаты сохранены в:\n$OUTPUT_BASE_DIR"
|
||||
|
||||
ui_show_message "Отчёт о выполнении" "$report_message"
|
||||
|
||||
Reference in New Issue
Block a user