+package main
+
+import (
+ "log"
+ "os"
+ "path"
+ "strings"
+
+ "github.com/go-git/go-git/v5/plumbing"
+)
+
+type Img struct {
+ Path string
+ Alt string
+ Size int64
+ Typ string
+}
+
+var ImgTypes = map[string]string{
+ ".jxl": "image/jxl",
+ ".webp": "image/webp",
+}
+
+func listImgs(cfg *Cfg, what plumbing.Hash) (out []Img) {
+ if cfg.ImgPath == "" {
+ return nil
+ }
+ w := what.String()
+ sub := path.Join(w[:2], w[2:4], w[4:])
+ ents, err := os.ReadDir(path.Join(cfg.ImgPath, sub))
+ if err != nil {
+ return nil
+ }
+ out = make([]Img, 0, len(ents))
+ for _, ent := range ents {
+ name := ent.Name()
+ ext := path.Ext(name)
+ info, err := ent.Info()
+ if err != nil {
+ log.Println("imgs: Info():", err)
+ continue
+ }
+ typ := ImgTypes[ext]
+ if typ == "" {
+ typ = "application/octet-stream"
+ }
+ out = append(out, Img{
+ Path: path.Join(sub, ent.Name()),
+ Alt: strings.TrimSuffix(name, ext),
+ Size: info.Size(),
+ Typ: typ,
+ })
+ }
+ return
+}