1
1
Files
audio-catalyst/cmd/main.go

121 lines
3.7 KiB
Go

package main
import (
"log"
"audio-catalyst/internal/application/usecases"
"audio-catalyst/internal/domain/entities"
"audio-catalyst/internal/domain/repositories"
"audio-catalyst/internal/infrastructure/config"
"audio-catalyst/internal/infrastructure/filesystem"
"audio-catalyst/internal/infrastructure/logging"
"audio-catalyst/internal/infrastructure/rutracker"
"audio-catalyst/internal/presentation/tui"
)
func main() {
// Загрузка конфигурации
configRepo := config.NewRepository()
appConfig, err := configRepo.Load("config.yaml")
if err != nil {
log.Fatalf("Ошибка загрузки конфигурации: %v", err)
}
// Инициализация базового логгера (в файл)
fileLogger, err := logging.NewFileLogger(
appConfig.Output.LogFileName,
appConfig.Output.LogLevel,
appConfig.Output.LogMaxSizeMB,
appConfig.Output.LogToFile,
)
if err != nil {
log.Printf("Предупреждение: не удалось инициализировать логгер: %v", err)
}
if fileLogger != nil {
defer fileLogger.Close()
}
// Инициализация TUI
tuiManager := tui.NewManager()
tuiManager.Initialize()
// Оборачиваем логгер адаптером, чтобы видеть логи в TUI
var logger repositories.Logger
logger = tui.NewUILogger(fileLogger, tuiManager)
// Инициализация репозиториев
fsRepo := filesystem.NewRepository()
rutrackerRepo, err := rutracker.NewRepository(
appConfig.RuTracker.Username,
appConfig.RuTracker.Password,
)
if err != nil {
log.Fatalf("Ошибка создания RuTracker репозитория: %v", err)
}
defer rutrackerRepo.Close()
// Инициализация use case
processUseCase := usecases.NewProcessAudioBooksUseCase(
fsRepo,
rutrackerRepo,
logger,
)
// Подключаем репортер прогресса к TUI
processUseCase.SetProgressReporter(func(s entities.ProcessingStatus) {
tuiManager.SendStatusUpdate(s)
})
// Создание процессора для обработки команд
processor := &ApplicationProcessor{
processUseCase: processUseCase,
config: appConfig,
tuiManager: tuiManager,
logger: logger,
}
// Привязываем запуск обработки к TUI
tuiManager.SetOnStartProcessing(func() {
processor.StartProcessing()
})
// Запуск обработчика команд в горутине
go processor.HandleCommands()
// Запуск TUI
if err := tuiManager.Run(); err != nil {
log.Fatalf("Ошибка запуска TUI: %v", err)
}
}
// ApplicationProcessor обрабатывает команды приложения
type ApplicationProcessor struct {
processUseCase *usecases.ProcessAudioBooksUseCase
config *entities.Config
tuiManager *tui.Manager
logger repositories.Logger
}
// HandleCommands обрабатывает команды от пользователя
func (p *ApplicationProcessor) HandleCommands() {
// Пока оставим пустым — команды приходят через UI callbacks
}
// StartProcessing запускает обработку аудиокниг
func (p *ApplicationProcessor) StartProcessing() {
if p.logger != nil {
p.logger.Info("Запуск обработки аудиокниг...")
}
// Запускаем обработку (репортинг прогресса выполняет use case)
if err := p.processUseCase.Execute(p.config); err != nil {
if p.logger != nil {
p.logger.Error("Ошибка обработки: %v", err)
}
return
}
if p.logger != nil {
p.logger.Success("Обработка аудиокниг завершена успешно")
}
}