Добавить тесты репозитория файловой системы и реализовать функциональность журналирования файлов.
- Реализовать тесты для поиска MP3-файлов и переименования/организации папок книг в репозитории файловой системы. - Создать FileLogger для записи сообщений в файл с поддержкой различных уровней журналирования и управления размером файлов. - Разработать репозиторий RuTracker для обработки поиска торрентов, получения метаданных и загрузки торрент-файлов. - Добавить тесты для нормализации URL в репозиторий RuTracker. - Реализовать адаптер логгера TUI для отображения логов в терминальном интерфейсе и, при необходимости, для записи логов в базовый логгер. - Создать менеджер TUI для управления пользовательским интерфейсом приложения, включая главное меню, экран обработки, настройки и отображение результатов.
This commit is contained in:
151
README.md
151
README.md
@@ -1,2 +1,151 @@
|
||||
# audio-catalyst
|
||||
# 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
|
||||
|
||||
Reference in New Issue
Block a user