downloader_helper.go 3.4 KB

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