restore.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package sub_timeline_fixer
  2. import (
  3. "github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
  4. "github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
  5. "os"
  6. "path/filepath"
  7. "strings"
  8. )
  9. // Restore 从备份还原自动校正的字幕文件
  10. func Restore(movieDir, seriesDir string) error {
  11. // 搜索出所有的 csf-bk 文件
  12. backUpSubMoviesFilePathList, err := searchBackUpSubFile(movieDir)
  13. if err != nil {
  14. return err
  15. }
  16. backUpSubSeriesFilePathList, err := searchBackUpSubFile(seriesDir)
  17. if err != nil {
  18. return err
  19. }
  20. allBkFilesPath := make([]string, len(backUpSubMoviesFilePathList)+len(backUpSubSeriesFilePathList))
  21. allBkFilesPath = append(allBkFilesPath, backUpSubMoviesFilePathList...)
  22. allBkFilesPath = append(allBkFilesPath, backUpSubSeriesFilePathList...)
  23. // 通过这些文件,判断当前每个 bk 下面是否有相应的文件,如果在则删除,然后再重命名 bk 文件回原来的文件名称
  24. // Fargo - S04E04 - The Pretend War WEBDL-1080p.chinese(简英,shooter).default.ass.csf-bk
  25. // Fargo - S04E04 - The Pretend War WEBDL-1080p.chinese(简英,shooter).default.ass
  26. for index, oneBkFile := range allBkFilesPath {
  27. fixedFileName := strings.ReplaceAll(oneBkFile, BackUpExt, "")
  28. if my_util.IsFile(fixedFileName) == true {
  29. err = os.Remove(fixedFileName)
  30. if err != nil {
  31. return err
  32. }
  33. err = os.Rename(oneBkFile, fixedFileName)
  34. if err != nil {
  35. return err
  36. }
  37. log_helper.GetLogger().Infoln("Restore", index, fixedFileName)
  38. }
  39. }
  40. return nil
  41. }
  42. func searchBackUpSubFile(dir string) ([]string, error) {
  43. var fileFullPathList = make([]string, 0)
  44. pathSep := string(os.PathSeparator)
  45. files, err := os.ReadDir(dir)
  46. if err != nil {
  47. return nil, err
  48. }
  49. for _, curFile := range files {
  50. fullPath := dir + pathSep + curFile.Name()
  51. if curFile.IsDir() {
  52. // 内层的错误就无视了
  53. oneList, _ := searchBackUpSubFile(fullPath)
  54. if oneList != nil {
  55. fileFullPathList = append(fileFullPathList, oneList...)
  56. }
  57. } else {
  58. // 这里就是文件了
  59. if filepath.Ext(curFile.Name()) == BackUpExt {
  60. fileFullPathList = append(fileFullPathList, fullPath)
  61. }
  62. }
  63. }
  64. return fileFullPathList, nil
  65. }
  66. const TmpExt = ".csf-tmp"
  67. const BackUpExt = ".csf-bk"