Files
compress/cmd/processor.go
Dmitriy Fofanov ec65cfd05a Достижение: Добавлены скрипты и документация для релиза PDF Compressor.
- Добавлен release-body.md для подробных заметок о релизе на русском языке.
- Реализован release-gitea.ps1 для автоматизированного релиза Gitea с помощью PowerShell.
- Создан release-gitea.sh для автоматизированного релиза Gitea с помощью Bash.
- Добавлен release.sh для сборки и маркировки релизов с поддержкой нескольких платформ.
- Улучшен пользовательский интерфейс благодаря информативному логированию и обработке ошибок.
- Добавлена ​​поддержка переменных окружения и управления конфигурацией.
- Добавлена ​​функция создания архивов и загрузки ресурсов в Gitea.
2025-11-05 09:33:12 +03:00

75 lines
2.1 KiB
Go

package main
import (
"compressor/internal/domain/entities"
"compressor/internal/domain/repositories"
"compressor/internal/presentation/tui"
usecases "compressor/internal/usecase"
"context"
"sync"
)
// ApplicationProcessor обрабатывает команды приложения
type ApplicationProcessor struct {
processUseCase *usecases.ProcessPDFsUseCase
allFilesUseCase *usecases.ProcessAllFilesUseCase
config *entities.Config
tuiManager *tui.Manager
logger repositories.Logger
// Graceful shutdown
ctx context.Context
cancel context.CancelFunc
wg sync.WaitGroup
}
// NewApplicationProcessor создает новый процессор приложения
func NewApplicationProcessor(
processUseCase *usecases.ProcessPDFsUseCase,
allFilesUseCase *usecases.ProcessAllFilesUseCase,
config *entities.Config,
tuiManager *tui.Manager,
logger repositories.Logger,
) *ApplicationProcessor {
ctx, cancel := context.WithCancel(context.Background())
return &ApplicationProcessor{
processUseCase: processUseCase,
allFilesUseCase: allFilesUseCase,
config: config,
tuiManager: tuiManager,
logger: logger,
ctx: ctx,
cancel: cancel,
}
}
// StartProcessing запускает обработку всех поддерживаемых файлов
func (p *ApplicationProcessor) StartProcessing() {
p.wg.Add(1)
defer p.wg.Done()
if p.logger != nil {
supportedTypes := p.allFilesUseCase.GetSupportedFileTypes(p.config)
p.logger.Info("Запуск обработки файлов. Поддерживаемые типы: %v", supportedTypes)
}
// Запускаем обработку всех поддерживаемых файлов
if err := p.allFilesUseCase.Execute(p.config); err != nil {
if p.logger != nil {
p.logger.Error("Ошибка обработки: %v", err)
}
return
}
if p.logger != nil {
p.logger.Success("Обработка файлов завершена успешно")
}
}
// Shutdown корректно завершает работу процессора
func (p *ApplicationProcessor) Shutdown() {
p.cancel()
p.wg.Wait()
}