downloader_helper.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package downloader_helper
  2. import (
  3. commonValue "github.com/allanpk716/ChineseSubFinder/internal/common"
  4. "github.com/allanpk716/ChineseSubFinder/internal/pkg/downloader"
  5. "github.com/allanpk716/ChineseSubFinder/internal/pkg/notify_center"
  6. "github.com/allanpk716/ChineseSubFinder/internal/pkg/something_static"
  7. "github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_formatter"
  8. "github.com/allanpk716/ChineseSubFinder/internal/types"
  9. "github.com/sirupsen/logrus"
  10. )
  11. type DownloaderHelper struct {
  12. downloader *downloader.Downloader
  13. logger *logrus.Logger
  14. }
  15. func NewDownloaderHelper() *DownloaderHelper {
  16. return &DownloaderHelper{}
  17. }
  18. func (d DownloaderHelper) Start(config types.Config) error {
  19. var err error
  20. // 清理通知中心
  21. notify_center.Notify.Clear()
  22. updateTimeString, code, err := something_static.GetCodeFromWeb()
  23. if err != nil {
  24. notify_center.Notify.Add("GetSubhdCode", "GetCodeFromWeb,"+err.Error())
  25. d.logger.Errorln("something_static.GetCodeFromWeb", err)
  26. d.logger.Errorln("Skip Subhd download")
  27. // 没有则需要清空
  28. commonValue.SubhdCode = ""
  29. } else {
  30. d.logger.Infoln("GetCode", updateTimeString, code)
  31. commonValue.SubhdCode = code
  32. }
  33. // 下载实例
  34. d.downloader, err = downloader.NewDownloader(sub_formatter.GetSubFormatter(config.SubNameFormatter),
  35. types.ReqParam{
  36. HttpProxy: config.HttpProxy,
  37. DebugMode: config.DebugMode,
  38. SaveMultiSub: config.SaveMultiSub,
  39. Threads: config.Threads,
  40. SubTypePriority: config.SubTypePriority,
  41. WhenSubSupplierInvalidWebHook: config.WhenSubSupplierInvalidWebHook,
  42. EmbyConfig: config.EmbyConfig,
  43. SaveOneSeasonSub: config.SaveOneSeasonSub,
  44. SubTimelineFixerConfig: config.SubTimelineFixerConfig,
  45. FixTimeLine: config.FixTimeLine,
  46. })
  47. if err != nil {
  48. d.logger.Errorln("NewDownloader", err)
  49. }
  50. defer func() {
  51. d.logger.Infoln("Download One End...")
  52. notify_center.Notify.Send()
  53. //my_util.CloseChrome()
  54. //rod_helper.Clear()
  55. }()
  56. d.logger.Infoln("Download One Started...")
  57. // 优先级最高。读取特殊文件,启用一些特殊的功能,比如 forced_scan_and_down_sub
  58. err = d.downloader.ReadSpeFile()
  59. if err != nil {
  60. d.logger.Errorln("ReadSpeFile", err)
  61. }
  62. // 从 csf-bk 文件还原时间轴修复前的字幕文件
  63. if d.downloader.NeedRestoreFixTimeLineBK == true {
  64. err = d.downloader.RestoreFixTimelineBK(config.MovieFolder, config.SeriesFolder)
  65. if err != nil {
  66. d.logger.Errorln("RestoreFixTimelineBK", err)
  67. }
  68. }
  69. // 刷新 Emby 的字幕,如果下载了字幕倒是没有刷新,则先刷新一次,便于后续的 Emby api 统计逻辑
  70. err = d.downloader.RefreshEmbySubList()
  71. if err != nil {
  72. d.logger.Errorln("RefreshEmbySubList", err)
  73. return err
  74. }
  75. err = d.downloader.GetUpdateVideoListFromEmby(config.MovieFolder, config.SeriesFolder)
  76. if err != nil {
  77. d.logger.Errorln("GetUpdateVideoListFromEmby", err)
  78. return err
  79. }
  80. // 开始下载,电影
  81. err = d.downloader.DownloadSub4Movie(config.MovieFolder)
  82. if err != nil {
  83. d.logger.Errorln("DownloadSub4Movie", err)
  84. return err
  85. }
  86. // 开始下载,连续剧
  87. err = d.downloader.DownloadSub4Series(config.SeriesFolder)
  88. if err != nil {
  89. d.logger.Errorln("DownloadSub4Series", err)
  90. return err
  91. }
  92. // 刷新 Emby 的字幕,下载完毕字幕了,就统一刷新一下
  93. err = d.downloader.RefreshEmbySubList()
  94. if err != nil {
  95. d.logger.Errorln("RefreshEmbySubList", err)
  96. return err
  97. }
  98. return nil
  99. }
  100. func (d DownloaderHelper) Stop() {
  101. d.downloader.Cancel()
  102. }