Добавить функциональность репортинга прогресса обработки аудиокниг и экран конфигурации
This commit is contained in:
@@ -16,6 +16,8 @@ type ProcessAudioBooksUseCase struct {
|
||||
logger repositories.Logger
|
||||
audioBookSvc *services.AudioBookService
|
||||
metadataSvc *services.MetadataService
|
||||
// Репортер прогресса
|
||||
progress func(entities.ProcessingStatus)
|
||||
}
|
||||
|
||||
// NewProcessAudioBooksUseCase создает новый use case
|
||||
@@ -33,6 +35,11 @@ func NewProcessAudioBooksUseCase(
|
||||
}
|
||||
}
|
||||
|
||||
// SetProgressReporter задает функцию репортинга прогресса
|
||||
func (uc *ProcessAudioBooksUseCase) SetProgressReporter(f func(entities.ProcessingStatus)) {
|
||||
uc.progress = f
|
||||
}
|
||||
|
||||
// Execute выполняет обработку аудиокниг
|
||||
func (uc *ProcessAudioBooksUseCase) Execute(config *entities.Config) error {
|
||||
uc.logger.Info("🚀 Начало процесса обработки аудиокниг")
|
||||
@@ -42,35 +49,58 @@ func (uc *ProcessAudioBooksUseCase) Execute(config *entities.Config) error {
|
||||
audioBooks, err := uc.audioBookRepo.ScanDirectory(config.Scanner.SourceDirectory)
|
||||
if err != nil {
|
||||
uc.logger.Error("❌ Критическая ошибка сканирования: %v", err)
|
||||
if uc.progress != nil {
|
||||
uc.progress(entities.ProcessingStatus{Current: 0, Total: 0, Status: "Ошибка сканирования", Error: err})
|
||||
}
|
||||
return fmt.Errorf("ошибка сканирования: %w", err)
|
||||
}
|
||||
|
||||
uc.logger.Info("📊 Найдено %d аудиокниг", len(audioBooks))
|
||||
total := len(audioBooks)
|
||||
uc.logger.Info("📊 Найдено %d аудиокниг", total)
|
||||
|
||||
if len(audioBooks) == 0 {
|
||||
if total == 0 {
|
||||
uc.logger.Warning("⚠️ Аудиокниги не найдены")
|
||||
if uc.progress != nil {
|
||||
uc.progress(entities.ProcessingStatus{Current: 0, Total: 0, Status: "Книги не найдены"})
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Сообщаем общее количество до начала обработки
|
||||
if uc.progress != nil {
|
||||
uc.progress(entities.ProcessingStatus{Current: 0, Total: total, Status: "Начинаем обработку"})
|
||||
}
|
||||
|
||||
// Авторизация в RuTracker
|
||||
if err := uc.rutrackerRepo.Login(); err != nil {
|
||||
uc.logger.Error("❌ Ошибка авторизации в RuTracker: %v", err)
|
||||
if uc.progress != nil {
|
||||
uc.progress(entities.ProcessingStatus{Current: 0, Total: total, Status: "Ошибка авторизации", Error: err})
|
||||
}
|
||||
return fmt.Errorf("ошибка авторизации: %w", err)
|
||||
}
|
||||
uc.logger.Success("✅ Авторизация в RuTracker успешна")
|
||||
|
||||
// Обработка каждой аудиокниги
|
||||
for i, book := range audioBooks {
|
||||
uc.logger.Info("📋 Обработка книги %d/%d: \"%s\"", i+1, len(audioBooks), book.Title)
|
||||
uc.logger.Info("📋 Обработка книги %d/%d: \"%s\"", i+1, total, book.Title)
|
||||
|
||||
if err := uc.processAudioBook(book); err != nil {
|
||||
uc.logger.Error("❌ Ошибка обработки книги \"%s\": %v", book.Title, err)
|
||||
continue
|
||||
}
|
||||
|
||||
// Увеличиваем прогресс после завершения обработки книги (успешно или нет)
|
||||
if uc.progress != nil {
|
||||
uc.progress(entities.ProcessingStatus{Current: i + 1, Total: total, Status: fmt.Sprintf("Готово %d/%d", i+1, total)})
|
||||
}
|
||||
|
||||
uc.logger.Success("✅ Книга \"%s\" обработана", book.Title)
|
||||
}
|
||||
|
||||
if uc.progress != nil {
|
||||
uc.progress(entities.ProcessingStatus{Current: total, Total: total, Status: "Обработка завершена"})
|
||||
}
|
||||
|
||||
uc.logger.Success("🎉 Обработка завершена успешно!")
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user