From 3ef95cd07ba9584829886ab53627689140c32458 Mon Sep 17 00:00:00 2001 From: celogeek <65178+celogeek@users.noreply.github.com> Date: Thu, 23 Dec 2021 09:06:44 +0100 Subject: [PATCH] lookup for created at --- go.mod | 1 + go.sum | 2 ++ internal/piwigo/exif.go | 46 ++++++++++++++++++++++++++++++++++++++++ internal/piwigo/files.go | 16 ++++++++------ internal/piwigo/time.go | 2 +- 5 files changed, 60 insertions(+), 7 deletions(-) create mode 100644 internal/piwigo/exif.go diff --git a/go.mod b/go.mod index e35c8ec..072a75a 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ require ( ) require ( + github.com/barasher/go-exiftool v1.7.0 // indirect github.com/mattn/go-runewidth v0.0.13 // indirect github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect github.com/rivo/uniseg v0.2.0 // indirect diff --git a/go.sum b/go.sum index 5fd6605..68b3db8 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +github.com/barasher/go-exiftool v1.7.0 h1:EOGb5D6TpWXmqsnEjJ0ai6+tIW2gZFwIoS9O/33Nixs= +github.com/barasher/go-exiftool v1.7.0/go.mod h1:F9s/a3uHSM8YniVfwF+sbQUtP8Gmh9nyzigNF+8vsWo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/internal/piwigo/exif.go b/internal/piwigo/exif.go new file mode 100644 index 0000000..dc91102 --- /dev/null +++ b/internal/piwigo/exif.go @@ -0,0 +1,46 @@ +package piwigo + +import ( + "fmt" + "time" + + "github.com/barasher/go-exiftool" +) + +type ExifResult struct { + CreatedAt *TimeResult +} + +func Exif(filename string) (*ExifResult, error) { + et, err := exiftool.NewExiftool() + if err != nil { + return nil, err + } + defer et.Close() + + resp := &ExifResult{} + fileInfos := et.ExtractMetadata(filename) + for _, fileInfo := range fileInfos { + if fileInfo.Err != nil { + fmt.Printf("Error concerning %v: %v\n", fileInfo.File, fileInfo.Err) + continue + } + + for k, v := range fileInfo.Fields { + switch k { + case "CreateDate", "CreationDate": + switch v := v.(type) { + case string: + t, err := time.Parse("2006:01:02 15:04:05-07:00", v) + if err == nil { + if resp.CreatedAt == nil || time.Time(*resp.CreatedAt).After(t) { + r := TimeResult(t) + resp.CreatedAt = &r + } + } + } + } + } + } + return resp, nil +} diff --git a/internal/piwigo/files.go b/internal/piwigo/files.go index db3a1e1..eceff2c 100644 --- a/internal/piwigo/files.go +++ b/internal/piwigo/files.go @@ -36,8 +36,8 @@ func (p *Piwigo) UploadChunks(filename string, nbJobs int) (*FileUploadResult, e if p.FileExists(md5) { return nil, errors.New("file already exists") } - st, _ := os.Stat(filename) + st, _ := os.Stat(filename) wg := &sync.WaitGroup{} chunks, err := Base64Chunker(filename) errout := make(chan error) @@ -67,12 +67,16 @@ func (p *Piwigo) UploadChunks(filename string, nbJobs int) (*FileUploadResult, e return nil, errors.New(errstring) } + exif, _ := Exif(filename) var resp *FileUploadResult - err = p.Post("pwg.images.add", &url.Values{ - "original_sum": []string{md5}, - "original_filename": []string{filename}, - "check_uniqueness": []string{"true"}, - }, &resp) + data := &url.Values{} + data.Set("original_sum", md5) + data.Set("original_filename", filename) + data.Set("check_uniqueness", "true") + if exif != nil && exif.CreatedAt != nil { + data.Set("date_creation", exif.CreatedAt.String()) + } + err = p.Post("pwg.images.add", data, &resp) if err != nil { return nil, err } diff --git a/internal/piwigo/time.go b/internal/piwigo/time.go index e175d19..ce23c81 100644 --- a/internal/piwigo/time.go +++ b/internal/piwigo/time.go @@ -36,7 +36,7 @@ func (c TimeResult) String() string { if t.IsZero() { return "" } else { - return t.Format(time.RFC3339) + return t.Format("2006-01-02 15:04:05") } }