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

152 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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+.
```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