summaryrefslogtreecommitdiff
path: root/internal/client/input
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 /internal/client/input
parent373ec07b40178cb3b704aa83fc4fd53abfe279bc (diff)
downloadthumbnail-generator-2d2138383af6d28c5b947c5a6c4989afa8f7ac56.tar.gz
thumbnail-generator-2d2138383af6d28c5b947c5a6c4989afa8f7ac56.zip
feat: first working prototype
Diffstat (limited to 'internal/client/input')
-rw-r--r--internal/client/input/b2.go44
-rw-r--r--internal/client/input/input_client_interface.go15
2 files changed, 36 insertions, 23 deletions
diff --git a/internal/client/input/b2.go b/internal/client/input/b2.go
index 67fb14e..54a6b09 100644
--- a/internal/client/input/b2.go
+++ b/internal/client/input/b2.go
@@ -5,6 +5,7 @@ import (
"fmt"
"io"
"slices"
+ "strconv"
"strings"
"github.com/Backblaze/blazer/b2"
@@ -72,7 +73,7 @@ func (c *B2InputClient) Scan() ([]string, error) {
}
}
- filePaths = append(filePaths, name)
+ filePaths = append(filePaths, strings.TrimPrefix(name, c.prefix))
}
if err := iter.Err(); err != nil {
@@ -82,8 +83,8 @@ func (c *B2InputClient) Scan() ([]string, error) {
return filePaths, nil
}
-func (c *B2InputClient) ReadMetadata(path string) (map[string]string, error) {
- obj := c.bucket.Object(path)
+func (c *B2InputClient) ReadMetadata(path string) (*MetadataStruct, error) {
+ obj := c.bucket.Object(c.prefix + path)
if obj == nil {
return nil, fmt.Errorf("object not found in B2 bucket")
}
@@ -93,37 +94,38 @@ func (c *B2InputClient) ReadMetadata(path string) (map[string]string, error) {
return nil, fmt.Errorf("get attributes for object: %w", err)
}
- metadata := attrs.Info
- metadata["Name"] = attrs.Name
- metadata["Size"] = fmt.Sprintf("%d", attrs.Size)
- metadata["ContentType"] = attrs.ContentType
- metadata["LastModified"] = attrs.LastModified.Format("2006-01-02T15:04:05Z")
- metadata["SHA1"] = attrs.SHA1
- metadata["UploadTimestamp"] = attrs.UploadTimestamp.Format("2006-01-02T15:04:05Z")
+ metadata := MetadataStruct{
+ Name: attrs.Name,
+ StorageType: "b2",
+ Hash: attrs.SHA1,
+ ContentType: attrs.ContentType,
+ FirstCreated: attrs.UploadTimestamp,
+ LastModified: attrs.LastModified,
+ Misc: attrs.Info,
+ }
+ metadata.Misc["Size"] = strconv.FormatInt(attrs.Size, 10)
switch attrs.Status {
case b2.Uploaded:
- metadata["Status"] = "Uploaded"
+ metadata.Misc["b2-status"] = "Uploaded"
case b2.Folder:
- metadata["Status"] = "Folder"
+ metadata.Misc["b2-status"] = "Folder"
case b2.Hider:
- metadata["Status"] = "Hider"
+ metadata.Misc["b2-status"] = "Hider"
case b2.Started:
- metadata["Status"] = "Started"
+ metadata.Misc["b2-status"] = "Started"
default:
- metadata["Status"] = "Unknown"
+ metadata.Misc["b2-status"] = "Unknown"
}
- return metadata, nil
+ return &metadata, nil
}
-func (c *B2InputClient) GetReader(path string) (io.Reader, error) {
- obj := c.bucket.Object(path)
+func (c *B2InputClient) GetReader(path string) (io.ReadCloser, error) {
+ obj := c.bucket.Object(c.prefix + path)
if obj == nil {
return nil, fmt.Errorf("failed to reference object in B2 bucket")
}
- reader := obj.NewReader(context.Background())
-
- return reader, nil
+ return obj.NewReader(context.Background()), nil
}
diff --git a/internal/client/input/input_client_interface.go b/internal/client/input/input_client_interface.go
index 4bbbae5..c896ca4 100644
--- a/internal/client/input/input_client_interface.go
+++ b/internal/client/input/input_client_interface.go
@@ -2,10 +2,21 @@ package input
import (
"io"
+ "time"
)
type InputClient interface {
Scan() ([]string, error)
- ReadMetadata(string) (map[string]string, error)
- GetReader(string) (io.Reader, error)
+ ReadMetadata(string) (*MetadataStruct, error)
+ GetReader(string) (io.ReadCloser, error)
+}
+
+type MetadataStruct struct {
+ Name string
+ StorageType string
+ Hash string
+ ContentType string
+ FirstCreated time.Time
+ LastModified time.Time
+ Misc map[string]string
}