summaryrefslogtreecommitdiff
path: root/main.go
diff options
from:
to:
context:
space:
mode:
authorGravatar SayaAndy <montferrat@tuta.io> 2025-07-15 17:36:47 +0700
committerGravatar SayaAndy <montferrat@tuta.io> 2025-07-15 17:36:47 +0700
commit2d2138383af6d28c5b947c5a6c4989afa8f7ac56 (patch)
tree6dfb9bf48bb640b29623cd0563c5c732afc196b0 /main.go
parent373ec07b40178cb3b704aa83fc4fd53abfe279bc (diff)
downloadthumbnail-generator-2d2138383af6d28c5b947c5a6c4989afa8f7ac56.tar.gz
thumbnail-generator-2d2138383af6d28c5b947c5a6c4989afa8f7ac56.zip
feat: first working prototype
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))
+ }
}