summaryrefslogtreecommitdiff
path: root/internal/client/output
diff options
from:
to:
context:
space:
mode:
authorGravatar SayaAndy <saya.andy@posteo.com> 2026-02-09 06:33:35 +0700
committerGravatar SayaAndy <saya.andy@posteo.com> 2026-02-09 06:33:35 +0700
commitebfe3540c333ae7fa3effb410a20e5764627e307 (patch)
tree543aa1d73463dcd381f732d67b3361dd53a926a0 /internal/client/output
parentda672112ebbc25a3fa9f2cf8e37994a7bd1d0e2f (diff)
downloadthumbnail-generator-ebfe3540c333ae7fa3effb410a20e5764627e307.tar.gz
thumbnail-generator-ebfe3540c333ae7fa3effb410a20e5764627e307.zip
feat: add jpeg converter
fix: explicitly set content type for b2 feat: extend rewrite settings with "never overwrite" feat: move rewrite setting to converter config feat: allow to skip size config
Diffstat (limited to 'internal/client/output')
-rw-r--r--internal/client/output/b2.go12
-rw-r--r--internal/client/output/local_unix.go2
-rw-r--r--internal/client/output/output_client_interface.go2
3 files changed, 13 insertions, 3 deletions
diff --git a/internal/client/output/b2.go b/internal/client/output/b2.go
index f53532a..0616368 100644
--- a/internal/client/output/b2.go
+++ b/internal/client/output/b2.go
@@ -2,8 +2,10 @@ package output
import (
"context"
+ "encoding/json"
"fmt"
"io"
+ "log/slog"
"github.com/Backblaze/blazer/b2"
"github.com/SayaAndy/saya-today-thumbnail-generator/config"
@@ -37,7 +39,7 @@ func NewB2OutputClient(cfg *config.OutputConfig) (OutputClient, error) {
return &B2OutputClient{b2cl: b2cl, bucket: bucket, prefix: b2cfg.Prefix}, nil
}
-func (c *B2OutputClient) GetWriter(path string, inputMetadata *input.MetadataStruct) (io.WriteCloser, error) {
+func (c *B2OutputClient) GetWriter(path string, inputMetadata *input.MetadataStruct, outputContentType string) (io.WriteCloser, error) {
obj := c.bucket.Object(c.prefix + path)
if obj == nil {
return nil, fmt.Errorf("failed to reference object in B2 bucket")
@@ -45,6 +47,7 @@ func (c *B2OutputClient) GetWriter(path string, inputMetadata *input.MetadataStr
attrs := &b2.Attrs{Info: make(map[string]string)}
attrs.Info["sha1-original"] = inputMetadata.Hash
+ attrs.ContentType = outputContentType
return obj.NewWriter(context.Background(), b2.WithAttrsOption(attrs)), nil
}
@@ -99,5 +102,12 @@ func (c *B2OutputClient) IsMissing(path string) bool {
return true
}
+ attrsJson, _ := json.Marshal(attrs)
+ slog.Debug("got object attrs", slog.String("path", path), slog.String("attrs", string(attrsJson)))
+
+ if attrs.Size == 0 {
+ return true
+ }
+
return attrs.Status == b2.Hider
}
diff --git a/internal/client/output/local_unix.go b/internal/client/output/local_unix.go
index 668a14b..6f9a7b3 100644
--- a/internal/client/output/local_unix.go
+++ b/internal/client/output/local_unix.go
@@ -44,7 +44,7 @@ func NewLocalUnixOutputClient(cfg *config.OutputConfig) (OutputClient, error) {
return &LocalUnixOutputClient{localCfg.Path, uint32(fpm), uint32(dpm), localCfg.AttributesImplementation}, nil
}
-func (c *LocalUnixOutputClient) GetWriter(path string, inputMetadata *input.MetadataStruct) (io.WriteCloser, error) {
+func (c *LocalUnixOutputClient) GetWriter(path string, inputMetadata *input.MetadataStruct, _ string) (io.WriteCloser, error) {
pathSegments := strings.Split(path, "/")
dirpath := strings.Join(pathSegments[0:len(pathSegments)-1], "/")
if err := os.MkdirAll(c.path+dirpath, os.FileMode(c.dirMode)); err != nil {
diff --git a/internal/client/output/output_client_interface.go b/internal/client/output/output_client_interface.go
index c74851d..f9e421b 100644
--- a/internal/client/output/output_client_interface.go
+++ b/internal/client/output/output_client_interface.go
@@ -9,7 +9,7 @@ import (
)
type OutputClient interface {
- GetWriter(path string, inputMetadata *input.MetadataStruct) (io.WriteCloser, error)
+ GetWriter(path string, inputMetadata *input.MetadataStruct, outputContentType string) (io.WriteCloser, error)
ReadMetadata(path string) (*MetadataStruct, error)
IsMissing(path string) bool
}