subSupplierHub.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. package sub_supplier
  2. import (
  3. _interface2 "github.com/allanpk716/ChineseSubFinder/internal/interface"
  4. movie_helper2 "github.com/allanpk716/ChineseSubFinder/internal/logic/movie_helper"
  5. series_helper2 "github.com/allanpk716/ChineseSubFinder/internal/logic/series_helper"
  6. "github.com/allanpk716/ChineseSubFinder/internal/pkg"
  7. "github.com/allanpk716/ChineseSubFinder/internal/types/emby"
  8. "github.com/allanpk716/ChineseSubFinder/internal/types/series"
  9. "github.com/sirupsen/logrus"
  10. "gopkg.in/errgo.v2/fmt/errors"
  11. "path/filepath"
  12. )
  13. type SubSupplierHub struct {
  14. Suppliers []_interface2.ISupplier
  15. log *logrus.Logger
  16. }
  17. func NewSubSupplierHub(one _interface2.ISupplier,_inSupplier ..._interface2.ISupplier) *SubSupplierHub {
  18. s := SubSupplierHub{}
  19. s.log = pkg.GetLogger()
  20. s.Suppliers = make([]_interface2.ISupplier, 0)
  21. s.Suppliers = append(s.Suppliers, one)
  22. if len(_inSupplier) > 0 {
  23. for _, supplier := range _inSupplier {
  24. s.Suppliers = append(s.Suppliers, supplier)
  25. }
  26. }
  27. return &s
  28. }
  29. // DownloadSub4Movie 某一个电影字幕下载,下载完毕后,返回下载缓存每个字幕的位置
  30. func (d SubSupplierHub) DownloadSub4Movie(videoFullPath string, index int) ([]string, error) {
  31. // 跳过中文的电影,不是一定要跳过的
  32. skip, err := movie_helper2.SkipChineseMovie(videoFullPath, d.Suppliers[0].GetReqParam())
  33. if err != nil {
  34. d.log.Warnln("SkipChineseMovie", videoFullPath, err)
  35. }
  36. if skip == true {
  37. return nil, nil
  38. }
  39. needDlSub, err := movie_helper2.MovieNeedDlSub(videoFullPath)
  40. if err != nil {
  41. return nil, errors.Newf("MovieNeedDlSub %v %v", videoFullPath , err)
  42. }
  43. if needDlSub == true {
  44. // 需要下载字幕
  45. // 下载所有字幕
  46. subInfos := movie_helper2.OneMovieDlSubInAllSite(d.Suppliers, videoFullPath, index)
  47. // 整理字幕,比如解压什么的
  48. organizeSubFiles, err := pkg.OrganizeDlSubFiles(filepath.Base(videoFullPath), subInfos)
  49. if err != nil {
  50. return nil, errors.Newf("OrganizeDlSubFiles %v %v", videoFullPath , err)
  51. }
  52. // 因为是下载电影,需要合并返回
  53. var outSubFileFullPathList = make([]string, 0)
  54. for s, _ := range organizeSubFiles {
  55. outSubFileFullPathList = append(outSubFileFullPathList, organizeSubFiles[s]...)
  56. }
  57. return outSubFileFullPathList, nil
  58. } else {
  59. // 无需下载字幕
  60. return nil, nil
  61. }
  62. }
  63. // DownloadSub4Series 某一部连续剧的字幕下载,下载完毕后,返回下载缓存每个字幕的位置
  64. func (d SubSupplierHub) DownloadSub4Series(seriesDirPath string, index int) (*series.SeriesInfo, map[string][]string, error) {
  65. // 跳过中文的连续剧,不是一定要跳过的
  66. skip, imdbInfo, err := series_helper2.SkipChineseSeries(seriesDirPath, d.Suppliers[0].GetReqParam())
  67. if err != nil {
  68. d.log.Warnln("SkipChineseSeries", seriesDirPath, err)
  69. }
  70. if skip == true {
  71. return nil, nil, nil
  72. }
  73. // 读取本地的视频和字幕信息
  74. seriesInfo, err := series_helper2.ReadSeriesInfoFromDir(seriesDirPath, imdbInfo)
  75. if err != nil {
  76. return nil, nil, errors.Newf("ReadSeriesInfoFromDir %v %v", seriesDirPath , err)
  77. }
  78. organizeSubFiles, err := d.dlSubFromSeriesInfo(seriesDirPath, index, seriesInfo, err)
  79. if err != nil {
  80. return nil, nil, err
  81. }
  82. return seriesInfo, organizeSubFiles, nil
  83. }
  84. // DownloadSub4SeriesFromEmby 通过 Emby 查询到的信息进行字幕下载,下载完毕后,返回下载缓存每个字幕的位置
  85. func (d SubSupplierHub) DownloadSub4SeriesFromEmby(seriesDirPath string, seriesList []emby.EmbyMixInfo, index int) (*series.SeriesInfo, map[string][]string, error) {
  86. // 跳过中文的连续剧,不是一定要跳过的
  87. skip, imdbInfo, err := series_helper2.SkipChineseSeries(seriesDirPath, d.Suppliers[0].GetReqParam())
  88. if err != nil {
  89. d.log.Warnln("SkipChineseSeries", seriesDirPath, err)
  90. }
  91. if skip == true {
  92. return nil, nil, nil
  93. }
  94. // 读取本地的视频和字幕信息
  95. seriesInfo, err := series_helper2.ReadSeriesInfoFromEmby(seriesDirPath, imdbInfo, seriesList)
  96. if err != nil {
  97. return nil, nil, errors.Newf("ReadSeriesInfoFromDir %v %v", seriesDirPath , err)
  98. }
  99. organizeSubFiles, err := d.dlSubFromSeriesInfo(seriesDirPath, index, seriesInfo, err)
  100. if err != nil {
  101. return nil, nil, err
  102. }
  103. return seriesInfo, organizeSubFiles, nil
  104. }
  105. func (d SubSupplierHub) dlSubFromSeriesInfo(seriesDirPath string, index int, seriesInfo *series.SeriesInfo, err error) (map[string][]string, error) {
  106. // 下载好的字幕
  107. subInfos := series_helper2.OneSeriesDlSubInAllSite(d.Suppliers, seriesInfo, index)
  108. // 整理字幕,比如解压什么的
  109. // 每一集 SxEx - 对应解压整理后的字幕列表
  110. organizeSubFiles, err := pkg.OrganizeDlSubFiles(filepath.Base(seriesDirPath), subInfos)
  111. if err != nil {
  112. return nil, errors.Newf("OrganizeDlSubFiles %v %v", seriesDirPath, err)
  113. }
  114. return organizeSubFiles, nil
  115. }