Files
GenAudioBookInfo/internal/domain/torrent.go
Dmitriy Fofanov 402ce7f4f1 Функция: реализованы консольный логгер и презентер для обработки аудиокниг
- Добавлен ConsoleLogger для подробного логирования этапов обработки аудиокниг в консоли.

- Введен ConsolePresenter для форматированного вывода результатов сканирования в консоль.

- Создан ProcessAudioBooksUseCase для обработки полного конвейера обработки аудиокниг, включая сканирование папок, извлечение метаданных, поиск торрентов и запись результатов.

- Реализована проверка LLM для улучшения метаданных.

- Добавлена ​​обработка ошибок и логирование на всех этапах обработки.
2026-02-20 00:35:43 +03:00

132 lines
4.9 KiB
Go
Raw 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.
package domain
// TorrentSearchResult — результат поиска по одному трекеру.
type TorrentSearchResult struct {
Name string `json:"Name"`
ID string `json:"Id"`
URL string `json:"Url"`
Torrent string `json:"Torrent"`
Size string `json:"Size"`
DownloadCount string `json:"Download_Count,omitempty"`
Checked string `json:"Checked,omitempty"`
Category string `json:"Category"`
Seeds string `json:"Seeds"`
Peers string `json:"Peers"`
Date string `json:"Date"`
Comments string `json:"Comments,omitempty"`
Time string `json:"Time,omitempty"`
Title string `json:"Title,omitempty"`
OriginalName string `json:"Original_Name,omitempty"`
Year string `json:"Year,omitempty"`
Language string `json:"Language,omitempty"`
Format string `json:"Format,omitempty"`
}
// TorrentNoResult — ответ трекера «ничего не найдено».
type TorrentNoResult struct {
Result string `json:"Result"`
}
// TorrentDetailFile — файл внутри раздачи.
type TorrentDetailFile struct {
Name string `json:"Name"`
Size string `json:"Size"`
}
// TorrentDetail — детальная информация о раздаче (второй запрос).
type TorrentDetail struct {
Name string `json:"Name"`
URL string `json:"Url"`
Hash string `json:"Hash"`
Magnet string `json:"Magnet"`
Torrent string `json:"Torrent"`
IMDbLink string `json:"IMDb_link"`
KinopoiskLink string `json:"Kinopoisk_link"`
IMDbID string `json:"IMDb_id"`
KinopoiskID string `json:"Kinopoisk_id"`
Year string `json:"Year"`
Release string `json:"Release"`
Type string `json:"Type"`
Duration string `json:"Duration"`
Audio string `json:"Audio"`
Language string `json:"Language"`
Directer string `json:"Directer"`
Actors string `json:"Actors"`
Description string `json:"Description"`
Quality string `json:"Quality"`
Video string `json:"Video"`
Poster string `json:"Poster"`
Files []TorrentDetailFile `json:"Files"`
}
// TrackerName — тип для имён трекеров с определённым порядком обхода.
type TrackerName string
const (
TrackerRuTracker TrackerName = "RuTracker"
TrackerKinozal TrackerName = "Kinozal"
TrackerNoNameClub TrackerName = "NoNameClub"
TrackerRuTor TrackerName = "RuTor"
)
// TrackerPriority — порядок обхода трекеров.
var TrackerPriority = []TrackerName{
TrackerRuTracker,
TrackerKinozal,
TrackerNoNameClub,
TrackerRuTor,
}
// TrackerAPIPath — путь API для второго запроса по трекеру.
var TrackerAPIPath = map[TrackerName]string{
TrackerRuTracker: "rutracker",
TrackerKinozal: "kinozal",
TrackerNoNameClub: "nonamclub",
TrackerRuTor: "rutor",
}
// EnrichedBookInfo — итоговая обогащённая информация об аудиокниге.
type EnrichedBookInfo struct {
AudioBook *AudioBookInfo
Detail *TorrentDetail
TrackerName TrackerName
DestFolder string // путь к папке назначения
Processed bool // успешно обработана
ErrorMessage string // сообщение об ошибке
}
// BookMetadata — JSON-структура файла metadata.json.
type BookMetadata struct {
Tags []string `json:"tags"`
Chapters []ChapterInfo `json:"chapters"`
Title string `json:"title"`
Subtitle string `json:"subtitle"`
Authors []string `json:"authors"`
Narrators []string `json:"narrators"`
Series []string `json:"series"`
Genres []string `json:"genres"`
PublishedYear string `json:"publishedYear"`
PublishedDate string `json:"publishedDate"`
Publisher string `json:"publisher"`
Description string `json:"description"`
ISBN string `json:"isbn"`
ASIN string `json:"asin"`
Language string `json:"language"`
Explicit bool `json:"explicit"`
Abridged bool `json:"abridged"`
}
// ChapterInfo — информация о главе.
type ChapterInfo struct {
ID int `json:"id"`
Start float64 `json:"start"`
End float64 `json:"end"`
Title string `json:"title"`
}
// ProcessResult — результат полной обработки одной аудиокниги.
type ProcessResult struct {
Book *EnrichedBookInfo
Err error
}