Explorar el Código

正在重构下载部分

Signed-off-by: allan716 <[email protected]>
allan716 hace 3 años
padre
commit
9acd496f14

+ 3 - 1
cmd/chinesesubfinder/main.go

@@ -4,6 +4,7 @@ import (
 	"fmt"
 	"github.com/allanpk716/ChineseSubFinder/internal/backend"
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/cron_helper"
+	"github.com/allanpk716/ChineseSubFinder/internal/logic/file_downloader"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/global_value"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
@@ -53,7 +54,8 @@ func main() {
 	//	}
 	//}
 	// ----------------------------------------------
-	cronHelper := cron_helper.NewCronHelper(log_helper.GetLogger(), settings.GetSettings())
+	fileDownloader := file_downloader.NewFileDownloader(settings.GetSettings(), log_helper.GetLogger())
+	cronHelper := cron_helper.NewCronHelper(fileDownloader)
 	if settings.GetSettings().UserInfo.Username == "" || settings.GetSettings().UserInfo.Password == "" {
 		// 如果没有完成,那么就不开启
 		log_helper.GetLogger().Infoln("Need do Setup")

+ 5 - 4
internal/backend/controllers/base/proxy.go

@@ -33,10 +33,11 @@ func (cb *ControllerBase) CheckProxyHandler(c *gin.Context) {
 	subSupplierHub := subSupplier.NewSubSupplierHub(
 		tmpSettings,
 		cb.log,
-		zimuku.NewSupplier(tmpSettings, cb.log),
-		xunlei.NewSupplier(tmpSettings, cb.log),
-		shooter.NewSupplier(tmpSettings, cb.log),
-		subhd.NewSupplier(tmpSettings, cb.log),
+		// 这里无需传递下载字幕的缓存实例
+		zimuku.NewSupplier(tmpSettings, cb.log, nil),
+		xunlei.NewSupplier(tmpSettings, cb.log, nil),
+		shooter.NewSupplier(tmpSettings, cb.log, nil),
+		subhd.NewSupplier(tmpSettings, cb.log, nil),
 	)
 
 	outStatus := subSupplierHub.CheckSubSiteStatus()

+ 6 - 0
internal/ifaces/iSupplier.go

@@ -1,8 +1,10 @@
 package ifaces
 
 import (
+	"github.com/allanpk716/ChineseSubFinder/internal/pkg/settings"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/series"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/supplier"
+	"github.com/sirupsen/logrus"
 )
 
 type ISupplier interface {
@@ -14,6 +16,10 @@ type ISupplier interface {
 
 	OverDailyDownloadLimit() bool
 
+	GetLogger() *logrus.Logger
+
+	GetSettings() *settings.Settings
+
 	GetSubListFromFile4Movie(filePath string) ([]supplier.SubInfo, error)
 
 	GetSubListFromFile4Series(seriesInfo *series.SeriesInfo) ([]supplier.SubInfo, error)

+ 10 - 7
internal/logic/cron_helper/cron_helper.go

@@ -1,6 +1,7 @@
 package cron_helper
 
 import (
+	"github.com/allanpk716/ChineseSubFinder/internal/logic/file_downloader"
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/task_queue"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/common"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/downloader"
@@ -15,8 +16,9 @@ import (
 )
 
 type CronHelper struct {
-	stopping                bool                   // 正在停止
-	cronHelperRunning       bool                   // 这个是定时器启动的状态,它为true,不代表核心函数在执行
+	stopping                bool // 正在停止
+	cronHelperRunning       bool // 这个是定时器启动的状态,它为true,不代表核心函数在执行
+	fileDownloader          *file_downloader.FileDownloader
 	downloadQueue           *task_queue.TaskQueue  // 需要下载的视频的队列
 	downloader              *downloader.Downloader // 下载者线程
 	cronLock                sync.Mutex             // 锁
@@ -28,13 +30,14 @@ type CronHelper struct {
 	entryIDQueueDownloader  cron.EntryID
 }
 
-func NewCronHelper(_log *logrus.Logger, _sets *settings.Settings) *CronHelper {
+func NewCronHelper(fileDownloader *file_downloader.FileDownloader) *CronHelper {
 
 	ch := CronHelper{
-		log:  _log,
-		sets: _sets,
+		fileDownloader: fileDownloader,
+		log:            fileDownloader.Log,
+		sets:           fileDownloader.Settings,
 		// 实例化下载队列
-		downloadQueue: task_queue.NewTaskQueue("LocalSubDownloadQueue", _sets, _log),
+		downloadQueue: task_queue.NewTaskQueue("LocalSubDownloadQueue", fileDownloader.Settings, fileDownloader.Log),
 	}
 
 	return &ch
@@ -59,7 +62,7 @@ func (ch *CronHelper) Start(runImmediately bool) {
 	// 初始化下载者,里面的两个 func 需要使用定时器启动 SupplierCheck QueueDownloader
 	ch.downloader = downloader.NewDownloader(
 		sub_formatter.GetSubFormatter(ch.sets.AdvancedSettings.SubNameFormatter),
-		ch.sets, ch.log, ch.downloadQueue)
+		ch.fileDownloader, ch.downloadQueue)
 	// ----------------------------------------------
 	// 判断扫描任务的时间间隔是否符合要求,不符合则重写默认值
 	_, err := cron.ParseStandard(ch.sets.CommonSettings.ScanInterval)

+ 59 - 0
internal/logic/file_downloader/downloader_hub.go

@@ -0,0 +1,59 @@
+package file_downloader
+
+import (
+	"crypto/sha256"
+	"fmt"
+	"github.com/allanpk716/ChineseSubFinder/internal/pkg/download_file_cache"
+	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
+	"github.com/allanpk716/ChineseSubFinder/internal/pkg/settings"
+	"github.com/allanpk716/ChineseSubFinder/internal/types/language"
+	"github.com/allanpk716/ChineseSubFinder/internal/types/supplier"
+	"github.com/sirupsen/logrus"
+	"path/filepath"
+)
+
+type FileDownloader struct {
+	Settings          *settings.Settings
+	Log               *logrus.Logger
+	downloadFileCache *download_file_cache.DownloadFileCache
+}
+
+func NewFileDownloader(settings *settings.Settings, log *logrus.Logger) *FileDownloader {
+	return &FileDownloader{Settings: settings, Log: log,
+		downloadFileCache: download_file_cache.NewDownloadFileCache(settings)}
+}
+
+func (f *FileDownloader) Get(fromWhere string, topN int64, fileName string,
+	inLanguage language.MyLanguage, fileDownloadUrl string,
+	score int64, offset int64) (*supplier.SubInfo, error) {
+
+	fileUID := fmt.Sprintf("%x", sha256.Sum256([]byte(fileDownloadUrl)))
+
+	found, subInfo, err := f.downloadFileCache.Get(fileUID)
+	if err != nil {
+		return nil, err
+	}
+	// 如果不存在那么就先下载,然后再存入缓存中
+	if found == false {
+		fileData, filename, err := my_util.DownFile(f.Log, fileDownloadUrl, f.Settings.AdvancedSettings.ProxySettings)
+		if err != nil {
+			return nil, err
+		}
+		ext := ""
+		if filename == "" {
+			ext = filepath.Ext(fileDownloadUrl)
+		} else {
+			ext = filepath.Ext(filename)
+		}
+		inSubInfo := supplier.NewSubInfo(fromWhere, topN, fileName, inLanguage, fileDownloadUrl, score, offset, ext, fileData)
+		err = f.downloadFileCache.Add(inSubInfo)
+		if err != nil {
+			return nil, err
+		}
+
+		return inSubInfo, nil
+	} else {
+		// 如果已经存在缓存中,那么就直接返回
+		return subInfo, nil
+	}
+}

+ 10 - 7
internal/logic/pre_download_process/pre_download_proces.go

@@ -3,6 +3,7 @@ package pre_download_process
 import (
 	"errors"
 	"fmt"
+	"github.com/allanpk716/ChineseSubFinder/internal/logic/file_downloader"
 	subSupplier "github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier"
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier/shooter"
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier/subhd"
@@ -25,13 +26,15 @@ type PreDownloadProcess struct {
 
 	sets           *settings.Settings
 	log            *logrus.Logger
+	fileDownloader *file_downloader.FileDownloader
 	SubSupplierHub *subSupplier.SubSupplierHub
 }
 
-func NewPreDownloadProcess(_log *logrus.Logger, _sets *settings.Settings) *PreDownloadProcess {
+func NewPreDownloadProcess(_log *logrus.Logger, _sets *settings.Settings, fileDownloader *file_downloader.FileDownloader) *PreDownloadProcess {
 	return &PreDownloadProcess{
-		log:  _log,
-		sets: _sets,
+		log:            _log,
+		sets:           _sets,
+		fileDownloader: fileDownloader,
 	}
 }
 
@@ -89,13 +92,13 @@ func (p *PreDownloadProcess) Init() *PreDownloadProcess {
 	p.SubSupplierHub = subSupplier.NewSubSupplierHub(
 		p.sets,
 		p.log,
-		zimuku.NewSupplier(p.sets, p.log),
-		xunlei.NewSupplier(p.sets, p.log),
-		shooter.NewSupplier(p.sets, p.log),
+		zimuku.NewSupplier(p.sets, p.log, p.fileDownloader),
+		xunlei.NewSupplier(p.sets, p.log, p.fileDownloader),
+		shooter.NewSupplier(p.sets, p.log, p.fileDownloader),
 	)
 	if common2.SubhdCode != "" {
 		// 如果找到 code 了,那么就可以继续用这个实例
-		p.SubSupplierHub.AddSubSupplier(subhd.NewSupplier(p.sets, p.log))
+		p.SubSupplierHub.AddSubSupplier(subhd.NewSupplier(p.sets, p.log, p.fileDownloader))
 	}
 	// ------------------------------------------------------------------------
 	// 清理自定义的 rod 缓存目录

+ 1 - 1
internal/logic/series_helper/seriesHelper_test.go

@@ -8,7 +8,7 @@ import (
 func TestReadSeriesInfoFromDir(t *testing.T) {
 
 	series := unit_test_helper.GetTestDataResourceRootPath([]string{"series", "Loki"}, 4, false)
-	seriesInfo, err := ReadSeriesInfoFromDir(series, false)
+	seriesInfo, err := ReadSeriesInfoFromDir(series, 90, false)
 	if err != nil {
 		t.Fatal(err)
 	}

+ 20 - 10
internal/logic/sub_supplier/shooter/shooter.go

@@ -4,6 +4,7 @@ import (
 	"crypto/md5"
 	"errors"
 	"fmt"
+	"github.com/allanpk716/ChineseSubFinder/internal/logic/file_downloader"
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/task_queue"
 	pkgcommon "github.com/allanpk716/ChineseSubFinder/internal/pkg/common"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/decode"
@@ -23,20 +24,22 @@ import (
 )
 
 type Supplier struct {
-	settings *settings.Settings
-	log      *logrus.Logger
-	topic    int
-	isAlive  bool
+	settings       *settings.Settings
+	log            *logrus.Logger
+	fileDownloader *file_downloader.FileDownloader
+	topic          int
+	isAlive        bool
 }
 
-func NewSupplier(_settings *settings.Settings, _logger *logrus.Logger) *Supplier {
+func NewSupplier(fileDownloader *file_downloader.FileDownloader) *Supplier {
 
 	sup := Supplier{}
-	sup.log = _logger
+	sup.log = fileDownloader.Log
+	sup.fileDownloader = fileDownloader
 	sup.topic = common2.DownloadSubsPerSite
 	sup.isAlive = true // 默认是可以使用的,如果 check 后,再调整状态
 
-	sup.settings = _settings
+	sup.settings = fileDownloader.Settings
 	if sup.settings.AdvancedSettings.Topic > 0 && sup.settings.AdvancedSettings.Topic != sup.topic {
 		sup.topic = sup.settings.AdvancedSettings.Topic
 	}
@@ -67,6 +70,14 @@ func (s *Supplier) OverDailyDownloadLimit() bool {
 	return false
 }
 
+func (s *Supplier) GetLogger() *logrus.Logger {
+	return s.log
+}
+
+func (s *Supplier) GetSettings() *settings.Settings {
+	return s.settings
+}
+
 func (s *Supplier) GetSupplierName() string {
 	return common2.SubSiteShooter
 }
@@ -132,7 +143,7 @@ func (s *Supplier) getSubListFromFile(filePath string) ([]supplier.SubInfo, erro
 				subExt = "." + subExt
 			}
 
-			data, _, err := my_util.DownFile(s.log, file.Link)
+			subInfo, err := s.fileDownloader.Get(s.GetSupplierName(), int64(i), fileName, language.ChineseSimple, file.Link, 0, shooter.Delay)
 			if err != nil {
 				s.log.Error(err)
 				continue
@@ -144,8 +155,7 @@ func (s *Supplier) getSubListFromFile(filePath string) ([]supplier.SubInfo, erro
 				s.log.Warningln(s.GetSupplierName(), "getSubListFromFile.AddDailyDownloadCount", err)
 			}
 
-			onSub := supplier.NewSubInfo(s.GetSupplierName(), int64(i), fileName, language.ChineseSimple, file.Link, 0, shooter.Delay, subExt, data)
-			outSubInfoList = append(outSubInfoList, *onSub)
+			outSubInfoList = append(outSubInfoList, *subInfo)
 			// 如果够了那么多个字幕就返回
 			if len(outSubInfoList) >= s.topic {
 				return outSubInfoList, nil

+ 2 - 1
internal/logic/sub_supplier/shooter/shooter_test.go

@@ -1,6 +1,7 @@
 package shooter
 
 import (
+	"github.com/allanpk716/ChineseSubFinder/internal/logic/file_downloader"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/settings"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/unit_test_helper"
@@ -26,7 +27,7 @@ func TestNewSupplier(t *testing.T) {
 	if err != nil {
 		t.Fatal(err)
 	}
-	shooter := NewSupplier(settings.NewSettings(), log_helper.GetLogger())
+	shooter := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger()))
 	outList, err := shooter.getSubListFromFile(gVideoFPath)
 	if err != nil {
 		t.Error(err)

+ 3 - 3
internal/logic/sub_supplier/subSupplierHub.go

@@ -22,10 +22,10 @@ type SubSupplierHub struct {
 	log *logrus.Logger
 }
 
-func NewSubSupplierHub(_settings *settings.Settings, _logger *logrus.Logger, one ifaces.ISupplier, _inSupplier ...ifaces.ISupplier) *SubSupplierHub {
+func NewSubSupplierHub(one ifaces.ISupplier, _inSupplier ...ifaces.ISupplier) *SubSupplierHub {
 	s := SubSupplierHub{}
-	s.settings = _settings
-	s.log = _logger
+	s.settings = one.GetSettings()
+	s.log = one.GetLogger()
 	s.Suppliers = make([]ifaces.ISupplier, 0)
 	s.Suppliers = append(s.Suppliers, one)
 	if len(_inSupplier) > 0 {

+ 20 - 9
internal/logic/sub_supplier/subhd/subhd.go

@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"github.com/PuerkitoBio/goquery"
 	"github.com/Tnze/go.num/v2/zh"
+	"github.com/allanpk716/ChineseSubFinder/internal/logic/file_downloader"
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/task_queue"
 	pkgcommon "github.com/allanpk716/ChineseSubFinder/internal/pkg/common"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/decode"
@@ -33,21 +34,23 @@ import (
 )
 
 type Supplier struct {
-	settings  *settings.Settings
-	log       *logrus.Logger
-	topic     int
-	tt        time.Duration
-	debugMode bool
-	isAlive   bool
+	settings       *settings.Settings
+	log            *logrus.Logger
+	fileDownloader *file_downloader.FileDownloader
+	topic          int
+	tt             time.Duration
+	debugMode      bool
+	isAlive        bool
 }
 
-func NewSupplier(_settings *settings.Settings, _logger *logrus.Logger) *Supplier {
+func NewSupplier(fileDownloader *file_downloader.FileDownloader) *Supplier {
 
 	sup := Supplier{}
-	sup.log = _logger
+	sup.log = fileDownloader.Log
+	sup.fileDownloader = fileDownloader
 	sup.topic = common2.DownloadSubsPerSite
 
-	sup.settings = _settings
+	sup.settings = fileDownloader.Settings
 	if sup.settings.AdvancedSettings.Topic > 0 && sup.settings.AdvancedSettings.Topic != sup.topic {
 		sup.topic = sup.settings.AdvancedSettings.Topic
 	}
@@ -102,6 +105,14 @@ func (s *Supplier) OverDailyDownloadLimit() bool {
 	return false
 }
 
+func (s *Supplier) GetLogger() *logrus.Logger {
+	return s.log
+}
+
+func (s *Supplier) GetSettings() *settings.Settings {
+	return s.settings
+}
+
 func (s *Supplier) GetSupplierName() string {
 	return common2.SubSiteSubHd
 }

+ 5 - 4
internal/logic/sub_supplier/subhd/subhd_test.go

@@ -2,6 +2,7 @@ package subhd
 
 import (
 	"fmt"
+	"github.com/allanpk716/ChineseSubFinder/internal/logic/file_downloader"
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/series_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/settings"
@@ -27,7 +28,7 @@ func TestSupplier_GetSubListFromFile(t *testing.T) {
 	rootDir := unit_test_helper.GetTestDataResourceRootPath([]string{"sub_spplier"}, 5, true)
 	movie1 := filepath.Join(rootDir, "zimuku", "movies", "消失爱人 (2016)", "消失爱人 (2016) 720p AAC.rmvb")
 
-	subhd := NewSupplier(settings.NewSettings(), log_helper.GetLogger())
+	subhd := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger()))
 	outList, err := subhd.getSubListFromFile4Movie(movie1)
 	if err != nil {
 		t.Error(err)
@@ -60,11 +61,11 @@ func TestSupplier_GetSubListFromFile4Series(t *testing.T) {
 	rootDir := unit_test_helper.GetTestDataResourceRootPath([]string{"sub_spplier"}, 5, true)
 	ser := filepath.Join(rootDir, "zimuku", "series", "黄石 (2018)")
 	// 读取本地的视频和字幕信息
-	seriesInfo, err := series_helper.ReadSeriesInfoFromDir(ser, false)
+	seriesInfo, err := series_helper.ReadSeriesInfoFromDir(ser, 90, false)
 	if err != nil {
 		t.Fatal(err)
 	}
-	s := NewSupplier(settings.NewSettings(), log_helper.GetLogger())
+	s := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger()))
 	outList, err := s.GetSubListFromFile4Series(seriesInfo)
 	if err != nil {
 		t.Fatal(err)
@@ -86,7 +87,7 @@ func TestSupplier_getSubListFromKeyword4Movie(t *testing.T) {
 	//imdbID := "tt15299712" // 云南虫谷
 	//imdbID := "tt3626476" // Vacation Friends (2021)
 	getCode()
-	subhd := NewSupplier(settings.NewSettings(), log_helper.GetLogger())
+	subhd := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger()))
 	subInfos, err := subhd.getSubListFromKeyword4Movie(imdbID)
 	if err != nil {
 		t.Fatal(err)

+ 18 - 7
internal/logic/sub_supplier/xunlei/xunlei.go

@@ -4,6 +4,7 @@ import (
 	"crypto/sha1"
 	"errors"
 	"fmt"
+	"github.com/allanpk716/ChineseSubFinder/internal/logic/file_downloader"
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/task_queue"
 	pkgcommon "github.com/allanpk716/ChineseSubFinder/internal/pkg/common"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/decode"
@@ -23,20 +24,22 @@ import (
 )
 
 type Supplier struct {
-	settings *settings.Settings
-	log      *logrus.Logger
-	topic    int
-	isAlive  bool
+	settings       *settings.Settings
+	log            *logrus.Logger
+	fileDownloader *file_downloader.FileDownloader
+	topic          int
+	isAlive        bool
 }
 
-func NewSupplier(_settings *settings.Settings, _logger *logrus.Logger) *Supplier {
+func NewSupplier(fileDownloader *file_downloader.FileDownloader) *Supplier {
 
 	sup := Supplier{}
-	sup.log = _logger
+	sup.log = fileDownloader.Log
+	sup.fileDownloader = fileDownloader
 	sup.topic = common2.DownloadSubsPerSite
 	sup.isAlive = true // 默认是可以使用的,如果 check 后,再调整状态
 
-	sup.settings = _settings
+	sup.settings = fileDownloader.Settings
 	if sup.settings.AdvancedSettings.Topic > 0 && sup.settings.AdvancedSettings.Topic != sup.topic {
 		sup.topic = sup.settings.AdvancedSettings.Topic
 	}
@@ -74,6 +77,14 @@ func (s *Supplier) OverDailyDownloadLimit() bool {
 	return false
 }
 
+func (s *Supplier) GetLogger() *logrus.Logger {
+	return s.log
+}
+
+func (s *Supplier) GetSettings() *settings.Settings {
+	return s.settings
+}
+
 func (s *Supplier) GetSupplierName() string {
 	return common2.SubSiteXunLei
 }

+ 14 - 3
internal/logic/sub_supplier/zimuku/zimuku.go

@@ -4,6 +4,7 @@ import (
 	"fmt"
 	"github.com/PuerkitoBio/goquery"
 	"github.com/Tnze/go.num/v2/zh"
+	"github.com/allanpk716/ChineseSubFinder/internal/logic/file_downloader"
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/task_queue"
 	pkgcommon "github.com/allanpk716/ChineseSubFinder/internal/pkg/common"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/decode"
@@ -32,6 +33,7 @@ import (
 type Supplier struct {
 	settings         *settings.Settings
 	log              *logrus.Logger
+	fileDownloader   *file_downloader.FileDownloader
 	tt               time.Duration
 	debugMode        bool
 	httpProxyAddress string
@@ -39,14 +41,15 @@ type Supplier struct {
 	isAlive          bool
 }
 
-func NewSupplier(_settings *settings.Settings, _logger *logrus.Logger) *Supplier {
+func NewSupplier(fileDownloader *file_downloader.FileDownloader) *Supplier {
 
 	sup := Supplier{}
-	sup.log = _logger
+	sup.log = fileDownloader.Log
+	sup.fileDownloader = fileDownloader
 	sup.topic = common2.DownloadSubsPerSite
 	sup.isAlive = true // 默认是可以使用的,如果 check 后,再调整状态
 
-	sup.settings = _settings
+	sup.settings = fileDownloader.Settings
 	if sup.settings.AdvancedSettings.Topic > 0 && sup.settings.AdvancedSettings.Topic != sup.topic {
 		sup.topic = sup.settings.AdvancedSettings.Topic
 	}
@@ -110,6 +113,14 @@ func (s *Supplier) OverDailyDownloadLimit() bool {
 	return false
 }
 
+func (s *Supplier) GetLogger() *logrus.Logger {
+	return s.log
+}
+
+func (s *Supplier) GetSettings() *settings.Settings {
+	return s.settings
+}
+
 func (s *Supplier) GetSupplierName() string {
 	return common2.SubSiteZiMuKu
 }

+ 7 - 6
internal/logic/sub_supplier/zimuku/zimuku_test.go

@@ -1,6 +1,7 @@
 package zimuku
 
 import (
+	"github.com/allanpk716/ChineseSubFinder/internal/logic/file_downloader"
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/series_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/log_helper"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/rod_helper"
@@ -22,7 +23,7 @@ func TestSupplier_GetSubListFromKeyword(t *testing.T) {
 
 	//imdbId1 := "tt3228774"
 	videoName := "黑白魔女库伊拉"
-	s := NewSupplier(settings.NewSettings(), log_helper.GetLogger())
+	s := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger()))
 	outList, err := s.getSubListFromKeyword(browser, videoName)
 	if err != nil {
 		t.Error(err)
@@ -52,7 +53,7 @@ func TestSupplier_GetSubListFromFile(t *testing.T) {
 
 	rootDir := unit_test_helper.GetTestDataResourceRootPath([]string{"sub_spplier"}, 5, true)
 	movie1 := filepath.Join(rootDir, "zimuku", "movies", "The Devil All the Time (2020)", "The Devil All the Time (2020) WEBDL-1080p.mkv")
-	s := NewSupplier(settings.NewSettings(), log_helper.GetLogger())
+	s := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger()))
 	outList, err := s.getSubListFromMovie(browser, movie1)
 	if err != nil {
 		t.Error(err)
@@ -73,7 +74,7 @@ func TestSupplier_GetSubListFromFile4Series(t *testing.T) {
 	rootDir := unit_test_helper.GetTestDataResourceRootPath([]string{"sub_spplier"}, 5, true)
 	ser := filepath.Join(rootDir, "zimuku", "series", "黄石 (2018)")
 	// 读取本地的视频和字幕信息
-	seriesInfo, err := series_helper.ReadSeriesInfoFromDir(ser, false)
+	seriesInfo, err := series_helper.ReadSeriesInfoFromDir(ser, 90, false)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -84,7 +85,7 @@ func TestSupplier_GetSubListFromFile4Series(t *testing.T) {
 	//epsMap[1] = 4
 	//series_helper2.SetTheSpecifiedEps2Download(seriesInfo, epsMap)
 
-	s := NewSupplier(settings.NewSettings(), log_helper.GetLogger())
+	s := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger()))
 	outList, err := s.GetSubListFromFile4Series(seriesInfo)
 	if err != nil {
 		t.Fatal(err)
@@ -113,7 +114,7 @@ func TestSupplier_getSubListFromKeyword(t *testing.T) {
 	//imdbID := "tt15299712" // 云南虫谷
 	//imdbID := "tt3626476"  // Vacation Friends (2021)
 	imdbID := "tt11192306" // Superman.and.Lois
-	zimuku := NewSupplier(settings.NewSettings(), log_helper.GetLogger())
+	zimuku := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger()))
 	subInfos, err := zimuku.getSubListFromKeyword(browser, imdbID)
 	if err != nil {
 		t.Fatal(err)
@@ -138,7 +139,7 @@ func TestSupplier_step3(t *testing.T) {
 
 func TestSupplier_CheckAlive(t *testing.T) {
 
-	s := NewSupplier(settings.NewSettings(), log_helper.GetLogger())
+	s := NewSupplier(file_downloader.NewFileDownloader(settings.NewSettings(), log_helper.GetLogger()))
 	alive, _ := s.CheckAlive()
 	if alive == false {
 		t.Fatal("CheckAlive == false")

+ 6 - 8
internal/pkg/downloader/downloader.go

@@ -4,6 +4,7 @@ import (
 	"errors"
 	"fmt"
 	"github.com/allanpk716/ChineseSubFinder/internal/ifaces"
+	"github.com/allanpk716/ChineseSubFinder/internal/logic/file_downloader"
 	markSystem "github.com/allanpk716/ChineseSubFinder/internal/logic/mark_system"
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/series_helper"
 	subSupplier "github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier"
@@ -28,6 +29,7 @@ import (
 type Downloader struct {
 	settings                 *settings.Settings
 	log                      *logrus.Logger
+	fileDownloader           *file_downloader.FileDownloader
 	ctx                      context.Context
 	cancel                   context.CancelFunc
 	subSupplierHub           *subSupplier.SubSupplierHub                  // 字幕提供源的集合,这个需要定时进行扫描,这些字幕源是否有效,以及下载验证码信息
@@ -39,13 +41,13 @@ type Downloader struct {
 	downloadQueue            *task_queue.TaskQueue                        // 需要下载的视频的队列
 }
 
-func NewDownloader(inSubFormatter ifaces.ISubFormatter, _settings *settings.Settings, log *logrus.Logger, downloadQueue *task_queue.TaskQueue) *Downloader {
+func NewDownloader(inSubFormatter ifaces.ISubFormatter, fileDownloader *file_downloader.FileDownloader, downloadQueue *task_queue.TaskQueue) *Downloader {
 
 	var downloader Downloader
 	downloader.subFormatter = inSubFormatter
-	downloader.log = log
+	downloader.log = fileDownloader.Log
 	// 参入设置信息
-	downloader.settings = _settings
+	downloader.settings = fileDownloader.Settings
 	// 检测是否某些参数超出范围
 	downloader.settings.Check()
 	// 这里就不单独弄一个 settings.SubNameFormatter 字段来传递值了,因为 inSubFormatter 就已经知道是什么 formatter 了
@@ -110,11 +112,7 @@ func (d *Downloader) SupplierCheck() {
 		//	done <- nil
 		//}
 
-		subSupplierHub := subSupplier.NewSubSupplierHub(
-			d.settings,
-			d.log,
-			xunlei.NewSupplier(d.settings, d.log),
-		)
+		subSupplierHub := subSupplier.NewSubSupplierHub(xunlei.NewSupplier(d.fileDownloader))
 		d.subSupplierHub = subSupplierHub
 		done <- nil
 	}()

+ 8 - 7
internal/pkg/video_scan_and_refresh_helper/video_scan_and_refresh_helper.go

@@ -2,11 +2,12 @@ package video_scan_and_refresh_helper
 
 import (
 	embyHelper "github.com/allanpk716/ChineseSubFinder/internal/logic/emby_helper"
+	"github.com/allanpk716/ChineseSubFinder/internal/logic/file_downloader"
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/forced_scan_and_down_sub"
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/restore_fix_timeline_bk"
 	seriesHelper "github.com/allanpk716/ChineseSubFinder/internal/logic/series_helper"
 	subSupplier "github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier"
-	"github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier/zimuku"
+	"github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier/xunlei"
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/task_queue"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/decode"
 	"github.com/allanpk716/ChineseSubFinder/internal/pkg/my_util"
@@ -20,8 +21,9 @@ import (
 )
 
 type VideoScanAndRefreshHelper struct {
-	settings                 *settings.Settings          // 设置的实例
-	log                      *logrus.Logger              // 日志实例
+	settings                 *settings.Settings // 设置的实例
+	log                      *logrus.Logger     // 日志实例
+	fileDownloader           *file_downloader.FileDownloader
 	needForcedScanAndDownSub bool                        // 将会强制扫描所有的视频,下载字幕,替换已经存在的字幕,不进行时间段和已存在则跳过的判断。且不会进过 Emby API 的逻辑,智能进行强制去以本程序的方式去扫描。
 	NeedRestoreFixTimeLineBK bool                        // 从 csf-bk 文件还原时间轴修复前的字幕文件
 	embyHelper               *embyHelper.EmbyHelper      // Emby 的实例
@@ -29,11 +31,10 @@ type VideoScanAndRefreshHelper struct {
 	subSupplierHub           *subSupplier.SubSupplierHub // 字幕提供源的集合,仅仅是 check 是否需要下载字幕是足够的,如果要下载则需要额外的初始化和检查
 }
 
-func NewVideoScanAndRefreshHelper(settings *settings.Settings, log *logrus.Logger, downloadQueue *task_queue.TaskQueue) *VideoScanAndRefreshHelper {
-	return &VideoScanAndRefreshHelper{settings: settings, log: log, downloadQueue: downloadQueue,
+func NewVideoScanAndRefreshHelper(fileDownloader *file_downloader.FileDownloader, downloadQueue *task_queue.TaskQueue) *VideoScanAndRefreshHelper {
+	return &VideoScanAndRefreshHelper{settings: fileDownloader.Settings, log: fileDownloader.Log, downloadQueue: downloadQueue,
 		subSupplierHub: subSupplier.NewSubSupplierHub(
-			settings, log,
-			zimuku.NewSupplier(settings, log),
+			xunlei.NewSupplier(fileDownloader),
 		)}
 }