]> Sergey Matveev's repositories - sgblog.git/blob - cmd/sgblog/img.go
Images support
[sgblog.git] / cmd / sgblog / img.go
1 package main
2
3 import (
4         "log"
5         "os"
6         "path"
7         "strings"
8
9         "github.com/go-git/go-git/v5/plumbing"
10 )
11
12 type Img struct {
13         Path string
14         Alt  string
15         Size int64
16         Typ  string
17 }
18
19 var ImgTypes = map[string]string{
20         ".jxl":  "image/jxl",
21         ".webp": "image/webp",
22 }
23
24 func listImgs(cfg *Cfg, what plumbing.Hash) (out []Img) {
25         if cfg.ImgPath == "" {
26                 return nil
27         }
28         w := what.String()
29         sub := path.Join(w[:2], w[2:4], w[4:])
30         ents, err := os.ReadDir(path.Join(cfg.ImgPath, sub))
31         if err != nil {
32                 return nil
33         }
34         out = make([]Img, 0, len(ents))
35         for _, ent := range ents {
36                 name := ent.Name()
37                 ext := path.Ext(name)
38                 info, err := ent.Info()
39                 if err != nil {
40                         log.Println("imgs: Info():", err)
41                         continue
42                 }
43                 typ := ImgTypes[ext]
44                 if typ == "" {
45                         typ = "application/octet-stream"
46                 }
47                 out = append(out, Img{
48                         Path: path.Join(sub, ent.Name()),
49                         Alt:  strings.TrimSuffix(name, ext),
50                         Size: info.Size(),
51                         Typ:  typ,
52                 })
53         }
54         return
55 }