1
1
Files
audio-catalyst/README.md
Dmitriy Fofanov 72a66f1664 Добавить тесты репозитория файловой системы и реализовать функциональность журналирования файлов.
- Реализовать тесты для поиска MP3-файлов и переименования/организации папок книг в репозитории файловой системы.
- Создать FileLogger для записи сообщений в файл с поддержкой различных уровней журналирования и управления размером файлов.
- Разработать репозиторий RuTracker для обработки поиска торрентов, получения метаданных и загрузки торрент-файлов.
- Добавить тесты для нормализации URL в репозиторий RuTracker.
- Реализовать адаптер логгера TUI для отображения логов в терминальном интерфейсе и, при необходимости, для записи логов в базовый логгер.
- Создать менеджер TUI для управления пользовательским интерфейсом приложения, включая главное меню, экран обработки, настройки и отображение результатов.
2025-09-29 20:40:05 +03:00

7.1 KiB
Raw Permalink Blame History

AudioBook Catalyst

AudioBook Catalyst — утилита для автоматической обработки аудиокниг: поиск метаданных на RuTracker, формирование глав, скачивание обложек, сохранение metadata.json и организация папок библиотеки.

Возможности

  • Сканирование директории с аудиокнигами (MP3).
  • Поиск и парсинг метаданных со страниц RuTracker.
  • Извлечение полей: Title, Subtitle, Authors, Narrators, Series, Genres, Year, Publisher, Description, Chapters, Tags.
  • Корректный парсинг заголовка из <span style="font-size: 24px"> и подзаголовка из <title> без хвостов 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+.

# Клонируйте репозиторий и перейдите в папку проекта
# Установите зависимости
make deps
# Сборка
make build
# Запуск
make run

Если не используете Makefile, можно собрать так:

$env:GOOS='windows'; $env:GOARCH='amd64'; $env:CGO_ENABLED='1'; go build -o audio-catalyst.exe ./cmd
./audio-catalyst.exe

Конфигурация

Файл config.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.

Тестирование

make test

Покрыты тестами:

  • domain/services: главы, очистка титулов, парсинг заголовков/серии/тегов.
  • infrastructure/rutracker: нормализация URL.
  • infrastructure/filesystem: поиск MP3, переименование и организация папок.
  • application/usecases: сквозные сценарии (пропуск, успешный путь).

Покрытие:

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