summaryrefslogtreecommitdiff
path: root/main.go
diff options
from:
to:
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go79
1 files changed, 79 insertions, 0 deletions
diff --git a/main.go b/main.go
index f03ff52..87f30f5 100644
--- a/main.go
+++ b/main.go
@@ -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))
+ }
}