Пропускать серии, которые уже лежат в каталоге вывода.
Повторный запуск после докачки сезона не должен заново склеивать старые файлы. VIEW помечает такие серии как пропущенные. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+78
-8
@@ -71,6 +71,58 @@ logic_prepare_file_lists() {
|
||||
done
|
||||
fi
|
||||
|
||||
logic_check_output_paths || return 1
|
||||
return 0
|
||||
}
|
||||
|
||||
# Уже готовый результат: обычный файл или симлинк (в том числе битый).
|
||||
# Каталог сюда не входит: это не серия, а ошибка пути.
|
||||
output_file_exists() {
|
||||
local path="$1"
|
||||
[[ -f "$path" || -L "$path" ]]
|
||||
}
|
||||
|
||||
# Одинаковые имена и путь-каталог ломают пропуск: вторая серия увидела бы
|
||||
# файл, созданный первой, и отчёт засчитал бы её как уже готовую.
|
||||
logic_check_output_paths() {
|
||||
local -A seen=()
|
||||
local triplet video audio output
|
||||
local -a dir_errors=()
|
||||
local -a dup_errors=()
|
||||
|
||||
for triplet in "${FILE_TRIPLETS[@]}"; do
|
||||
IFS=$'\t' read -r video audio output <<< "$triplet"
|
||||
if [[ -d "$output" && ! -L "$output" ]]; then
|
||||
dir_errors+=("$(basename "$video") → $output")
|
||||
continue
|
||||
fi
|
||||
if [[ -n ${seen["$output"]+x} ]]; then
|
||||
dup_errors+=("$(basename "${seen[$output]}") и $(basename "$video") → $(basename "$output")")
|
||||
else
|
||||
seen["$output"]="$video"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ ${#dir_errors[@]} -gt 0 ]; then
|
||||
local text="Путь вывода указывает на каталог, а не на файл:\n\n"
|
||||
local line
|
||||
for line in "${dir_errors[@]}"; do
|
||||
text+="$line\n"
|
||||
done
|
||||
ui_show_message "Ошибка" "$text"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ ${#dup_errors[@]} -gt 0 ]; then
|
||||
local text="Несколько серий получают одно и то же имя:\n\n"
|
||||
local line
|
||||
for line in "${dup_errors[@]}"; do
|
||||
text+="$line\n"
|
||||
done
|
||||
ui_show_message "Ошибка" "$text"
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
@@ -105,22 +157,40 @@ logic_show_preview() {
|
||||
return
|
||||
fi
|
||||
|
||||
local preview_text="РЕЖИМ: $CURRENT_ACTION\nБудут обработаны следующие файлы (${#FILE_TRIPLETS[@]} шт.):\n\n"
|
||||
local body=""
|
||||
local count=1
|
||||
local skip_count=0
|
||||
for triplet in "${FILE_TRIPLETS[@]}"; do
|
||||
IFS=$'\t' read -r video audio output <<< "$triplet"
|
||||
preview_text+="$(printf "%02d" $count). \n"
|
||||
body+="$(printf "%02d" $count). \n"
|
||||
|
||||
local exists=false
|
||||
if output_file_exists "$output"; then
|
||||
exists=true
|
||||
skip_count=$((skip_count + 1))
|
||||
fi
|
||||
|
||||
if [ "$CURRENT_ACTION" == "MERGE" ]; then
|
||||
preview_text+=" \ZbВИДЕО:\Zn $(basename "$video")\n"
|
||||
preview_text+=" \ZbАУДИО:\Zn $(basename "$audio")\n"
|
||||
preview_text+=" \Zb-> ВЫВОД:\Zn $(basename "$output")\n\n"
|
||||
body+=" \ZbВИДЕО:\Zn $(basename "$video")\n"
|
||||
body+=" \ZbАУДИО:\Zn $(basename "$audio")\n"
|
||||
body+=" \Zb-> ВЫВОД:\Zn $(basename "$output")\n"
|
||||
else # SYMLINK
|
||||
preview_text+=" \ZbИСТОЧНИК:\Zn $(basename "$video")\n"
|
||||
preview_text+=" \Zb-> ССЫЛКА:\Zn $(basename "$output")\n\n"
|
||||
body+=" \ZbИСТОЧНИК:\Zn $(basename "$video")\n"
|
||||
body+=" \Zb-> ССЫЛКА:\Zn $(basename "$output")\n"
|
||||
fi
|
||||
((count++))
|
||||
|
||||
if $exists; then
|
||||
body+=" \Z3ПРОПУСК:\Zn операция пропущена — файл уже есть\n\n"
|
||||
else
|
||||
body+="\n"
|
||||
fi
|
||||
count=$((count + 1))
|
||||
done
|
||||
|
||||
local pending=$((${#FILE_TRIPLETS[@]} - skip_count))
|
||||
local preview_text="РЕЖИМ: $CURRENT_ACTION\n"
|
||||
preview_text+="К обработке: $pending, пропуск (уже есть): $skip_count\n\n"
|
||||
preview_text+="$body"
|
||||
|
||||
ui_show_message "Предпросмотр" "$preview_text"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user