-
Notifications
You must be signed in to change notification settings - Fork 229
/
something_static.go
125 lines (104 loc) · 3.25 KB
/
something_static.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
package something_static
import (
b64 "encoding/base64"
"errors"
"fmt"
"os"
"path/filepath"
"time"
"github.com/allanpk716/ChineseSubFinder/pkg"
"github.com/allanpk716/ChineseSubFinder/pkg/types/common"
"github.com/allanpk716/ChineseSubFinder/pkg/logic/file_downloader"
"github.com/sirupsen/logrus"
)
func WriteFile(CloneProjectDesSaveDir, enString, nowTime, nowTimeFileNamePrix string) (bool, error) {
saveFileFPath := filepath.Join(CloneProjectDesSaveDir, nowTimeFileNamePrix+common.StaticFileName00)
saveFileFPathWait := filepath.Join(CloneProjectDesSaveDir, nowTimeFileNamePrix+common.StaticFileName00+waitExt)
if pkg.IsFile(saveFileFPath) == true {
// 目标文件存在,则需要判断准备写入覆盖的文件是否与当前存在的文件 SHA1 的值是一样的,一样就跳过后续的操作
// 写入等待替换的文件
err := writeFile(saveFileFPathWait, enString, nowTime)
if err != nil {
return false, err
}
orgFileSHA1, err := pkg.GetFileSHA1(saveFileFPath)
if err != nil {
return false, err
}
waitFileSHA1, err := pkg.GetFileSHA1(saveFileFPathWait)
if err != nil {
return false, err
}
// 如果一样的,那么外面就需要判断无需继续往下执行
if orgFileSHA1 == waitFileSHA1 {
// 删除 wait 文件
err = os.Remove(saveFileFPathWait)
if err != nil {
return false, err
}
return false, nil
}
// 如果不一样,那么就需要删除原来的文件,然后把 wait 文件 rename 过去
err = os.Remove(saveFileFPath)
if err != nil {
return false, err
}
err = os.Rename(saveFileFPathWait, saveFileFPath)
if err != nil {
return false, err
}
} else {
// 如果不存在,那么就直接写入就行了
err := writeFile(saveFileFPath, enString, nowTime)
if err != nil {
return false, err
}
}
return true, nil
}
func writeFile(saveFileFPath, enString, nowTime string) error {
file, err := os.Create(saveFileFPath)
if err != nil {
return err
}
defer func() {
_ = file.Close()
}()
_, err = file.WriteString(enString + b64.StdEncoding.EncodeToString([]byte(nowTime)))
if err != nil {
return err
}
return nil
}
func GetCodeFromWeb(l *logrus.Logger, nowTimeFileNamePrix string, fileDownloader *file_downloader.FileDownloader) (string, string, error) {
getCode, err := fileDownloader.MediaInfoDealers.SubtitleBestApi.GetCode()
if err != nil {
l.Errorln("SubtitleBestApi.GetCode", err)
return "", "", errors.New(fmt.Sprintf("get code from web failed, %v \n", err.Error()))
}
nowTT := time.Now().Format("2006-01-02")
return nowTT, getCode, nil
}
func getCodeFromWeb(l *logrus.Logger, desUrl string) (string, string, error) {
fileBytes, _, err := pkg.DownFile(l, desUrl)
if err != nil {
return "", "", err
}
if len(fileBytes) < 24 {
return "", "", errors.New("fileBytes len < 24")
}
timeB64String := fileBytes[len(fileBytes)-16:]
decodedTime, err := b64.StdEncoding.DecodeString(string(timeB64String))
if err != nil {
return "", "", err
}
decodeTimeStr := string(decodedTime)
codeB64String := fileBytes[:len(fileBytes)-16]
decodedCode, err := b64.StdEncoding.DecodeString(string(codeB64String))
if err != nil {
return "", "", err
}
decodeCodeStr := string(decodedCode)
return decodeTimeStr, decodeCodeStr, nil
}
const waitExt = ".wait"