downloader_helper.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package downloader_helper
  2. import (
  3. subSupplier "github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier"
  4. "github.com/allanpk716/ChineseSubFinder/internal/pkg/downloader"
  5. "github.com/allanpk716/ChineseSubFinder/internal/pkg/global_value"
  6. "github.com/allanpk716/ChineseSubFinder/internal/pkg/my_folder"
  7. "github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
  8. "github.com/allanpk716/ChineseSubFinder/internal/pkg/notify_center"
  9. "github.com/allanpk716/ChineseSubFinder/internal/pkg/rod_helper"
  10. "github.com/allanpk716/ChineseSubFinder/internal/pkg/settings"
  11. "github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_formatter"
  12. "github.com/sirupsen/logrus"
  13. "time"
  14. )
  15. type DownloaderHelper struct {
  16. subSupplierHub *subSupplier.SubSupplierHub
  17. downloader *downloader.Downloader
  18. settings *settings.Settings
  19. logger *logrus.Logger
  20. }
  21. func NewDownloaderHelper(settings *settings.Settings, logger *logrus.Logger, _subSupplierHub *subSupplier.SubSupplierHub) *DownloaderHelper {
  22. return &DownloaderHelper{
  23. subSupplierHub: _subSupplierHub,
  24. settings: settings,
  25. logger: logger,
  26. }
  27. }
  28. // Start 开启任务
  29. func (d *DownloaderHelper) Start() error {
  30. var err error
  31. // 下载实例
  32. d.downloader, err = downloader.NewDownloader(d.subSupplierHub, sub_formatter.GetSubFormatter(d.settings.AdvancedSettings.SubNameFormatter), d.settings, d.logger)
  33. if err != nil {
  34. d.logger.Errorln("NewDownloader", err)
  35. }
  36. // 最后的清理和通知统计
  37. defer func() {
  38. d.logger.Infoln("Download One End...")
  39. notify_center.Notify.Send()
  40. my_util.CloseChrome(d.logger)
  41. rod_helper.Clear()
  42. }()
  43. d.logger.Infoln("Download One Started...")
  44. // 优先级最高。读取特殊文件,启用一些特殊的功能,比如 forced_scan_and_down_sub
  45. err = d.downloader.ReadSpeFile()
  46. if err != nil {
  47. d.logger.Errorln("ReadSpeFile", err)
  48. }
  49. // 从 csf-bk 文件还原时间轴修复前的字幕文件
  50. if d.downloader.NeedRestoreFixTimeLineBK == true {
  51. err = d.downloader.RestoreFixTimelineBK()
  52. if err != nil {
  53. d.logger.Errorln("RestoreFixTimelineBK", err)
  54. }
  55. }
  56. // 先进行扫描
  57. scanResult, err := d.downloader.ScanMovieAndSeriesWait2DownloadSub()
  58. if err != nil {
  59. d.logger.Errorln("ScanMovieAndSeriesWait2DownloadSub", err)
  60. return err
  61. }
  62. // 过滤出需要下载的视频有那些,并放入队列中
  63. err = d.downloader.FilterMovieAndSeriesNeedDownload(scanResult)
  64. if err != nil {
  65. d.logger.Errorln("FilterMovieAndSeriesNeedDownload", err)
  66. return err
  67. }
  68. // 开始下载,电影
  69. err = d.downloader.DownloadSub4Movie()
  70. if err != nil {
  71. d.logger.Errorln("DownloadSub4Movie", err)
  72. return err
  73. }
  74. // 开始下载,连续剧
  75. err = d.downloader.DownloadSub4Series()
  76. if err != nil {
  77. d.logger.Errorln("DownloadSub4Series", err)
  78. return err
  79. }
  80. // 刷新 Emby 的字幕,下载完毕字幕了,就统一刷新一下
  81. err = d.downloader.RefreshEmbySubList()
  82. if err != nil {
  83. d.logger.Errorln("RefreshEmbySubList", err)
  84. return err
  85. }
  86. d.logger.Infoln("Will Scan SubFixCache Folder, Clear files that are more than 7 * 24 hours old")
  87. // 清理多天没有使用的时间轴字幕校正缓存文件
  88. err = my_folder.ClearIdleSubFixCacheFolder(d.logger, global_value.DefSubFixCacheFolder(), 7*24*time.Hour)
  89. if err != nil {
  90. d.logger.Errorln("ClearIdleSubFixCacheFolder", err)
  91. return err
  92. }
  93. return nil
  94. }
  95. // Cancel 提前取消任务的执行
  96. func (d *DownloaderHelper) Cancel() {
  97. d.downloader.Cancel()
  98. }