Функция: реализованы консольный логгер и презентер для обработки аудиокниг
- Добавлен ConsoleLogger для подробного логирования этапов обработки аудиокниг в консоли. - Введен ConsolePresenter для форматированного вывода результатов сканирования в консоль. - Создан ProcessAudioBooksUseCase для обработки полного конвейера обработки аудиокниг, включая сканирование папок, извлечение метаданных, поиск торрентов и запись результатов. - Реализована проверка LLM для улучшения метаданных. - Добавлена обработка ошибок и логирование на всех этапах обработки.
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user