hot_fix_001.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. package hot_fix
  2. import (
  3. "errors"
  4. "os"
  5. "github.com/ChineseSubFinder/ChineseSubFinder/pkg/search"
  6. "github.com/ChineseSubFinder/ChineseSubFinder/pkg"
  7. movieHelper "github.com/ChineseSubFinder/ChineseSubFinder/pkg/logic/movie_helper"
  8. seriesHelper "github.com/ChineseSubFinder/ChineseSubFinder/pkg/logic/series_helper"
  9. "github.com/ChineseSubFinder/ChineseSubFinder/pkg/sub_formatter/old"
  10. "github.com/ChineseSubFinder/ChineseSubFinder/pkg/sub_helper"
  11. "github.com/sirupsen/logrus"
  12. )
  13. /*
  14. 本模块的目标是解决开发过程中遗留的功能缺陷需要升级的问题
  15. 之前字幕的命名不规范,现在需要进行一次批量的替换
  16. chs_en[shooter] -> Chinese(中英,shooter)
  17. */
  18. type HotFix001 struct {
  19. log *logrus.Logger
  20. movieRootDirs []string
  21. seriesRootDirs []string
  22. }
  23. func NewHotFix001(log *logrus.Logger, movieRootDirs []string, seriesRootDirs []string) *HotFix001 {
  24. return &HotFix001{log: log, movieRootDirs: movieRootDirs, seriesRootDirs: seriesRootDirs}
  25. }
  26. func (h HotFix001) GetKey() string {
  27. return "001"
  28. }
  29. func (h HotFix001) Process() (interface{}, error) {
  30. defer func() {
  31. h.log.Infoln("Hotfix", h.GetKey(), "End")
  32. }()
  33. h.log.Infoln("Hotfix", h.GetKey(), "Start...")
  34. return h.process()
  35. }
  36. func (h HotFix001) process() (OutStruct001, error) {
  37. outStruct := OutStruct001{}
  38. outStruct.RenamedFiles = make([]string, 0)
  39. outStruct.ErrFiles = make([]string, 0)
  40. for i, dir := range h.movieRootDirs {
  41. h.log.Infoln("Fix Movie Dir Index", i, dir, "Start...")
  42. fixMovie, err := h.fixMovie(dir)
  43. if err != nil {
  44. h.log.Errorln("Fix Movie Dir Index", i, dir, "End With Error", err)
  45. return outStruct, err
  46. }
  47. outStruct.RenamedFiles = append(outStruct.RenamedFiles, fixMovie.RenamedFiles...)
  48. outStruct.ErrFiles = append(outStruct.ErrFiles, fixMovie.ErrFiles...)
  49. h.log.Infoln("Fix Movie Dir Index", i, dir, "End...")
  50. }
  51. for i, dir := range h.seriesRootDirs {
  52. h.log.Infoln("Fix Series Dir Index", i, dir, "Start...")
  53. fixSeries, err := h.fixSeries(dir)
  54. if err != nil {
  55. h.log.Errorln("Fix Series Dir Index", i, dir, "End With Error", err)
  56. return outStruct, err
  57. }
  58. outStruct.RenamedFiles = append(outStruct.RenamedFiles, fixSeries.RenamedFiles...)
  59. outStruct.ErrFiles = append(outStruct.ErrFiles, fixSeries.ErrFiles...)
  60. h.log.Infoln("Fix Series Dir Index", i, dir, "End...")
  61. }
  62. return outStruct, nil
  63. }
  64. func (h HotFix001) fixMovie(movieRootDir string) (OutStruct001, error) {
  65. var err error
  66. outStruct := OutStruct001{}
  67. outStruct.RenamedFiles = make([]string, 0)
  68. outStruct.ErrFiles = make([]string, 0)
  69. if pkg.IsDir(movieRootDir) == false {
  70. return outStruct, errors.New("movieRootDir path not exist: " + movieRootDir)
  71. }
  72. // 先找出有那些电影文件夹和连续剧文件夹
  73. var movieFullPathList = make([]string, 0)
  74. movieFullPathList, err = search.MatchedVideoFile(h.log, movieRootDir)
  75. if err != nil {
  76. return outStruct, err
  77. }
  78. // 搜索所有的字幕,找到相关的字幕进行修改
  79. for _, one := range movieFullPathList {
  80. found := false
  81. var fitMovieNameSubList = make([]string, 0)
  82. found, _, fitMovieNameSubList, err = movieHelper.MovieHasChineseSub(h.log, one)
  83. if err != nil || found == false {
  84. continue
  85. }
  86. // 判断是否是符合要求
  87. for _, fitSubName := range fitMovieNameSubList {
  88. bFix, _, newSubFileName := old.IsOldVersionSubPrefixName(fitSubName)
  89. if bFix == false {
  90. continue
  91. }
  92. err = os.Rename(fitSubName, newSubFileName)
  93. if err != nil {
  94. outStruct.ErrFiles = append(outStruct.ErrFiles, fitSubName)
  95. continue
  96. }
  97. outStruct.RenamedFiles = append(outStruct.RenamedFiles, newSubFileName)
  98. }
  99. }
  100. return outStruct, nil
  101. }
  102. func (h HotFix001) fixSeries(seriesRootDir string) (OutStruct001, error) {
  103. var err error
  104. outStruct := OutStruct001{}
  105. outStruct.RenamedFiles = make([]string, 0)
  106. outStruct.ErrFiles = make([]string, 0)
  107. if pkg.IsDir(seriesRootDir) == false {
  108. return outStruct, errors.New("seriesRootDir path not exist: " + seriesRootDir)
  109. }
  110. // 先找出有那些电影文件夹和连续剧文件夹
  111. seriesDirList, err := seriesHelper.GetSeriesList(h.log, seriesRootDir)
  112. if err != nil {
  113. return outStruct, err
  114. }
  115. // 连续剧
  116. var seriesSubFiles = make([]string, 0)
  117. for _, oneSeriesDir := range seriesDirList {
  118. seriesSubFiles, err = sub_helper.SearchMatchedSubFileByDir(h.log, oneSeriesDir)
  119. if err != nil {
  120. return outStruct, err
  121. }
  122. // 判断是否是符合要求
  123. for _, fitSubName := range seriesSubFiles {
  124. bFix, _, newSubFileName := old.IsOldVersionSubPrefixName(fitSubName)
  125. if bFix == false {
  126. continue
  127. }
  128. err = os.Rename(fitSubName, newSubFileName)
  129. if err != nil {
  130. outStruct.ErrFiles = append(outStruct.ErrFiles, fitSubName)
  131. continue
  132. }
  133. outStruct.RenamedFiles = append(outStruct.RenamedFiles, newSubFileName)
  134. }
  135. }
  136. return outStruct, nil
  137. }
  138. type OutStruct001 struct {
  139. RenamedFiles []string
  140. ErrFiles []string
  141. }