-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtoolchain.go
342 lines (319 loc) · 10.1 KB
/
toolchain.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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
//just工具链
package justExpress
import (
"fmt"
"io/ioutil"
"log"
"os"
"os/exec"
"path/filepath"
"regexp"
"strconv"
"strings"
"time"
)
func GetSitePath(siteName string) string {
siteRoot := SiteRoot("")
if len(siteName) == 0 {
var sitesArry []string
fileList, _ := filepath.Glob(siteRoot + "\\*")
for k := range fileList {
if Exist(fileList[k] + "\\complied\\setting") {
sitesArry = append(sitesArry, fileList[k])
}
}
if len(sitesArry) == 0 {
fmt.Println("站点根目录不存在任何站点,请通过`newsite`创建站点,或通过`siteroot`命令更换站点根目录路径,通过`just -h`命令可以获取帮助。")
os.Exit(0)
} else if len(sitesArry) == 1 {
fmt.Println()
fmt.Println("[ 当前操作站点:" + sitesArry[0] + " ]")
fmt.Println()
return sitesArry[0]
} else if len(sitesArry) > 1 {
fmt.Println()
fmt.Println("站点列表如下:")
for k := range sitesArry {
fmt.Println(" " + strconv.Itoa(k) + ". " + sitesArry[k])
}
fmt.Println()
var siteNum int
for true {
fmt.Print("请输入序号:")
fmt.Scanf("%d\n", &siteNum)
if siteNum >= 0 && siteNum < len(sitesArry) {
break
} else {
fmt.Println()
fmt.Println("不存在该站点,请重新输入正确的序号!")
fmt.Println()
}
}
fmt.Println()
fmt.Println("[ 当前操作站点:" + sitesArry[siteNum] + " ]")
fmt.Println()
return sitesArry[siteNum]
}
}
sitePath := siteRoot + "\\" + siteName
if !Exist(sitePath + "\\complied\\setting") {
log.Fatal(sitePath + "\\complied\\setting" + "站点目录结构不符合预期,有异常!确定站点标识输入是否错误!?")
} else {
fmt.Println()
fmt.Println("[ 当前操作站点:" + sitePath + " ]")
fmt.Println()
}
return sitePath
}
func Delete(sitePath string, title string) {
fileList, _ := filepath.Glob(sitePath + "\\*")
for k := range fileList {
fileName := filepath.Base(fileList[k])
if fileName == title {
err := os.RemoveAll(fileList[k])
if err != nil {
log.Fatal("删除《" + title + "》操作失败")
}
log.Println("删除《" + title + "》操作成功")
return
}
}
log.Fatal("未找到您输入的日志")
}
func ImgResize(sitePath string) {
fileList, _ := filepath.Glob(sitePath + "\\*")
for _, path := range fileList {
if Parse_logType(path) == "album" {
var siteInfo SiteInfo
logInfo := Decode_log(path, siteInfo)
os.RemoveAll(sitePath + "\\complied\\posts\\" + logInfo.Permalink)
}
}
Build(sitePath, false)
}
func SwitchTheme(sitePath string, themeName string) {
SyncTheme(sitePath+"\\complied\\style", themeName)
os.RemoveAll(sitePath + "\\complied\\style")
CopyDir(".\\themes\\"+themeName, sitePath+"\\complied\\style")
Rebuild(sitePath)
}
//重新构建(只构建html部分,主要用于switchTheme后使用)
func Rebuild(sitePath string) {
Build(sitePath, true)
}
//重新构建(彻底重新构建,包括图片及其所有附件)
func RebuildAll(sitePath string) {
fileList, _ := filepath.Glob(sitePath + "\\complied\\*")
for k := range fileList {
if strings.Contains("tags|posts|archives", filepath.Base(fileList[k])) || Exist(fileList[k]+"\\index.html") && filepath.Base(fileList[k]) != "style" {
os.RemoveAll(fileList[k])
}
}
Build(sitePath, false)
}
func NewSite(siteName string) {
if !Exist(siteName) {
dataBytes, _ := ioutil.ReadFile(".\\setting")
reg, _ := regexp.Compile(`#===站点默认配置[\s\S]*#===//站点默认配置`)
content := string(reg.Find(dataBytes))
content = strings.TrimPrefix(content, "#===站点默认配置")
content = strings.TrimSuffix(content, "#===//站点默认配置")
content = strings.TrimSpace(content)
content = strings.Replace(content, "{{sitename}}", siteName, -1)
ioutil.WriteFile(siteName, []byte(content), os.ModePerm)
log.Println("已生成配置文件(" + siteName + "),请自定义调整站点配置参数!")
} else {
fi, _ := os.Stat(siteName)
if fi.IsDir() {
if Exist(siteName + "\\complied\\setting") { //是站点的话
log.Fatal("已经存在该站点,请勿重复创建")
} else {
log.Fatal("该目录存在于站点同名的文件或文件夹,请检查")
}
} else {
fileData, err := ioutil.ReadFile(".\\" + siteName)
if err != nil {
log.Fatal("站点配置文件读取失败")
}
os.Remove(".\\" + siteName)
siteRoot := SiteRoot("")
sitePath := siteRoot + "\\" + siteName
err = os.MkdirAll(sitePath+"\\complied", os.ModePerm)
if err != nil {
ioutil.WriteFile(".\\"+siteName, fileData, os.ModePerm)
panic(err)
log.Fatal(sitePath + "目录创建失败。")
}
err = ioutil.WriteFile(sitePath+"\\complied\\setting", fileData, os.ModePerm)
if err != nil {
log.Fatal(err)
}
// ioutil.WriteFile(".\\"+siteName, fileData, os.ModePerm)
CopyDir(".\\themes\\default", sitePath+"\\complied\\style")
}
}
}
func SiteRoot(siteRoot string) string {
if len(siteRoot) == 0 {
config := Configure(".\\setting")
siteRoot = config.GetStr("SiteRoot")
return siteRoot
} else {
if !Exist(siteRoot) {
log.Fatal("站点根目录不存在")
}
siteRoot = strings.TrimRight(siteRoot, "\\/")
configData, _ := ioutil.ReadFile(".\\setting")
reg, _ := regexp.Compile("(SiteRoot\\s*:\\s*).*")
configData = reg.ReplaceAll(configData, []byte("${1}"+siteRoot))
err := ioutil.WriteFile(".\\setting", configData, os.ModePerm)
if err != nil {
return "true"
}
return "false"
}
}
func Post(sitePath string, title string, logType string, categorys string, tags string) {
var meta_categorysArry []string
var meta_tagsArry []string
var meta_categorys string
var meta_tags string
var siteCategroysArry []string
var siteTagsArry []string
var metadata string
siteCfg := Configure(sitePath + "\\complied\\setting")
siteCategroys := GetCategorys(siteCfg.GetArray("categorys"))
categorysArry := strings.Split(categorys, ",")
for _, v := range siteCategroys {
siteCategroysArry = append(siteCategroysArry, v.Name)
}
for k := range categorysArry {
if categorysArry[k] == "index" {
continue
}
if !In_array(categorysArry[k], siteCategroysArry) {
log.Fatal(categorysArry[k] + " 该分类不存在于站点分类中!")
} else {
meta_categorysArry = append(meta_categorysArry, categorysArry[k])
}
}
if len(tags) > 0 {
siteTags := GetTags(siteCfg.GetArray("tags"))
for _, v := range siteTags {
siteTagsArry = append(siteTagsArry, v.Name)
}
tagsArry := strings.Split(tags, ",")
for k := range tagsArry {
if !In_array(tagsArry[k], siteTagsArry) {
log.Fatal(tagsArry[k] + " 该标签不存在于站点标签库中!")
} else {
meta_tagsArry = append(meta_tagsArry, tagsArry[k])
}
}
}
for k := range meta_categorysArry {
if meta_categorys != "" {
meta_categorys += ","
}
meta_categorys += meta_categorysArry[k]
}
for k := range meta_tagsArry {
if meta_tags != "" {
meta_tags += ","
}
meta_tags += meta_tagsArry[k]
}
if len(meta_categorys) > 0 {
metadata += "category:" + meta_categorys + "\n"
}
if len(meta_tags) > 0 {
metadata += "tag:" + meta_tags + "\n"
}
if len(metadata) > 0 {
metadata = "---\n" + metadata + "---\n"
}
logPath := sitePath + "\\" + title + "@" + time.Now().Format("2006-1-2")
os.Mkdir(logPath, os.ModePerm)
if logType == "article" {
ioutil.WriteFile(logPath+"\\article.md", []byte(metadata), os.ModePerm)
} else {
ioutil.WriteFile(logPath+"\\meta", []byte(metadata), os.ModePerm)
}
}
func QuickPost(sitePath string, logType string, title string) {
var metadata string
siteCfg := Configure(sitePath + "\\complied\\setting")
siteCategroys := GetCategorys(siteCfg.GetArray("categorys"))
siteTags := GetTags(siteCfg.GetArray("tags"))
var meta_siteCategroys, meta_siteTags string
for _, category := range siteCategroys {
if meta_siteCategroys != "" {
meta_siteCategroys += ","
}
meta_siteCategroys += category.Name
}
for _, tag := range siteTags {
if meta_siteTags != "" {
meta_siteTags += ","
}
meta_siteTags += tag.Name
}
if len(meta_siteCategroys) > 0 {
metadata += "category:" + meta_siteCategroys + "\n"
}
if len(meta_siteTags) > 0 {
metadata += "tag:" + meta_siteTags + "\n"
}
if len(metadata) > 0 {
metadata = "---\n" + metadata + "---\n"
}
if logType == "album" || logType == "_album" {
logPath := sitePath + "\\" + title + "@" + time.Now().Format("2006-1-2")
err := os.Mkdir(logPath, os.ModePerm)
if err == nil {
file := logPath + "\\meta"
err = ioutil.WriteFile(file, []byte(metadata), os.ModePerm)
if err != nil {
log.Fatal(logPath + "写入元数据失败")
}
if logType == "album" {
args := strings.Fields(file)
args[0] = "/select," + args[0]
cmd := exec.Command("explorer.exe", args...)
cmd.Run()
}
} else {
log.Fatal(logPath + "日志创建失败")
}
} else if logType == "article" || logType == "_article" {
logPath := sitePath + "\\" + title + "@" + time.Now().Format("2006-1-2") + ".md"
err := ioutil.WriteFile(logPath, []byte(metadata), os.ModePerm)
if err != nil {
log.Fatal(logPath + "写入元数据失败")
}
if logType == "article" {
args := strings.Fields(logPath)
args[0] = "/select," + args[0]
cmd := exec.Command("explorer.exe", args...)
cmd.Run()
}
} else if logType == "article_folder" || logType == "_article_folder" {
logPath := sitePath + "\\" + title + "@" + time.Now().Format("2006-1-2")
err := os.Mkdir(logPath, os.ModePerm)
if err == nil {
file := logPath + "\\article.md"
err = ioutil.WriteFile(file, []byte(metadata), os.ModePerm)
if err != nil {
log.Fatal(logPath + "写入元数据失败")
}
if logType == "article_folder" {
args := strings.Fields(file)
args[0] = "/select," + args[0]
cmd := exec.Command("explorer.exe", args...)
cmd.Run()
}
} else {
log.Fatal(logPath + "日志创建失败")
}
}
}