Достижение: Добавлены скрипты и документация для релиза PDF Compressor.
- Добавлен release-body.md для подробных заметок о релизе на русском языке. - Реализован release-gitea.ps1 для автоматизированного релиза Gitea с помощью PowerShell. - Создан release-gitea.sh для автоматизированного релиза Gitea с помощью Bash. - Добавлен release.sh для сборки и маркировки релизов с поддержкой нескольких платформ. - Улучшен пользовательский интерфейс благодаря информативному логированию и обработке ошибок. - Добавлена поддержка переменных окружения и управления конфигурацией. - Добавлена функция создания архивов и загрузки ресурсов в Gitea.
This commit is contained in:
137
internal/usecase/process_all_files.go
Normal file
137
internal/usecase/process_all_files.go
Normal file
@@ -0,0 +1,137 @@
|
||||
package usecases
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"compressor/internal/domain/entities"
|
||||
"compressor/internal/domain/repositories"
|
||||
"compressor/internal/infrastructure/compressors"
|
||||
)
|
||||
|
||||
// ProcessAllFilesUseCase сценарий для обработки всех поддерживаемых типов файлов
|
||||
type ProcessAllFilesUseCase struct {
|
||||
pdfProcessor *ProcessPDFsUseCase
|
||||
imageProcessor *CompressImageUseCase
|
||||
logger repositories.Logger
|
||||
}
|
||||
|
||||
// NewProcessAllFilesUseCase создает новый сценарий обработки всех файлов
|
||||
func NewProcessAllFilesUseCase(
|
||||
pdfProcessor *ProcessPDFsUseCase,
|
||||
imageProcessor *CompressImageUseCase,
|
||||
logger repositories.Logger,
|
||||
) *ProcessAllFilesUseCase {
|
||||
return &ProcessAllFilesUseCase{
|
||||
pdfProcessor: pdfProcessor,
|
||||
imageProcessor: imageProcessor,
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
// Execute выполняет обработку всех поддерживаемых файлов
|
||||
func (uc *ProcessAllFilesUseCase) Execute(config *entities.Config) error {
|
||||
uc.logger.Info("Начинаем обработку файлов")
|
||||
uc.logger.Info("Исходная директория: %s", config.Scanner.SourceDirectory)
|
||||
|
||||
var processedPDFs, processedImages bool
|
||||
|
||||
// Обрабатываем PDF файлы
|
||||
if uc.shouldProcessPDFs(config) {
|
||||
uc.logger.Info("Обработка PDF файлов...")
|
||||
err := uc.pdfProcessor.Execute(config)
|
||||
if err != nil {
|
||||
uc.logger.Error("Ошибка обработки PDF файлов: %v", err)
|
||||
return fmt.Errorf("ошибка обработки PDF файлов: %w", err)
|
||||
}
|
||||
processedPDFs = true
|
||||
uc.logger.Info("Обработка PDF файлов завершена")
|
||||
}
|
||||
|
||||
// Обрабатываем изображения
|
||||
if uc.shouldProcessImages(config) {
|
||||
uc.logger.Info("Обработка изображений...")
|
||||
result, err := uc.imageProcessor.ProcessImagesInDirectory(
|
||||
config.Scanner.SourceDirectory,
|
||||
config.Scanner.TargetDirectory,
|
||||
&config.Compression,
|
||||
config.Scanner.ReplaceOriginal,
|
||||
)
|
||||
if err != nil {
|
||||
uc.logger.Error("Ошибка обработки изображений: %v", err)
|
||||
return fmt.Errorf("ошибка обработки изображений: %w", err)
|
||||
}
|
||||
|
||||
// Логируем результаты обработки изображений
|
||||
uc.logger.Info("Обработка изображений завершена. Всего файлов: %d, Успешно: %d, Ошибок: %d",
|
||||
result.TotalFiles, result.SuccessfulFiles, len(result.FailedFiles))
|
||||
|
||||
for _, failed := range result.FailedFiles {
|
||||
uc.logger.Error("Не удалось обработать изображение %s: %v", failed.FilePath, failed.Error)
|
||||
}
|
||||
|
||||
processedImages = true
|
||||
}
|
||||
|
||||
if !processedPDFs && !processedImages {
|
||||
uc.logger.Warning("Не выбрано ни одного типа файлов для обработки")
|
||||
return fmt.Errorf("не выбрано ни одного типа файлов для обработки")
|
||||
}
|
||||
|
||||
uc.logger.Info("Обработка всех файлов завершена успешно")
|
||||
return nil
|
||||
}
|
||||
|
||||
// shouldProcessPDFs проверяет, нужно ли обрабатывать PDF файлы
|
||||
func (uc *ProcessAllFilesUseCase) shouldProcessPDFs(config *entities.Config) bool {
|
||||
// PDF файлы обрабатываются всегда, если есть алгоритм сжатия
|
||||
return config.Compression.Algorithm != ""
|
||||
}
|
||||
|
||||
// shouldProcessImages проверяет, нужно ли обрабатывать изображения
|
||||
func (uc *ProcessAllFilesUseCase) shouldProcessImages(config *entities.Config) bool {
|
||||
return config.Compression.EnableJPEG || config.Compression.EnablePNG
|
||||
}
|
||||
|
||||
// GetSupportedFileTypes возвращает список поддерживаемых типов файлов
|
||||
func (uc *ProcessAllFilesUseCase) GetSupportedFileTypes(config *entities.Config) []string {
|
||||
var types []string
|
||||
|
||||
if uc.shouldProcessPDFs(config) {
|
||||
types = append(types, "PDF")
|
||||
}
|
||||
|
||||
if config.Compression.EnableJPEG {
|
||||
types = append(types, "JPEG")
|
||||
}
|
||||
|
||||
if config.Compression.EnablePNG {
|
||||
types = append(types, "PNG")
|
||||
}
|
||||
|
||||
return types
|
||||
}
|
||||
|
||||
// IsFileSupported проверяет, поддерживается ли данный файл для обработки
|
||||
func (uc *ProcessAllFilesUseCase) IsFileSupported(filename string, config *entities.Config) bool {
|
||||
ext := strings.ToLower(filepath.Ext(filename))
|
||||
|
||||
// Проверяем PDF
|
||||
if ext == ".pdf" && uc.shouldProcessPDFs(config) {
|
||||
return true
|
||||
}
|
||||
|
||||
// Проверяем изображения
|
||||
if compressors.IsImageFile(filename) {
|
||||
format := compressors.GetImageFormat(filename)
|
||||
switch format {
|
||||
case "jpeg":
|
||||
return config.Compression.EnableJPEG
|
||||
case "png":
|
||||
return config.Compression.EnablePNG
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
Reference in New Issue
Block a user