/
skin_service.go
83 lines (78 loc) · 2.01 KB
/
skin_service.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package service
import (
"encoding/json"
"github.com/GoodHot/TinyCMS/common/files"
"github.com/GoodHot/TinyCMS/orm"
"github.com/labstack/gommon/log"
"io/ioutil"
"os"
"path/filepath"
)
type SkinService struct {
ORM *orm.ORM `ioc:"auto"`
SkinDir string `val:"${server.skin_template_dir}"`
StaticDir string `val:"${server.static}"`
}
type SkinInfo struct {
Name string `json:"name"`
Description string `json:"description"`
Cover string `json:"cover"`
Template []struct {
File string `json:"file"`
Description string `json:"description"`
}
CoverImgs map[string]string `json:"cover_imgs"`
}
func (s *SkinService) AllSkin() ([]*SkinInfo, error) {
dirs, err := ioutil.ReadDir(s.SkinDir)
if err != nil {
return nil, err
}
var skins []*SkinInfo
for _, dir := range dirs {
infoPath := s.SkinDir + "/" + dir.Name() + "/info.json"
infoJSON, err := ioutil.ReadFile(infoPath)
if err != nil {
continue
}
skin := &SkinInfo{}
err = json.Unmarshal(infoJSON, skin)
if err != nil {
log.Error(err)
continue
}
coverPath := s.SkinDir + "/" + dir.Name() + "/" + skin.Cover
imgs, err := ioutil.ReadDir(coverPath)
if err != nil {
log.Error(err)
} else {
coverImgs := make(map[string]string)
s.checkSkinCover2Static(dir.Name(), coverPath)
for _, img := range imgs {
coverImgs[img.Name()] = "/" + s.StaticDir + "/skin_cover/" + dir.Name() + "/" + img.Name()
}
skin.CoverImgs = coverImgs
}
skins = append(skins, skin)
}
return skins, nil
}
func (s *SkinService) checkSkinCover2Static(name, coverPath string) bool {
// TODO 这里存在BUG,当模板更新后,并不会同步过去,以后修复
dir := s.StaticDir + "/skin_cover/" + name
if (files.DirExists(dir)) {
return true
}
err := os.Mkdir(dir, os.ModePerm)
if err != nil {
return false
}
filepath.Walk(coverPath, func(path string, info os.FileInfo, err error) error {
if info.IsDir() {
return nil
}
files.CopyFile(dir + "/" + info.Name(), path)
return nil
})
return true
}