| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- 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.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"
|