You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
5.4 KiB
Bash

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/bin/bash
#==============================================================================
# Универсальный скрипт для обработки медиафайлов с TUI-интерфейсом
#==============================================================================
# --- Подключение модулей ---
# Убедимся, что скрипты-модули находятся в том же каталоге
SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd)
source "$SCRIPT_DIR/core_ui.sh"
source "$SCRIPT_DIR/core_logic.sh"
source "$SCRIPT_DIR/core_actions.sh"
# --- Конфигурация по умолчанию (можно менять) ---
# Эти пути будут предлагаться по умолчанию в диалогах выбора
DEFAULT_ROOT_PATH="/var/www/nextcloud/data/grayhook/files/"
DEFAULT_TORRENTS_DIR="${DEFAULT_ROOT_PATH}/Torrents"
DEFAULT_ARCHIVE_DIR="${DEFAULT_ROOT_PATH}/Archive/Anime"
# --- Переменные состояния (будут меняться через интерфейс) ---
VIDEO_SRC_DIR=""
AUDIO_SRC_DIR=""
OUTPUT_BASE_DIR=""
OUTPUT_SERIES_NAME=""
SEASON_NUMBER="01"
# Паттерны для поиска файлов (можно использовать find-совместимые wildcards)
VIDEO_FILE_PATTERN="*.mkv"
AUDIO_FILE_PATTERN="*.mka"
# Регулярное выражение для извлечения номера серии из ИМЕНИ ВИДЕОФАЙЛА
# Использует синтаксис ERE (sed -E). Группа захвата (в скобках) должна поймать номер.
EPISODE_NUMBER_REGEX='.* ([0-9]{2}) .*'
# Шаблон для имени выходного файла. Заполнители будут заменены.
# {SERIES_NAME} - Имя сериала
# {SEASON} - Номер сезона (с ведущим нулём)
# {EPISODE} - Номер эпизода (с ведущим нулём, извлечённый regex'ом)
OUTPUT_FILENAME_TEMPLATE="{SERIES_NAME} s{SEASON}e{EPISODE}.mkv"
# --- Главный цикл программы ---
main() {
while true; do
# Формируем пункты меню с текущими значениями
menu_items=(
"V" "Видео каталог : ${VIDEO_SRC_DIR:-_не задан_}"
"A" "Аудио каталог : ${AUDIO_SRC_DIR:-_не задан_}"
"O" "Выходной каталог : ${OUTPUT_BASE_DIR:-_не задан_}"
"N" "Имя для Plex : ${OUTPUT_SERIES_NAME:-_не задано_}"
"S" "Номер сезона : $SEASON_NUMBER"
"" "--- Шаблоны и Regex ---"
"P" "Шаблон видеофайлов : $VIDEO_FILE_PATTERN"
"U" "Шаблон аудиофайлов : $AUDIO_FILE_PATTERN"
"R" "Regex номера серии : $EPISODE_NUMBER_REGEX"
"T" "Шаблон имени вывода : $OUTPUT_FILENAME_TEMPLATE"
"" "--- Действия ---"
"VIEW" "Предпросмотр сопоставления файлов"
"RUN" "ЗАПУСТИТЬ обработку"
)
choice=$(ui_main_menu "${menu_items[@]}")
# Выход из скрипта по кнопке Cancel или Esc
if [[ -z "$choice" ]]; then
clear
echo "Выход."
break
fi
case "$choice" in
V) VIDEO_SRC_DIR=$(ui_get_directory "Выберите каталог с видеофайлами" "$VIDEO_SRC_DIR" "$DEFAULT_TORRENTS_DIR") ;;
A) AUDIO_SRC_DIR=$(ui_get_directory "Выберите каталог с аудиофайлами" "$AUDIO_SRC_DIR" "$VIDEO_SRC_DIR") ;;
O) OUTPUT_BASE_DIR=$(ui_get_directory "Выберите БАЗОВЫЙ каталог для результата" "$OUTPUT_BASE_DIR" "$DEFAULT_ARCHIVE_DIR") ;;
N) OUTPUT_SERIES_NAME=$(ui_get_input "Введите имя сериала для Plex" "$OUTPUT_SERIES_NAME") ;;
S) SEASON_NUMBER=$(ui_get_input "Введите номер сезона (например, 01, 02)" "$SEASON_NUMBER") ;;
P) VIDEO_FILE_PATTERN=$(ui_get_input "Введите шаблон для поиска видео (*.mkv, *ep*.mkv)" "$VIDEO_FILE_PATTERN") ;;
U) AUDIO_FILE_PATTERN=$(ui_get_input "Введите шаблон для поиска аудио (*.mka, *.ac3)" "$AUDIO_FILE_PATTERN") ;;
R) EPISODE_NUMBER_REGEX=$(ui_get_input "Введите ERE-regex для номера серии" "$EPISODE_NUMBER_REGEX") ;;
T) OUTPUT_FILENAME_TEMPLATE=$(ui_get_input "Введите шаблон имени выходного файла" "$OUTPUT_FILENAME_TEMPLATE") ;;
VIEW)
# Вызываем предпросмотр
logic_show_preview
;;
RUN)
# Вызываем меню выбора действия и запускаем обработку
run_processing
;;
esac
done
}
# --- Точка входа ---
# Проверка наличия dialog
if ! command -v dialog &> /dev/null; then
echo "Команда 'dialog' не найдена. Пожалуйста, установите ее."
echo "sudo apt-get install dialog (Debian/Ubuntu)"
exit 1
fi
main