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, strings.ReplaceAll(ent.Name(), " ", "%20")), Alt: strings.TrimSuffix(name, ext), Size: info.Size(), Typ: typ, }) } return }