Добавить тесты репозитория файловой системы и реализовать функциональность журналирования файлов.
- Реализовать тесты для поиска MP3-файлов и переименования/организации папок книг в репозитории файловой системы. - Создать FileLogger для записи сообщений в файл с поддержкой различных уровней журналирования и управления размером файлов. - Разработать репозиторий RuTracker для обработки поиска торрентов, получения метаданных и загрузки торрент-файлов. - Добавить тесты для нормализации URL в репозиторий RuTracker. - Реализовать адаптер логгера TUI для отображения логов в терминальном интерфейсе и, при необходимости, для записи логов в базовый логгер. - Создать менеджер TUI для управления пользовательским интерфейсом приложения, включая главное меню, экран обработки, настройки и отображение результатов.
This commit is contained in:
41
internal/domain/entities/audiobook.go
Normal file
41
internal/domain/entities/audiobook.go
Normal file
@@ -0,0 +1,41 @@
|
||||
package entities
|
||||
|
||||
// AudioBook представляет аудиокнигу
|
||||
type AudioBook struct {
|
||||
Path string
|
||||
Title string
|
||||
MP3Files []string
|
||||
CoverFile string
|
||||
Description string
|
||||
Metadata *AudioBookMetadata
|
||||
}
|
||||
|
||||
// AudioBookMetadata метаданные аудиокниги
|
||||
type AudioBookMetadata struct {
|
||||
Tags []string `json:"tags"`
|
||||
Chapters []Chapter `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 *int `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"`
|
||||
}
|
||||
|
||||
// Chapter представляет главу аудиокниги
|
||||
type Chapter struct {
|
||||
ID int `json:"id"`
|
||||
Start float64 `json:"start"`
|
||||
End float64 `json:"end"`
|
||||
Title string `json:"title"`
|
||||
Duration int `json:"duration"` // в секундах
|
||||
}
|
||||
40
internal/domain/entities/config.go
Normal file
40
internal/domain/entities/config.go
Normal file
@@ -0,0 +1,40 @@
|
||||
package entities
|
||||
|
||||
// Config главная конфигурация приложения
|
||||
type Config struct {
|
||||
Scanner ScannerConfig `yaml:"scanner"`
|
||||
RuTracker RuTrackerConfig `yaml:"rutracker"`
|
||||
Processing ProcessingConfig `yaml:"processing"`
|
||||
Output OutputConfig `yaml:"output"`
|
||||
}
|
||||
|
||||
// ScannerConfig настройки сканирования файлов
|
||||
type ScannerConfig struct {
|
||||
SourceDirectory string `yaml:"source_directory"`
|
||||
TargetDirectory string `yaml:"target_directory"`
|
||||
}
|
||||
|
||||
// RuTrackerConfig настройки для работы с RuTracker
|
||||
type RuTrackerConfig struct {
|
||||
BaseURL string `yaml:"base_url"`
|
||||
UserAgent string `yaml:"user_agent"`
|
||||
RequestDelay int `yaml:"request_delay"`
|
||||
Username string `yaml:"username"`
|
||||
Password string `yaml:"password"`
|
||||
}
|
||||
|
||||
// ProcessingConfig настройки обработки
|
||||
type ProcessingConfig struct {
|
||||
ParallelWorkers int `yaml:"parallel_workers"`
|
||||
TimeoutSeconds int `yaml:"timeout_seconds"`
|
||||
RetryAttempts int `yaml:"retry_attempts"`
|
||||
}
|
||||
|
||||
// OutputConfig настройки вывода и логирования
|
||||
type OutputConfig struct {
|
||||
LogLevel string `yaml:"log_level"`
|
||||
ProgressBar bool `yaml:"progress_bar"`
|
||||
LogToFile bool `yaml:"log_to_file"`
|
||||
LogFileName string `yaml:"log_file_name"`
|
||||
LogMaxSizeMB int `yaml:"log_max_size_mb"`
|
||||
}
|
||||
19
internal/domain/entities/status.go
Normal file
19
internal/domain/entities/status.go
Normal file
@@ -0,0 +1,19 @@
|
||||
package entities
|
||||
|
||||
// ProcessingStatus статус обработки
|
||||
type ProcessingStatus struct {
|
||||
Current int
|
||||
Total int
|
||||
Status string
|
||||
Error error
|
||||
}
|
||||
|
||||
// UIScreen представляет экраны приложения
|
||||
type UIScreen int
|
||||
|
||||
const (
|
||||
ScreenMainMenu UIScreen = iota
|
||||
ScreenProcessing
|
||||
ScreenSettings
|
||||
ScreenResults
|
||||
)
|
||||
27
internal/domain/entities/torrent.go
Normal file
27
internal/domain/entities/torrent.go
Normal file
@@ -0,0 +1,27 @@
|
||||
package entities
|
||||
|
||||
// Torrent информация о торренте из результатов поиска
|
||||
type Torrent struct {
|
||||
ID string
|
||||
Title string
|
||||
Size string
|
||||
Seeds string
|
||||
Leeches string
|
||||
Downloads string
|
||||
TopicURL string
|
||||
DownloadURL string
|
||||
}
|
||||
|
||||
// RuTrackerResult результат поиска на RuTracker
|
||||
type RuTrackerResult struct {
|
||||
Title string
|
||||
Subtitle string
|
||||
Authors []string
|
||||
Narrators []string
|
||||
Series []string
|
||||
Year *int
|
||||
Publisher *string
|
||||
Description string
|
||||
Genres []string
|
||||
CoverURL string
|
||||
}
|
||||
Reference in New Issue
Block a user