1
1

Добавить тесты репозитория файловой системы и реализовать функциональность журналирования файлов.

- Реализовать тесты для поиска MP3-файлов и переименования/организации папок книг в репозитории файловой системы.
- Создать FileLogger для записи сообщений в файл с поддержкой различных уровней журналирования и управления размером файлов.
- Разработать репозиторий RuTracker для обработки поиска торрентов, получения метаданных и загрузки торрент-файлов.
- Добавить тесты для нормализации URL в репозиторий RuTracker.
- Реализовать адаптер логгера TUI для отображения логов в терминальном интерфейсе и, при необходимости, для записи логов в базовый логгер.
- Создать менеджер TUI для управления пользовательским интерфейсом приложения, включая главное меню, экран обработки, настройки и отображение результатов.
This commit is contained in:
Dmitriy Fofanov
2025-09-29 20:40:05 +03:00
parent 49bea780aa
commit 72a66f1664
32 changed files with 4073 additions and 22 deletions

View 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"` // в секундах
}

View 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"`
}

View 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
)

View 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
}