something_static.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package something_static
  2. import (
  3. b64 "encoding/base64"
  4. "errors"
  5. "fmt"
  6. "os"
  7. "path/filepath"
  8. "time"
  9. "github.com/allanpk716/ChineseSubFinder/pkg"
  10. "github.com/allanpk716/ChineseSubFinder/pkg/types/common"
  11. "github.com/allanpk716/ChineseSubFinder/pkg/logic/file_downloader"
  12. "github.com/sirupsen/logrus"
  13. )
  14. func WriteFile(CloneProjectDesSaveDir, enString, nowTime, nowTimeFileNamePrix string) (bool, error) {
  15. saveFileFPath := filepath.Join(CloneProjectDesSaveDir, nowTimeFileNamePrix+common.StaticFileName00)
  16. saveFileFPathWait := filepath.Join(CloneProjectDesSaveDir, nowTimeFileNamePrix+common.StaticFileName00+waitExt)
  17. if pkg.IsFile(saveFileFPath) == true {
  18. // 目标文件存在,则需要判断准备写入覆盖的文件是否与当前存在的文件 SHA1 的值是一样的,一样就跳过后续的操作
  19. // 写入等待替换的文件
  20. err := writeFile(saveFileFPathWait, enString, nowTime)
  21. if err != nil {
  22. return false, err
  23. }
  24. orgFileSHA1, err := pkg.GetFileSHA1(saveFileFPath)
  25. if err != nil {
  26. return false, err
  27. }
  28. waitFileSHA1, err := pkg.GetFileSHA1(saveFileFPathWait)
  29. if err != nil {
  30. return false, err
  31. }
  32. // 如果一样的,那么外面就需要判断无需继续往下执行
  33. if orgFileSHA1 == waitFileSHA1 {
  34. // 删除 wait 文件
  35. err = os.Remove(saveFileFPathWait)
  36. if err != nil {
  37. return false, err
  38. }
  39. return false, nil
  40. }
  41. // 如果不一样,那么就需要删除原来的文件,然后把 wait 文件 rename 过去
  42. err = os.Remove(saveFileFPath)
  43. if err != nil {
  44. return false, err
  45. }
  46. err = os.Rename(saveFileFPathWait, saveFileFPath)
  47. if err != nil {
  48. return false, err
  49. }
  50. } else {
  51. // 如果不存在,那么就直接写入就行了
  52. err := writeFile(saveFileFPath, enString, nowTime)
  53. if err != nil {
  54. return false, err
  55. }
  56. }
  57. return true, nil
  58. }
  59. func writeFile(saveFileFPath, enString, nowTime string) error {
  60. file, err := os.Create(saveFileFPath)
  61. if err != nil {
  62. return err
  63. }
  64. defer func() {
  65. _ = file.Close()
  66. }()
  67. _, err = file.WriteString(enString + b64.StdEncoding.EncodeToString([]byte(nowTime)))
  68. if err != nil {
  69. return err
  70. }
  71. return nil
  72. }
  73. func GetCodeFromWeb(l *logrus.Logger, nowTimeFileNamePrix string, fileDownloader *file_downloader.FileDownloader) (string, string, error) {
  74. getCode, err := fileDownloader.SubtitleBestApi.GetCode()
  75. if err != nil {
  76. l.Errorln("SubtitleBestApi.GetCode", err)
  77. return "", "", errors.New(fmt.Sprintf("get code from web failed, %v \n", err.Error()))
  78. }
  79. nowTT := time.Now().Format("2006-01-02")
  80. return nowTT, getCode, nil
  81. }
  82. func getCodeFromWeb(l *logrus.Logger, desUrl string) (string, string, error) {
  83. fileBytes, _, err := pkg.DownFile(l, desUrl)
  84. if err != nil {
  85. return "", "", err
  86. }
  87. if len(fileBytes) < 24 {
  88. return "", "", errors.New("fileBytes len < 24")
  89. }
  90. timeB64String := fileBytes[len(fileBytes)-16:]
  91. decodedTime, err := b64.StdEncoding.DecodeString(string(timeB64String))
  92. if err != nil {
  93. return "", "", err
  94. }
  95. decodeTimeStr := string(decodedTime)
  96. codeB64String := fileBytes[:len(fileBytes)-16]
  97. decodedCode, err := b64.StdEncoding.DecodeString(string(codeB64String))
  98. if err != nil {
  99. return "", "", err
  100. }
  101. decodeCodeStr := string(decodedCode)
  102. return decodeTimeStr, decodeCodeStr, nil
  103. }
  104. const waitExt = ".wait"