diff options
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 79 |
1 files changed, 79 insertions, 0 deletions
@@ -2,8 +2,12 @@ package main import ( "flag" + "log/slog" "github.com/SayaAndy/saya-today-thumbnail-generator/config" + "github.com/SayaAndy/saya-today-thumbnail-generator/internal/client/input" + "github.com/SayaAndy/saya-today-thumbnail-generator/internal/client/output" + "github.com/SayaAndy/saya-today-thumbnail-generator/internal/processor" ) var ( @@ -13,8 +17,83 @@ var ( func main() { flag.Parse() + slog.Info("starting thumbnail generator...") + slog.SetLogLoggerLevel(slog.LevelDebug) + cfg := &config.Config{} if err := config.LoadConfig(*configPath, cfg); err != nil { panic(err) } + + inputClient, err := input.NewB2InputClient(&cfg.Input) + if err != nil { + panic(err) + } + + outputClient, err := output.NewB2OutputClient(&cfg.Output) + if err != nil { + panic(err) + } + + converter, err := processor.NewWebpProcessor(&cfg.Processor) + if err != nil { + panic(err) + } + + generalLogger := slog.With( + slog.String("input_storage", cfg.Input.Storage.Type), + slog.String("processor_type", cfg.Processor.Type), + slog.String("output_storage", cfg.Output.Storage.Type), + ) + generalLogger.Info("initialized clients and processor") + + files, err := inputClient.Scan() + if err != nil { + panic(err) + } + + for _, file := range files { + outputName := converter.DeductOutputPath(file) + fileLogger := generalLogger.With(slog.String("input_path", file), slog.String("output_path", outputName)) + + isMissing := outputClient.IsMissing(outputName) + + inputMetadata, err := inputClient.ReadMetadata(file) + if err != nil { + fileLogger.Error("fail to read metadata of (supposedly existing) input file", slog.String("error", err.Error())) + continue + } + + if !isMissing { + outputMetadata, err := outputClient.ReadMetadata(outputName) + if err != nil { + fileLogger.Error("fail to read metadata of (supposedly existing) output file", slog.String("error", err.Error())) + continue + } + if inputMetadata.Hash == outputMetadata.HashOriginal { + fileLogger.Info("skip already processed file (based on equal hash)", slog.String("input_hash", inputMetadata.Hash)) + continue + } + } + + fileLogger.Info("start to process file") + reader, err := inputClient.GetReader(file) + if err != nil { + fileLogger.Error("fail to get reader for input file", slog.String("error", err.Error())) + continue + } + + writer, err := outputClient.GetWriter(outputName, inputMetadata) + if err != nil { + fileLogger.Error("fail to get writer for output file", slog.String("error", err.Error())) + continue + } + + if err := converter.Process(inputMetadata.ContentType, reader, writer); err != nil { + fileLogger.Error("fail to convert file", slog.String("error", err.Error())) + continue + } + + fileLogger.Info("successfully processed file", slog.String("input_hash", inputMetadata.Hash)) + } } |