something_static.go 2.9 KB

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