This commit is contained in:
parent
45816618d0
commit
c9f3944c72
3 changed files with 136 additions and 6 deletions
72
cmd/fetch-header-image/models.go
Normal file
72
cmd/fetch-header-image/models.go
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net/http"
|
||||
"os"
|
||||
"sort"
|
||||
"time"
|
||||
)
|
||||
|
||||
const CropBottom = "bottom"
|
||||
|
||||
var ErrNon200Error = errors.New("non 200 status code")
|
||||
|
||||
type PendingImage struct {
|
||||
Date time.Time `json:"date"`
|
||||
URL string `json:"url"`
|
||||
Crop string `json:"crop"`
|
||||
}
|
||||
|
||||
func LoadPendingImageFromURL(url string) (pi PendingImage, err error) {
|
||||
resp, err := http.Get(url)
|
||||
if err != nil {
|
||||
return PendingImage{}, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return PendingImage{}, ErrNon200Error
|
||||
}
|
||||
|
||||
if err := json.NewDecoder(resp.Body).Decode(&pi); err != nil {
|
||||
return PendingImage{}, err
|
||||
}
|
||||
return pi, nil
|
||||
}
|
||||
|
||||
type PendingImages struct {
|
||||
Images []PendingImage `json:"images"`
|
||||
}
|
||||
|
||||
func (pi PendingImages) FindPendingImage() (bestImg PendingImage, ok bool) {
|
||||
timeNow := time.Now().UTC()
|
||||
|
||||
if len(pi.Images) == 0 {
|
||||
return PendingImage{}, false
|
||||
}
|
||||
|
||||
for _, img := range pi.Images {
|
||||
if timeNow.Before(img.Date) {
|
||||
continue
|
||||
}
|
||||
bestImg = img
|
||||
}
|
||||
return bestImg, bestImg.URL != ""
|
||||
}
|
||||
|
||||
func LoadPendingImages(jsonFile string) (pi PendingImages, _ error) {
|
||||
f, err := os.Open(jsonFile)
|
||||
if err != nil {
|
||||
return PendingImages{}, err
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
if err := json.NewDecoder(f).Decode(&pi); err != nil {
|
||||
return PendingImages{}, err
|
||||
}
|
||||
|
||||
sort.Slice(pi.Images, func(i, j int) bool { return pi.Images[i].Date.Before(pi.Images[j].Date) })
|
||||
return pi, nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue