Skip to content

Commit

Permalink
feat(date): Adding date computing
Browse files Browse the repository at this point in the history
Signed-off-by: Vincent Boutour <[email protected]>
  • Loading branch information
ViBiOh committed Nov 14, 2021
1 parent ff63cb4 commit d9a892c
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 2 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ Usage of exas:
-userAgent string
[alcotest] User-Agent for check {EXAS_USER_AGENT} (default "Alcotest")
-workDir string
[vith] Working directory for direct access requests {EXAS_WORK_DIR}
[exas] Working directory for direct access requests {EXAS_WORK_DIR}
-writeTimeout string
[server] Write Timeout {EXAS_WRITE_TIMEOUT} (default "2m")
```
56 changes: 56 additions & 0 deletions pkg/exas/date.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package exas

import (
"errors"
"fmt"
"time"
)

var (
exifDates = []string{
"DateCreated",
"CreateDate",
}

datePatterns = []string{
"2006:01:02 15:04:05MST",
"2006:01:02 15:04:05-07:00",
"2006:01:02 15:04:05Z07:00",
"2006:01:02 15:04:05",
"2006:01:02",
"01/02/2006 15:04:05",
"1/02/2006 15:04:05",
}
)

func getDate(data map[string]interface{}) (time.Time, error) {
for _, exifDate := range exifDates {
rawCreateDate, ok := data[exifDate]
if !ok {
continue
}

createDateStr, ok := rawCreateDate.(string)
if !ok {
return time.Time{}, fmt.Errorf("key `%s` is not a string", exifDate)
}

createDate, err := parseDate(createDateStr)
if err == nil {
return createDate, nil
}
}

return time.Time{}, nil
}

func parseDate(raw string) (time.Time, error) {
for _, pattern := range datePatterns {
createDate, err := time.Parse(pattern, raw)
if err == nil {
return createDate, nil
}
}

return time.Time{}, errors.New("no matching pattern")
}
9 changes: 8 additions & 1 deletion pkg/exas/exas.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ type Config struct {
func Flags(fs *flag.FlagSet, prefix string, overrides ...flags.Override) Config {
return Config{
tmpFolder: flags.New(prefix, "exas", "TmpFolder").Default("/tmp", overrides).Label("Folder used for temporary files storage").ToString(fs),
workingDir: flags.New(prefix, "vith", "WorkDir").Default("", overrides).Label("Working directory for direct access requests").ToString(fs),
workingDir: flags.New(prefix, "exas", "WorkDir").Default("", overrides).Label("Working directory for direct access requests").ToString(fs),
}
}

Expand Down Expand Up @@ -104,6 +104,13 @@ func (a App) answerExif(input string, w http.ResponseWriter) {
exifData = exifs[0]
}

if date, err := getDate(exifData); err != nil {
httperror.InternalServerError(w, fmt.Errorf("unable to parse date: %s", err))
return
} else if !date.IsZero() {
exifData["date"] = date
}

if a.geocodeApp.Enabled() {
if err := a.geocodeApp.AppendGeocoding(exifData); err != nil {
httperror.InternalServerError(w, fmt.Errorf("unable to append geocoding: %s", err))
Expand Down

0 comments on commit d9a892c

Please sign in to comment.