# AudioBook Catalyst AudioBook Catalyst — утилита для автоматической обработки аудиокниг: поиск метаданных на RuTracker, формирование глав, скачивание обложек, сохранение metadata.json и организация папок библиотеки. ## Возможности - Сканирование директории с аудиокнигами (MP3). - Поиск и парсинг метаданных со страниц RuTracker. - Извлечение полей: Title, Subtitle, Authors, Narrators, Series, Genres, Year, Publisher, Description, Chapters, Tags. - Корректный парсинг заголовка из `` и подзаголовка из `` без хвостов `RuTracker.org`. - Скачивание обложки и сохранение `cover.jpg/png`. - Автоматическое создание глав по MP3-файлам с примерной длительностью, стартами/финишами. - Переименование папки книги по подзаголовку и перенос в организованную библиотеку: `organized/<Буква>/<Автор>/<Книга>`. - TUI-интерфейс на базе tview. - Логи в TUI и файл. ## Структура проекта ``` internal/ application/ usecases/ # Процессы: обработка аудиокниг domain/ entities/ # Сущности: AudioBook, AudioBookMetadata, Torrent, ... repositories/ # Интерфейсы репозиториев (FS, RuTracker, Logger) services/ # Бизнес-логика: AudioBookService, MetadataService infrastructure/ config/ # Репозиторий конфигурации (YAML) filesystem/ # Репозиторий файловой системы logging/ # Логирование rutracker/ # Клиент RuTracker, парсинг страниц presentation/ tui/ # TUI интерфейс cmd/ # Точка входа приложения README.md # Это описание Makefile # Команды сборки/тестов config.yaml(.example) # Конфигурация ``` ## Установка Требуется Go 1.21+. ```powershell # Клонируйте репозиторий и перейдите в папку проекта # Установите зависимости make deps # Сборка make build # Запуск make run ``` Если не используете Makefile, можно собрать так: ```powershell $env:GOOS='windows'; $env:GOARCH='amd64'; $env:CGO_ENABLED='1'; go build -o audio-catalyst.exe ./cmd ./audio-catalyst.exe ``` ## Конфигурация Файл `config.yaml`: ```yaml scanner: source_directory: "./audiobooks" target_directory: "./organized" rutracker: base_url: "https://rutracker.org/forum/tracker.php" user_agent: "Mozilla/5.0 ..." request_delay: 2000 username: "<login>" password: "<password>" processing: parallel_workers: 3 timeout_seconds: 30 retry_attempts: 3 output: log_level: "debug" progress_bar: true log_to_file: true log_file_name: "audio-catalyst.log" log_max_size_mb: 2 ``` - `scanner.source_directory` — директория с исходными аудиокнигами. - `scanner.target_directory` — корень организованной библиотеки. ## Запуск - Запустите приложение `audio-catalyst.exe`. - В TUI выберите «Начать обработку аудиокниг». Процесс: 1) Сканирование `source_directory` — поиск папок, где есть MP3. 2) Поиск на RuTracker по имени папки, очистка названия. 3) Загрузка страницы темы, парсинг метаданных. 4) Формирование `metadata.json` и загрузка `cover.*`. 5) Переименование папки по Subtitle (без хвостов `RuTracker.org`). 6) Перенос в `target_directory/Буква/Автор/`. Если книга не найдена на RuTracker — папка пропускается. ## Правила парсинга - Title: из `<span style="font-size: 24px">`, затем нормализация (снятие префиксов автора, хвостов в скобках). - Subtitle: полный `<title>`, отрезаются окончания типа `:: RuTracker.org`. - Series: ищется в post-b «Серия», а также по шаблонам «Цикл «…»». - Tags: текст первого подходящего `viewforum.php` (снятие префикса `[Аудио]`). - Description: текст после «Описание» до `post-br` или следующего «post-b»; декодирование HTML-сущностей. - Cover: `<a:has(img)>`, `<var.postImg title=...>`, `img data-*|src`, `og:image`. ## Организация библиотеки После сохранения метаданных и обложки: - Папка переименовывается в Subtitle. - Переносится в `target_directory/<Первая буква автора>/<Фамилия Имя>/<Subtitle>`. - Имена очищаются от недопустимых для Windows символов и хвостов `RuTracker.org`. ## Тестирование ```powershell make test ``` Покрыты тестами: - domain/services: главы, очистка титулов, парсинг заголовков/серии/тегов. - infrastructure/rutracker: нормализация URL. - infrastructure/filesystem: поиск MP3, переименование и организация папок. - application/usecases: сквозные сценарии (пропуск, успешный путь). Покрытие: ```powershell make coverage start ./coverage.html ``` ## Разработка Основные команды: - `make deps` — зависимости - `make build` — сборка - `make run` — запуск - `make test` — тесты - `make coverage` — покрытие - `make fmt` / `make vet` / `make lint` ## Архитектура - Clean Architecture: слои domain/application/infrastructure/presentation. - Взаимодействие через интерфейсы репозиториев. - Use case `ProcessAudioBooksUseCase` оркестрирует процесс: - ScanDirectory → RuTracker.Login → Search → GetTopicMetadata → CreateChapters → DownloadCover → SaveMetadata → Rename → Organize. ## Известные ограничения - Оценка длительности глав приблизительная (по размеру файла). - Возможны изменения разметки RuTracker — парсер может потребовать корректировок. ## Лицензия MIT