Browse Source

重构,修复设置不生效的问题,以及本地代理开启和关闭的逻辑

Signed-off-by: allan716 <[email protected]>
allan716 3 years ago
parent
commit
cba453b9de
40 changed files with 403 additions and 400 deletions
  1. 2 2
      cmd/chinesesubfinder/main.go
  2. 12 6
      internal/backend/backend.go
  3. 5 6
      internal/backend/base_router.go
  4. 10 13
      internal/backend/controllers/base/proxy.go
  5. 27 3
      internal/backend/controllers/base/tmdb_api.go
  6. 1 1
      internal/backend/controllers/v1/controller_base.go
  7. 0 1
      pkg/downloader/download_processer.go
  8. 1 4
      pkg/ifaces/iSupplier.go
  9. 9 10
      pkg/imdb_helper/imdb.go
  10. 86 5
      pkg/local_http_proxy_server/local_http_proxy_server.go
  11. 1 2
      pkg/logic/emby_helper/embyhelper.go
  12. 5 5
      pkg/logic/file_downloader/downloader_hub.go
  13. 2 3
      pkg/logic/movie_helper/moviehelper.go
  14. 2 1
      pkg/logic/pre_download_process/pre_download_proces.go
  15. 10 11
      pkg/logic/pre_job/pro_job.go
  16. 1 5
      pkg/logic/scan_played_video_subinfo/scan_played_video_subinfo.go
  17. 9 11
      pkg/logic/series_helper/seriesHelper.go
  18. 9 15
      pkg/logic/sub_supplier/a4k/a4k.go
  19. 18 3
      pkg/logic/sub_supplier/a4k/a4k_test.go
  20. 8 14
      pkg/logic/sub_supplier/assrt/assrt.go
  21. 5 12
      pkg/logic/sub_supplier/csf/csf.go
  22. 11 2
      pkg/logic/sub_supplier/csf/csf_test.go
  23. 2 6
      pkg/logic/sub_supplier/shooter/shooter.go
  24. 11 14
      pkg/logic/sub_supplier/subSupplierHub.go
  25. 24 31
      pkg/logic/sub_supplier/subhd/subhd.go
  26. 10 2
      pkg/logic/sub_supplier/subhd/subhd_test.go
  27. 2 6
      pkg/logic/sub_supplier/xunlei/xunlei.go
  28. 29 42
      pkg/logic/sub_supplier/zimuku/zimuku.go
  29. 11 3
      pkg/logic/sub_supplier/zimuku/zimuku_test.go
  30. 2 3
      pkg/mix_media_info/mix_media_info.go
  31. 4 2
      pkg/rod_helper/rod_base.go
  32. 2 51
      pkg/settings/proxy_settings.go
  33. 0 14
      pkg/settings/settings.go
  34. 2 2
      pkg/settings/settings_test.go
  35. 14 15
      pkg/subtitle_best_api/subtitle_best_api.go
  36. 13 16
      pkg/tmdb_api/tmdb.go
  37. 12 23
      pkg/util.go
  38. 21 23
      pkg/util_test.go
  39. 5 7
      pkg/video_list_helper/video_list_helper.go
  40. 5 5
      pkg/video_scan_and_refresh_helper/video_scan_and_refresh_helper.go

+ 2 - 2
cmd/chinesesubfinder/main.go

@@ -145,7 +145,7 @@ func main() {
 	// ------------------------------------------------------------------------
 	// 前置的任务,热修复、字幕修改文件名格式、提前下载好浏览器
 	if settings.Get().SpeedDevMode == false {
-		pj := pre_job.NewPreJob(settings.Get(), loggerBase)
+		pj := pre_job.NewPreJob(loggerBase)
 
 		if pkg.LiteMode() == true {
 			// 不启用 Chrome 相关操作
@@ -188,7 +188,7 @@ func main() {
 	// 支持在外部配置特殊的端口号,以防止本地本占用了无法使用
 	restartSignal := make(chan interface{}, 1)
 	defer close(restartSignal)
-	bend := backend.NewBackEnd(loggerBase, settings.Get(), cronHelper, nowPort, restartSignal)
+	bend := backend.NewBackEnd(loggerBase, cronHelper, nowPort, restartSignal)
 	go bend.Restart()
 	restartSignal <- 1
 	// 阻塞

+ 12 - 6
internal/backend/backend.go

@@ -8,6 +8,7 @@ import (
 	"sync"
 	"time"
 
+	"github.com/allanpk716/ChineseSubFinder/pkg/local_http_proxy_server"
 	"github.com/allanpk716/ChineseSubFinder/pkg/settings"
 
 	"github.com/allanpk716/ChineseSubFinder/frontend/dist"
@@ -21,7 +22,6 @@ import (
 
 type BackEnd struct {
 	logger        *logrus.Logger
-	settings      *settings.Settings
 	cronHelper    *cron_helper.CronHelper
 	httpPort      int
 	running       bool
@@ -30,8 +30,8 @@ type BackEnd struct {
 	restartSignal chan interface{}
 }
 
-func NewBackEnd(logger *logrus.Logger, settings *settings.Settings, cronHelper *cron_helper.CronHelper, httpPort int, restartSignal chan interface{}) *BackEnd {
-	return &BackEnd{logger: logger, settings: settings, cronHelper: cronHelper, httpPort: httpPort, restartSignal: restartSignal}
+func NewBackEnd(logger *logrus.Logger, cronHelper *cron_helper.CronHelper, httpPort int, restartSignal chan interface{}) *BackEnd {
+	return &BackEnd{logger: logger, cronHelper: cronHelper, httpPort: httpPort, restartSignal: restartSignal}
 }
 
 func (b *BackEnd) start() {
@@ -44,14 +44,20 @@ func (b *BackEnd) start() {
 		return
 	}
 	b.running = true
-
+	// ----------------------------------------
+	// 设置代理
+	err := local_http_proxy_server.SetProxyInfo(settings.Get().AdvancedSettings.ProxySettings.GetInfos())
+	if err != nil {
+		b.logger.Errorln("Set Local Http Proxy Server Error:", err)
+		return
+	}
+	// -----------------------------------------
 	gin.SetMode(gin.ReleaseMode)
 	gin.DefaultWriter = ioutil.Discard
-
 	engine := gin.Default()
 	// 默认所有都通过
 	engine.Use(cors.Default())
-	cbBase, v1Router := InitRouter(b.settings, engine, b.cronHelper, b.restartSignal)
+	cbBase, v1Router := InitRouter(engine, b.cronHelper, b.restartSignal)
 
 	engine.GET("/", func(c *gin.Context) {
 		c.Header("content-type", "text/html;charset=utf-8")

+ 5 - 6
internal/backend/base_router.go

@@ -16,7 +16,6 @@ import (
 )
 
 func InitRouter(
-	settings *settings.Settings, // 设置实例
 	router *gin.Engine,
 	cronHelper *cron_helper.CronHelper,
 	restartSignal chan interface{},
@@ -26,10 +25,10 @@ func InitRouter(
 	// 设置 TMDB API 的本地 Client,用户自己的 API Key
 	var err error
 	var tmdbApi *tmdb_api.TmdbApi
-	if settings.AdvancedSettings.TmdbApiSettings.Enable == true &&
-		settings.AdvancedSettings.TmdbApiSettings.ApiKey != "" {
+	if settings.Get().AdvancedSettings.TmdbApiSettings.Enable == true &&
+		settings.Get().AdvancedSettings.TmdbApiSettings.ApiKey != "" {
 
-		tmdbApi, err = tmdb_api.NewTmdbHelper(cronHelper.Logger, settings.AdvancedSettings.TmdbApiSettings.ApiKey, settings.AdvancedSettings.ProxySettings)
+		tmdbApi, err = tmdb_api.NewTmdbHelper(cronHelper.Logger, settings.Get().AdvancedSettings.TmdbApiSettings.ApiKey)
 		if err != nil {
 			cronHelper.Logger.Panicln("NewTmdbHelper", err)
 		}
@@ -46,14 +45,14 @@ func InitRouter(
 	// --------------------------------------------------
 	// 静态文件服务器
 	// 添加电影的
-	for i, path := range settings.CommonSettings.MoviePaths {
+	for i, path := range settings.Get().CommonSettings.MoviePaths {
 
 		nowUrl := "/movie_dir_" + fmt.Sprintf("%d", i)
 		cbV1.SetPathUrlMapItem(path, nowUrl)
 		router.StaticFS(nowUrl, http.Dir(path))
 	}
 	// 添加连续剧的
-	for i, path := range settings.CommonSettings.SeriesPaths {
+	for i, path := range settings.Get().CommonSettings.SeriesPaths {
 
 		nowUrl := "/series_dir_" + fmt.Sprintf("%d", i)
 		cbV1.SetPathUrlMapItem(path, nowUrl)

+ 10 - 13
internal/backend/controllers/base/proxy.go

@@ -3,6 +3,8 @@ package base
 import (
 	"net/http"
 
+	"github.com/allanpk716/ChineseSubFinder/pkg/local_http_proxy_server"
+
 	"github.com/allanpk716/ChineseSubFinder/pkg/settings"
 
 	"github.com/allanpk716/ChineseSubFinder/pkg/logic/sub_supplier/a4k"
@@ -35,18 +37,16 @@ func (cb *ControllerBase) CheckProxyHandler(c *gin.Context) {
 	if err != nil {
 		return
 	}
-
-	// 先尝试关闭之前的本地 http 代理
-	err = settings.Get().AdvancedSettings.ProxySettings.CloseLocalHttpProxyServer()
-	if err != nil {
-		return
-	}
 	// 备份一份
 	bkProxySettings := settings.Get().AdvancedSettings.ProxySettings.CopyOne()
 	// 赋值 Web 传递过来的需要测试的代理参数
 	settings.Get().AdvancedSettings.ProxySettings = &checkProxy.ProxySettings
 	settings.Get().AdvancedSettings.ProxySettings.UseProxy = true
-
+	// 设置代理
+	err = local_http_proxy_server.SetProxyInfo(settings.Get().AdvancedSettings.ProxySettings.GetInfos())
+	if err != nil {
+		return
+	}
 	// 使用提交过来的这个代理地址,测试多个字幕网站的可用性
 	subSupplierHub := subSupplier.NewSubSupplierHub(
 		// 这里无需传递下载字幕的缓存实例
@@ -68,20 +68,17 @@ func (cb *ControllerBase) CheckProxyHandler(c *gin.Context) {
 		subSupplierHub.AddSubSupplier(csf.NewSupplier(cb.fileDownloader))
 	}
 
-	outStatus := subSupplierHub.CheckSubSiteStatus(settings.Get().AdvancedSettings.ProxySettings)
+	outStatus := subSupplierHub.CheckSubSiteStatus()
 
 	defer func() {
 		// 还原
-		err = checkProxy.ProxySettings.CloseLocalHttpProxyServer()
-		if err != nil {
-			return
-		}
 		settings.Get().AdvancedSettings.ProxySettings = bkProxySettings
 		cb.proxyCheckLocker.Unlock()
-		err = settings.Get().AdvancedSettings.ProxySettings.CloseLocalHttpProxyServer()
+		err = local_http_proxy_server.SetProxyInfo(settings.Get().AdvancedSettings.ProxySettings.GetInfos())
 		if err != nil {
 			return
 		}
+		local_http_proxy_server.GetProxyUrl()
 	}()
 
 	c.JSON(http.StatusOK, outStatus)

+ 27 - 3
internal/backend/controllers/base/tmdb_api.go

@@ -3,6 +3,7 @@ package base
 import (
 	"net/http"
 
+	"github.com/allanpk716/ChineseSubFinder/pkg/local_http_proxy_server"
 	"github.com/allanpk716/ChineseSubFinder/pkg/settings"
 
 	"github.com/allanpk716/ChineseSubFinder/pkg/tmdb_api"
@@ -26,13 +27,36 @@ func (cb *ControllerBase) CheckTmdbApiHandler(c *gin.Context) {
 		c.JSON(http.StatusOK, backend.ReplyCommon{Message: "false"})
 		return
 	}
-	tmdbApi, err := tmdb_api.NewTmdbHelper(cb.fileDownloader.Log,
-		req.ApiKey,
-		settings.Get().AdvancedSettings.ProxySettings)
+	// 备份一份
+	bkProxySettings := settings.Get().AdvancedSettings.ProxySettings.CopyOne()
+	// 赋值 Web 传递过来的需要测试的代理参数
+	settings.Get().AdvancedSettings.ProxySettings = &req.ProxySettings
+	// 设置代理
+	err = local_http_proxy_server.SetProxyInfo(settings.Get().AdvancedSettings.ProxySettings.GetInfos())
+	if err != nil {
+		return
+	}
+	// 开始测试 tmdb api
+	tmdbApi, err := tmdb_api.NewTmdbHelper(
+		cb.fileDownloader.Log,
+		req.ApiKey)
 	if err != nil {
 		cb.fileDownloader.Log.Errorln("NewTmdbHelper", err)
 		return
 	}
+
+	defer func() {
+		// 还原
+		settings.Get().AdvancedSettings.ProxySettings = bkProxySettings
+		cb.proxyCheckLocker.Unlock()
+		err = local_http_proxy_server.SetProxyInfo(settings.Get().AdvancedSettings.ProxySettings.GetInfos())
+		if err != nil {
+			return
+		}
+		// 启动代理
+		local_http_proxy_server.GetProxyUrl()
+	}()
+
 	if tmdbApi.Alive() == false {
 		cb.fileDownloader.Log.Errorln("tmdbApi.Alive() == false")
 		c.JSON(http.StatusOK, backend.ReplyCommon{Message: "false"})

+ 1 - 1
internal/backend/controllers/v1/controller_base.go

@@ -38,7 +38,7 @@ func NewControllerBase(cronHelper *cron_helper.CronHelper, restartSignal chan in
 		videoScanAndRefreshHelper: video_scan_and_refresh_helper.NewVideoScanAndRefreshHelper(
 			sub_formatter.GetSubFormatter(cronHelper.Logger, settings.Get().AdvancedSettings.SubNameFormatter),
 			cronHelper.FileDownloader, nil),
-		videoListHelper:                 video_list_helper.NewVideoListHelper(cronHelper.Logger, settings.Get()),
+		videoListHelper:                 video_list_helper.NewVideoListHelper(cronHelper.Logger),
 		videoScanAndRefreshHelperLocker: lock.NewLock(),
 		restartSignal:                   restartSignal,
 	}

+ 0 - 1
pkg/downloader/download_processer.go

@@ -87,7 +87,6 @@ func (d *Downloader) seriesDlFunc(ctx context.Context, job taskQueue2.OneJob, do
 		settings.Get().AdvancedSettings.TaskQueue.ExpirationTime,
 		false,
 		false,
-		settings.Get().AdvancedSettings.ProxySettings,
 		epsMap)
 	if err != nil {
 		err = errors.New(fmt.Sprintf("seriesDlFunc.ReadSeriesInfoFromDir, Error: %v", err))

+ 1 - 4
pkg/ifaces/iSupplier.go

@@ -1,14 +1,13 @@
 package ifaces
 
 import (
-	"github.com/allanpk716/ChineseSubFinder/pkg/settings"
 	"github.com/allanpk716/ChineseSubFinder/pkg/types/series"
 	"github.com/allanpk716/ChineseSubFinder/pkg/types/supplier"
 	"github.com/sirupsen/logrus"
 )
 
 type ISupplier interface {
-	CheckAlive(proxySettings ...*settings.ProxySettings) (bool, int64)
+	CheckAlive() (bool, int64)
 
 	IsAlive() bool
 
@@ -18,8 +17,6 @@ type ISupplier interface {
 
 	GetLogger() *logrus.Logger
 
-	GetSettings() *settings.Settings
-
 	GetSubListFromFile4Movie(filePath string) ([]supplier.SubInfo, error)
 
 	GetSubListFromFile4Series(seriesInfo *series.SeriesInfo) ([]supplier.SubInfo, error)

+ 9 - 10
pkg/imdb_helper/imdb.go

@@ -14,12 +14,11 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal/dao"
 	"github.com/allanpk716/ChineseSubFinder/internal/models"
 	"github.com/allanpk716/ChineseSubFinder/pkg/notify_center"
-	"github.com/allanpk716/ChineseSubFinder/pkg/settings"
 	"github.com/allanpk716/ChineseSubFinder/pkg/types"
 )
 
 // GetIMDBInfoFromVideoFile 先从本地拿缓存,如果没有就从 Web 获取
-func GetIMDBInfoFromVideoFile(dealers *media_info_dealers.Dealers, videoFPath string, isMovie bool, _proxySettings *settings.ProxySettings) (*models.IMDBInfo, error) {
+func GetIMDBInfoFromVideoFile(dealers *media_info_dealers.Dealers, videoFPath string, isMovie bool) (*models.IMDBInfo, error) {
 
 	var err error
 	var videoNfoInfo types.VideoNfoInfo
@@ -33,7 +32,7 @@ func GetIMDBInfoFromVideoFile(dealers *media_info_dealers.Dealers, videoFPath st
 		dealers.Logger.Warningln("getSubListFromFile", videoFPath, err)
 		return nil, err
 	}
-	imdbInfo, err := GetIMDBInfoFromVideoNfoInfo(dealers, videoNfoInfo, _proxySettings)
+	imdbInfo, err := GetIMDBInfoFromVideoNfoInfo(dealers, videoNfoInfo)
 	if err != nil {
 		dealers.Logger.Warningln("GetIMDBInfoFromVideoNfoInfo", videoFPath, err)
 		return nil, err
@@ -44,7 +43,7 @@ func GetIMDBInfoFromVideoFile(dealers *media_info_dealers.Dealers, videoFPath st
 			// 可能本地没有获取到 IMDB ID 信息,那么从上面的 GetIMDBInfoFromVideoNfoInfo 可以从 TMDB ID 获取到 IMDB ID,那么需要传递下去
 			videoNfoInfo.ImdbId = imdbInfo.IMDBID
 		}
-		t, err := getVideoInfoFromIMDBWeb(videoNfoInfo, _proxySettings)
+		t, err := getVideoInfoFromIMDBWeb(videoNfoInfo)
 		if err != nil {
 			dealers.Logger.Errorln("getVideoInfoFromIMDBWeb,", videoNfoInfo.Title, err)
 			return nil, err
@@ -61,7 +60,7 @@ func GetIMDBInfoFromVideoFile(dealers *media_info_dealers.Dealers, videoFPath st
 }
 
 // GetIMDBInfoFromVideoNfoInfo 从本地获取 IMDB 信息,注意,如果需要跳过,那么返回 Error == common.SkipCreateInDB
-func GetIMDBInfoFromVideoNfoInfo(dealers *media_info_dealers.Dealers, videoNfoInfo types.VideoNfoInfo, _proxySettings *settings.ProxySettings) (*models.IMDBInfo, error) {
+func GetIMDBInfoFromVideoNfoInfo(dealers *media_info_dealers.Dealers, videoNfoInfo types.VideoNfoInfo) (*models.IMDBInfo, error) {
 
 	/*
 		这里需要注意一个细节,之前理想情况下是从 Web 获取完整的 IMDB Info 回来,放入本地存储
@@ -145,14 +144,14 @@ func GetIMDBInfoFromVideoNfoInfo(dealers *media_info_dealers.Dealers, videoNfoIn
 }
 
 // IsChineseVideo 从 imdbID 去查询判断是否是中文视频
-func IsChineseVideo(dealers *media_info_dealers.Dealers, videoNfoInfo types.VideoNfoInfo, _proxySettings *settings.ProxySettings) (bool, *models.IMDBInfo, error) {
+func IsChineseVideo(dealers *media_info_dealers.Dealers, videoNfoInfo types.VideoNfoInfo) (bool, *models.IMDBInfo, error) {
 
 	const chName0 = "chinese"
 	const chName1 = "mandarin"
 
 	dealers.Logger.Debugln("IsChineseVideo", 0)
 
-	localIMDBInfo, err := GetIMDBInfoFromVideoNfoInfo(dealers, videoNfoInfo, _proxySettings)
+	localIMDBInfo, err := GetIMDBInfoFromVideoNfoInfo(dealers, videoNfoInfo)
 	if err != nil {
 		return false, nil, err
 	}
@@ -160,7 +159,7 @@ func IsChineseVideo(dealers *media_info_dealers.Dealers, videoNfoInfo types.Vide
 		// 需要去外网获去补全信息,然后更新本地的信息
 		dealers.Logger.Debugln("IsChineseVideo", 1)
 
-		t, err := getVideoInfoFromIMDBWeb(videoNfoInfo, _proxySettings)
+		t, err := getVideoInfoFromIMDBWeb(videoNfoInfo)
 		if err != nil {
 			dealers.Logger.Errorln("IsChineseVideo.getVideoInfoFromIMDBWeb,", videoNfoInfo.Title, err)
 			return false, nil, err
@@ -199,9 +198,9 @@ func IsChineseVideo(dealers *media_info_dealers.Dealers, videoNfoInfo types.Vide
 }
 
 // getVideoInfoFromIMDBWeb 从 IMDB 网站 ID 查询影片的信息
-func getVideoInfoFromIMDBWeb(videoNfoInfo types.VideoNfoInfo, _proxySettings ...*settings.ProxySettings) (*imdb.Title, error) {
+func getVideoInfoFromIMDBWeb(videoNfoInfo types.VideoNfoInfo) (*imdb.Title, error) {
 
-	client, err := pkg.NewHttpClient(_proxySettings...)
+	client, err := pkg.NewHttpClient()
 	if err != nil {
 		return nil, err
 	}

+ 86 - 5
pkg/local_http_proxy_server/local_http_proxy_server.go

@@ -6,6 +6,7 @@ import (
 	"net"
 	"net/http"
 	"net/url"
+	"sync"
 	"time"
 
 	"github.com/elazarl/goproxy"
@@ -13,9 +14,58 @@ import (
 	"golang.org/x/net/proxy"
 )
 
+// SetProxyInfo 设置代理信息,设置之前会停止现在运行的代理
+func SetProxyInfo(UseProxy bool, iInfos []string, iLocalPort string) error {
+
+	locker.Lock()
+	defer locker.Unlock()
+
+	useProxy = UseProxy
+
+	if localHttpProxyServer != nil && localHttpProxyServer.IsRunning() == true {
+		// 需要关闭代理
+		err := localHttpProxyServer.Stop()
+		if err != nil {
+			return err
+		}
+	}
+
+	proxyInfos = iInfos
+	localHttpProxyServerPort = iLocalPort
+
+	return nil
+}
+
+// GetProxyUrl 获取代理地址,同时启动实例
+func GetProxyUrl() string {
+
+	locker.Lock()
+	defer locker.Unlock()
+
+	if useProxy == false {
+		return ""
+	}
+
+	if localHttpProxyServer == nil {
+		localHttpProxyServer = NewLocalHttpProxyServer()
+	}
+	if localHttpProxyServer.IsRunning() == true {
+		return localHttpProxyServer.LocalHttpProxyUrl
+	}
+
+	localHttpProxyUrl, err := localHttpProxyServer.Start(proxyInfos, localHttpProxyServerPort)
+	if err != nil {
+		panic(fmt.Sprintln("start local http proxy server error:", err))
+		return ""
+	}
+
+	return localHttpProxyUrl
+}
+
 // LocalHttpProxyServer see https://github.com/go-rod/rod/issues/305
 type LocalHttpProxyServer struct {
 	srv                      *http.Server
+	locker                   sync.Mutex
 	isRunning                bool
 	LocalHttpProxyServerPort string // 本地开启的 Http 代理服务器端口
 	LocalHttpProxyUrl        string // 本地开启的 Http 代理服务器地址包含端口
@@ -73,21 +123,30 @@ func (l *LocalHttpProxyServer) Start(settings []string, localHttpProxyServerPort
 		}))
 
 		l.srv = &http.Server{Addr: ":" + l.LocalHttpProxyServerPort, Handler: middleProxy}
+		l.locker.Lock()
 		l.isRunning = true
+		l.locker.Unlock()
 		go func() {
 
 			println("Try Start Local Proxy Server at :", l.LocalHttpProxyServerPort)
 
 			if err := l.srv.ListenAndServe(); err != http.ErrServerClosed {
-				panic(fmt.Sprintln("ListenAndServe() http proxy:", err))
+				println(fmt.Sprintln("ListenAndServe() http proxy:", err))
 			}
+			l.locker.Lock()
+			l.srv = nil
+			l.isRunning = false
+			l.LocalHttpProxyUrl = ""
+			l.locker.Unlock()
 
 			println("http proxy closed")
 		}()
 
 		time.Sleep(3 * time.Second)
 
+		l.locker.Lock()
 		l.LocalHttpProxyUrl = "http://127.0.0.1:" + l.LocalHttpProxyServerPort
+		l.locker.Unlock()
 
 		return l.LocalHttpProxyUrl, nil
 
@@ -128,20 +187,30 @@ func (l *LocalHttpProxyServer) Start(settings []string, localHttpProxyServerPort
 		}))
 
 		l.srv = &http.Server{Addr: ":" + l.LocalHttpProxyServerPort, Handler: middleProxy}
+		l.locker.Lock()
 		l.isRunning = true
+		l.locker.Unlock()
 		go func() {
 
 			println("Try Start Local Proxy Server at :", l.LocalHttpProxyServerPort)
 			if err := l.srv.ListenAndServe(); err != http.ErrServerClosed {
-				panic(fmt.Sprintln("ListenAndServe() socks5 proxy:", err))
+				println(fmt.Sprintln("ListenAndServe() socks5 proxy:", err))
 			}
 
+			l.locker.Lock()
+			l.srv = nil
+			l.isRunning = false
+			l.LocalHttpProxyUrl = ""
+			l.locker.Lock()
+
 			println("socks5 proxy closed")
 		}()
 
 		time.Sleep(3 * time.Second)
 
+		l.locker.Lock()
 		l.LocalHttpProxyUrl = "http://127.0.0.1:" + l.LocalHttpProxyServerPort
+		l.locker.Unlock()
 
 		return l.LocalHttpProxyUrl, nil
 	}
@@ -156,14 +225,18 @@ func (l *LocalHttpProxyServer) Stop() error {
 		}
 	}
 
-	l.srv = nil
-	l.isRunning = false
+	//
+	//l.isRunning = false
+	l.locker.Lock()
 	l.LocalHttpProxyUrl = ""
-
+	l.locker.Unlock()
 	return nil
 }
 
 func (l *LocalHttpProxyServer) IsRunning() bool {
+
+	l.locker.Lock()
+	defer l.locker.Unlock()
 	return l.isRunning
 }
 
@@ -171,3 +244,11 @@ const (
 	LocalHttpProxyPort = "19036"
 	ProxyAuthHeader    = "Proxy-Authorization"
 )
+
+var (
+	locker                   sync.Mutex
+	localHttpProxyServer     *LocalHttpProxyServer
+	useProxy                 bool
+	proxyInfos               = make([]string, 0)
+	localHttpProxyServerPort string
+)

+ 1 - 2
pkg/logic/emby_helper/embyhelper.go

@@ -508,8 +508,7 @@ func (em *EmbyHelper) autoFindMappingPathWithMixInfoByIMDBId(mixInfo *emby2.Emby
 		types.VideoNfoInfo{
 			ImdbId: mixInfo.IMDBId,
 			TmdbId: mixInfo.TMDBId,
-		},
-		settings.Get().AdvancedSettings.ProxySettings)
+		})
 	if err != nil {
 
 		em.log.Errorln("autoFindMappingPathWithMixInfoByIMDBId.GetIMDBInfoFromVideoNfoInfo", err)

+ 5 - 5
pkg/logic/file_downloader/downloader_hub.go

@@ -66,13 +66,13 @@ func (f *FileDownloader) Get(supplierName string, topN int64, videoFileName stri
 	}
 	// 如果不存在那么就先下载,然后再存入缓存中
 	if found == false {
-		fileData, downloadFileName, err := pkg.DownFile(f.Log, fileDownloadUrl, settings.Get().AdvancedSettings.ProxySettings)
+		fileData, downloadFileName, err := pkg.DownFile(f.Log, fileDownloadUrl)
 		if err != nil {
 			return nil, err
 		}
 		// 下载成功需要统计到今天的次数中
 		_, err = f.CacheCenter.DailyDownloadCountAdd(supplierName,
-			pkg.GetPublicIP(f.Log, settings.Get().AdvancedSettings.TaskQueue, settings.Get().AdvancedSettings.ProxySettings))
+			pkg.GetPublicIP(f.Log, settings.Get().AdvancedSettings.TaskQueue))
 		if err != nil {
 			f.Log.Warningln(supplierName, "FileDownloader.Get.DailyDownloadCountAdd", err)
 		}
@@ -116,13 +116,13 @@ func (f *FileDownloader) GetA4k(supplierName string, topN int64, season, eps int
 	}
 	// 如果不存在那么就先下载,然后再存入缓存中
 	if found == false {
-		fileData, downloadFileName, err := pkg.DownFile(f.Log, fileDownloadUrl, settings.Get().AdvancedSettings.ProxySettings)
+		fileData, downloadFileName, err := pkg.DownFile(f.Log, fileDownloadUrl)
 		if err != nil {
 			return nil, err
 		}
 		// 下载成功需要统计到今天的次数中
 		_, err = f.CacheCenter.DailyDownloadCountAdd(supplierName,
-			pkg.GetPublicIP(f.Log, settings.Get().AdvancedSettings.TaskQueue, settings.Get().AdvancedSettings.ProxySettings))
+			pkg.GetPublicIP(f.Log, settings.Get().AdvancedSettings.TaskQueue))
 		if err != nil {
 			f.Log.Warningln(supplierName, "FileDownloader.Get.DailyDownloadCountAdd", err)
 		}
@@ -169,7 +169,7 @@ func (f *FileDownloader) GetEx(supplierName string, browser *rod.Browser, subDow
 		}
 		// 下载成功需要统计到今天的次数中
 		_, err = f.CacheCenter.DailyDownloadCountAdd(supplierName,
-			pkg.GetPublicIP(f.Log, settings.Get().AdvancedSettings.TaskQueue, settings.Get().AdvancedSettings.ProxySettings))
+			pkg.GetPublicIP(f.Log, settings.Get().AdvancedSettings.TaskQueue))
 		if err != nil {
 			f.Log.Warningln(supplierName, "FileDownloader.GetEx.DailyDownloadCountAdd", err)
 		}

+ 2 - 3
pkg/logic/movie_helper/moviehelper.go

@@ -17,7 +17,6 @@ import (
 
 	"github.com/allanpk716/ChineseSubFinder/pkg/decode"
 	"github.com/allanpk716/ChineseSubFinder/pkg/imdb_helper"
-	"github.com/allanpk716/ChineseSubFinder/pkg/settings"
 	"github.com/allanpk716/ChineseSubFinder/pkg/sub_helper"
 	"github.com/allanpk716/ChineseSubFinder/pkg/sub_parser_hub"
 	"github.com/jinzhu/now"
@@ -124,13 +123,13 @@ func MovieHasChineseSub(logger *logrus.Logger, videoFilePath string) (bool, []st
 }
 
 // SkipChineseMovie 跳过中文的电影
-func SkipChineseMovie(dealers *media_info_dealers.Dealers, videoFullPath string, _proxySettings *settings.ProxySettings) (bool, error) {
+func SkipChineseMovie(dealers *media_info_dealers.Dealers, videoFullPath string) (bool, error) {
 
 	imdbInfo, err := decode.GetVideoNfoInfo4Movie(videoFullPath)
 	if err != nil {
 		return false, err
 	}
-	isChineseVideo, _, err := imdb_helper.IsChineseVideo(dealers, imdbInfo, _proxySettings)
+	isChineseVideo, _, err := imdb_helper.IsChineseVideo(dealers, imdbInfo)
 	if err != nil {
 		return false, err
 	}

+ 2 - 1
pkg/logic/pre_download_process/pre_download_proces.go

@@ -3,6 +3,7 @@ package pre_download_process
 import (
 	"errors"
 	"fmt"
+	"github.com/allanpk716/ChineseSubFinder/pkg/local_http_proxy_server"
 	"time"
 
 	"github.com/allanpk716/ChineseSubFinder/pkg"
@@ -169,7 +170,7 @@ func (p *PreDownloadProcess) Check() *PreDownloadProcess {
 
 		p.log.Infoln("UseHttpProxy By:", settings.Get().AdvancedSettings.ProxySettings.UseWhichProxyProtocol)
 		// 如果使用了代理,那么默认需要检测 google 的连通性,不通过也继续
-		proxyStatus, proxySpeed, err := url_connectedness_helper.UrlConnectednessTest(url_connectedness_helper.GoogleUrl, settings.Get().AdvancedSettings.ProxySettings.GetLocalHttpProxyUrl())
+		proxyStatus, proxySpeed, err := url_connectedness_helper.UrlConnectednessTest(url_connectedness_helper.GoogleUrl, local_http_proxy_server.GetProxyUrl())
 		if err != nil {
 			p.log.Errorln(errors.New("UrlConnectednessTest Target Site " + url_connectedness_helper.GoogleUrl + ", " + err.Error()))
 		} else {

+ 10 - 11
pkg/logic/pre_job/pro_job.go

@@ -3,12 +3,13 @@ package pre_job
 import (
 	"errors"
 
+	"github.com/allanpk716/ChineseSubFinder/pkg/settings"
+
 	"github.com/allanpk716/ChineseSubFinder/pkg/types"
 	common2 "github.com/allanpk716/ChineseSubFinder/pkg/types/common"
 
 	"github.com/allanpk716/ChineseSubFinder/pkg/hot_fix"
 	"github.com/allanpk716/ChineseSubFinder/pkg/rod_helper"
-	"github.com/allanpk716/ChineseSubFinder/pkg/settings"
 	"github.com/allanpk716/ChineseSubFinder/pkg/sub_formatter"
 	"github.com/allanpk716/ChineseSubFinder/pkg/sub_formatter/common"
 	"github.com/sirupsen/logrus"
@@ -17,13 +18,11 @@ import (
 type PreJob struct {
 	stageName string
 	gError    error
-
-	sets *settings.Settings
-	log  *logrus.Logger
+	log       *logrus.Logger
 }
 
-func NewPreJob(sets *settings.Settings, log *logrus.Logger) *PreJob {
-	return &PreJob{sets: sets, log: log}
+func NewPreJob(log *logrus.Logger) *PreJob {
+	return &PreJob{log: log}
 }
 
 func (p *PreJob) HotFix() *PreJob {
@@ -42,8 +41,8 @@ func (p *PreJob) HotFix() *PreJob {
 	// 开始修复
 	p.log.Infoln(common2.NotifyStringTellUserWait)
 	err := hot_fix.HotFixProcess(p.log, types.HotFixParam{
-		MovieRootDirs:  p.sets.CommonSettings.MoviePaths,
-		SeriesRootDirs: p.sets.CommonSettings.SeriesPaths,
+		MovieRootDirs:  settings.Get().CommonSettings.MoviePaths,
+		SeriesRootDirs: settings.Get().CommonSettings.SeriesPaths,
 	})
 	if err != nil {
 		p.log.Errorln("hot_fix.HotFixProcess()", err)
@@ -73,9 +72,9 @@ func (p *PreJob) ChangeSubNameFormat() *PreJob {
 	*/
 	p.log.Infoln(common2.NotifyStringTellUserWait)
 	renameResults, err := sub_formatter.SubFormatChangerProcess(p.log,
-		p.sets.CommonSettings.MoviePaths,
-		p.sets.CommonSettings.SeriesPaths,
-		common.FormatterName(p.sets.AdvancedSettings.SubNameFormatter))
+		settings.Get().CommonSettings.MoviePaths,
+		settings.Get().CommonSettings.SeriesPaths,
+		common.FormatterName(settings.Get().AdvancedSettings.SubNameFormatter))
 	// 出错的文件有哪一些
 	for s, i := range renameResults.ErrFiles {
 		p.log.Errorln("reformat ErrFile:"+s, i)

+ 1 - 5
pkg/logic/scan_played_video_subinfo/scan_played_video_subinfo.go

@@ -58,10 +58,6 @@ func NewScanPlayedVideoSubInfo(log *logrus.Logger, fileDownloader *file_download
 	scanPlayedVideoSubInfo.log = log
 	// 下载实例
 	scanPlayedVideoSubInfo.fileDownloader = fileDownloader
-	// 参入设置信息
-	// 最大获取的视频数目设置到 100W
-	//settings.Get() = clone.Clone(_settings).(*settings.Settings)
-	//settings.Get().EmbySettings.MaxRequestVideoNumber = 1000000
 	// 检测是否某些参数超出范围
 	settings.Get().Check()
 	// 初始化 Emby API 接口
@@ -355,7 +351,7 @@ func (s *ScanPlayedVideoSubInfo) dealOneVideo(index int, videoFPath, orgSubFPath
 
 	// 通过视频的绝对路径,从本地的视频文件对应的 nfo 获取到这个视频的 IMDB ID,
 	var err error
-	imdbInfoFromVideoFile, err := imdb_helper.GetIMDBInfoFromVideoFile(s.fileDownloader.MediaInfoDealers, videoFPath, isMovie, settings.Get().AdvancedSettings.ProxySettings)
+	imdbInfoFromVideoFile, err := imdb_helper.GetIMDBInfoFromVideoFile(s.fileDownloader.MediaInfoDealers, videoFPath, isMovie)
 	if err != nil {
 		s.log.Errorln("GetIMDBInfoFromVideoFile", err)
 		return

+ 9 - 11
pkg/logic/series_helper/seriesHelper.go

@@ -22,7 +22,6 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal/models"
 	"github.com/allanpk716/ChineseSubFinder/pkg/decode"
 	"github.com/allanpk716/ChineseSubFinder/pkg/imdb_helper"
-	"github.com/allanpk716/ChineseSubFinder/pkg/settings"
 	"github.com/allanpk716/ChineseSubFinder/pkg/sub_helper"
 	"github.com/allanpk716/ChineseSubFinder/pkg/sub_parser_hub"
 	"github.com/emirpasic/gods/maps/treemap"
@@ -30,9 +29,9 @@ import (
 	"github.com/sirupsen/logrus"
 )
 
-func readSeriesInfo(dealers *media_info_dealers.Dealers, seriesDir string, need2AnalyzeSub bool, _proxySettings *settings.ProxySettings) (*series.SeriesInfo, map[string][]series.SubInfo, error) {
+func readSeriesInfo(dealers *media_info_dealers.Dealers, seriesDir string, need2AnalyzeSub bool) (*series.SeriesInfo, map[string][]series.SubInfo, error) {
 
-	seriesInfo, err := GetSeriesInfoFromDir(dealers, seriesDir, _proxySettings)
+	seriesInfo, err := GetSeriesInfoFromDir(dealers, seriesDir)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -107,10 +106,9 @@ func ReadSeriesInfoFromDir(dealers *media_info_dealers.Dealers,
 	ExpirationTime int,
 	forcedScanAndDownloadSub bool,
 	need2AnalyzeSub bool,
-	_proxySettings *settings.ProxySettings,
 	epsMap ...map[int][]int) (*series.SeriesInfo, error) {
 
-	seriesInfo, SubDict, err := readSeriesInfo(dealers, seriesDir, need2AnalyzeSub, _proxySettings)
+	seriesInfo, SubDict, err := readSeriesInfo(dealers, seriesDir, need2AnalyzeSub)
 	if err != nil {
 		return nil, err
 	}
@@ -136,9 +134,9 @@ func ReadSeriesInfoFromDir(dealers *media_info_dealers.Dealers,
 }
 
 // ReadSeriesInfoFromEmby 将 Emby API 读取到的数据进行转换到通用的结构中,需要填充那些剧集需要下载,这样要的是一个连续剧的,不是所有的传入(只有那些 Eps 需要下载字幕的 NeedDlEpsKeyList)
-func ReadSeriesInfoFromEmby(dealers *media_info_dealers.Dealers, seriesDir string, seriesVideoList []emby.EmbyMixInfo, ExpirationTime int, forcedScanAndDownloadSub bool, need2AnalyzeSub bool, _proxySettings *settings.ProxySettings) (*series.SeriesInfo, error) {
+func ReadSeriesInfoFromEmby(dealers *media_info_dealers.Dealers, seriesDir string, seriesVideoList []emby.EmbyMixInfo, ExpirationTime int, forcedScanAndDownloadSub bool, need2AnalyzeSub bool) (*series.SeriesInfo, error) {
 
-	seriesInfo, SubDict, err := readSeriesInfo(dealers, seriesDir, need2AnalyzeSub, _proxySettings)
+	seriesInfo, SubDict, err := readSeriesInfo(dealers, seriesDir, need2AnalyzeSub)
 	if err != nil {
 		return nil, err
 	}
@@ -159,14 +157,14 @@ func ReadSeriesInfoFromEmby(dealers *media_info_dealers.Dealers, seriesDir strin
 }
 
 // SkipChineseSeries 跳过中文连续剧
-func SkipChineseSeries(dealers *media_info_dealers.Dealers, seriesRootPath string, _proxySettings *settings.ProxySettings) (bool, *models.IMDBInfo, error) {
+func SkipChineseSeries(dealers *media_info_dealers.Dealers, seriesRootPath string) (bool, *models.IMDBInfo, error) {
 
 	imdbInfo, err := decode.GetVideoNfoInfo4SeriesDir(seriesRootPath)
 	if err != nil {
 		return false, nil, err
 	}
 
-	isChineseVideo, t, err := imdb_helper.IsChineseVideo(dealers, imdbInfo, _proxySettings)
+	isChineseVideo, t, err := imdb_helper.IsChineseVideo(dealers, imdbInfo)
 	if err != nil {
 		return false, nil, err
 	}
@@ -327,7 +325,7 @@ func whichSeasonEpsNeedDownloadSub(logger *logrus.Logger, seriesInfo *series.Ser
 	return needDlSubEpsList, needDlSeasonList
 }
 
-func GetSeriesInfoFromDir(dealers *media_info_dealers.Dealers, seriesDir string, _proxySettings *settings.ProxySettings) (*series.SeriesInfo, error) {
+func GetSeriesInfoFromDir(dealers *media_info_dealers.Dealers, seriesDir string) (*series.SeriesInfo, error) {
 	seriesInfo := series.SeriesInfo{}
 	// 只考虑 IMDB 去查询,文件名目前发现可能会跟电影重复,导致很麻烦,本来也有前置要求要削刮器处理的
 	videoInfo, err := decode.GetVideoNfoInfo4SeriesDir(seriesDir)
@@ -335,7 +333,7 @@ func GetSeriesInfoFromDir(dealers *media_info_dealers.Dealers, seriesDir string,
 		return nil, err
 	}
 
-	imdbInfo, err := imdb_helper.GetIMDBInfoFromVideoNfoInfo(dealers, videoInfo, _proxySettings)
+	imdbInfo, err := imdb_helper.GetIMDBInfoFromVideoNfoInfo(dealers, videoInfo)
 	if err != nil {
 		return nil, err
 	}

+ 9 - 15
pkg/logic/sub_supplier/a4k/a4k.go

@@ -31,7 +31,6 @@ import (
 type Supplier struct {
 	log            *logrus.Logger
 	fileDownloader *file_downloader.FileDownloader
-	topic          int
 	isAlive        bool
 }
 
@@ -40,21 +39,20 @@ func NewSupplier(fileDownloader *file_downloader.FileDownloader) *Supplier {
 	sup := Supplier{}
 	sup.log = fileDownloader.Log
 	sup.fileDownloader = fileDownloader
-	sup.topic = common2.DownloadSubsPerSite
 	sup.isAlive = true // 默认是可以使用的,如果 check 后,再调整状态
 
-	if settings.Get().AdvancedSettings.Topic > 0 && settings.Get().AdvancedSettings.Topic != sup.topic {
-		sup.topic = settings.Get().AdvancedSettings.Topic
+	if settings.Get().AdvancedSettings.Topic != common2.DownloadSubsPerSite {
+		settings.Get().AdvancedSettings.Topic = common2.DownloadSubsPerSite
 	}
 
 	return &sup
 }
 
-func (s *Supplier) CheckAlive(proxySettings ...*settings.ProxySettings) (bool, int64) {
+func (s *Supplier) CheckAlive() (bool, int64) {
 
 	// 计算当前时间
 	startT := time.Now()
-	httpClient, err := pkg.NewHttpClient(settings.Get().AdvancedSettings.ProxySettings)
+	httpClient, err := pkg.NewHttpClient()
 	if err != nil {
 		s.log.Errorln(s.GetSupplierName(), "CheckAlive.NewHttpClient", err)
 		return false, 0
@@ -92,10 +90,6 @@ func (s *Supplier) GetLogger() *logrus.Logger {
 	return s.log
 }
 
-func (s *Supplier) GetSettings() *settings.Settings {
-	return settings.Get()
-}
-
 func (s *Supplier) GetSupplierName() string {
 	return common2.SubSiteA4K
 }
@@ -111,7 +105,7 @@ func (s *Supplier) GetSubListFromFile4Movie(videoFPath string) ([]supplier.SubIn
 	outSubInfos := make([]supplier.SubInfo, 0)
 
 	mediaInfo, err := mix_media_info.GetMixMediaInfo(s.fileDownloader.MediaInfoDealers,
-		videoFPath, true, settings.Get().AdvancedSettings.ProxySettings)
+		videoFPath, true)
 	if err != nil {
 		s.log.Errorln(s.GetSupplierName(), "GetMixMediaInfo", err)
 		return nil, err
@@ -152,7 +146,7 @@ func (s *Supplier) GetSubListFromFile4Movie(videoFPath string) ([]supplier.SubIn
 		outSubInfos = append(outSubInfos, *subInfo)
 		downloadCounter++
 
-		if downloadCounter >= s.topic {
+		if downloadCounter >= settings.Get().AdvancedSettings.Topic {
 			break
 		}
 	}
@@ -174,7 +168,7 @@ func (s *Supplier) GetSubListFromFile4Series(seriesInfo *series.SeriesInfo) ([]s
 	for _, episodeInfo := range seriesInfo.NeedDlEpsKeyList {
 
 		mediaInfo, err := mix_media_info.GetMixMediaInfo(s.fileDownloader.MediaInfoDealers,
-			episodeInfo.FileFullPath, false, settings.Get().AdvancedSettings.ProxySettings)
+			episodeInfo.FileFullPath, false)
 		if err != nil {
 			s.log.Errorln(s.GetSupplierName(), "GetMixMediaInfo", err)
 			return nil, err
@@ -285,7 +279,7 @@ func (s *Supplier) listPageItems(keyword string, pageIndex int, isMovie bool) (s
 		time.Sleep(time.Second * 10)
 	}()
 	searchResultItems = make([]SearchResultItem, 0)
-	httpClient, err := pkg.NewHttpClient(settings.Get().AdvancedSettings.ProxySettings)
+	httpClient, err := pkg.NewHttpClient()
 	if err != nil {
 		err = errors.New("NewHttpClient error:" + err.Error())
 		return
@@ -388,7 +382,7 @@ func (s *Supplier) downloadSub(videoFileName, downloadPageUrl string, season, ep
 	}()
 
 	var httpClient *resty.Client
-	httpClient, err = pkg.NewHttpClient(settings.Get().AdvancedSettings.ProxySettings)
+	httpClient, err = pkg.NewHttpClient()
 	if err != nil {
 		err = errors.New("NewHttpClient error:" + err.Error())
 		return

+ 18 - 3
pkg/logic/sub_supplier/a4k/a4k_test.go

@@ -4,6 +4,9 @@ import (
 	"path/filepath"
 	"testing"
 
+	"github.com/allanpk716/ChineseSubFinder/pkg/media_info_dealers"
+	"github.com/allanpk716/ChineseSubFinder/pkg/subtitle_best_api"
+
 	"github.com/allanpk716/ChineseSubFinder/pkg"
 
 	"github.com/allanpk716/ChineseSubFinder/pkg/logic/file_downloader"
@@ -54,8 +57,14 @@ 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(log_helper.GetLogger4Tester(), ser,
-		90, false, false, settings.Get().AdvancedSettings.ProxySettings, epsMap)
+	seriesInfo, err := series_helper.ReadSeriesInfoFromDir(
+		dealers,
+		ser,
+		90,
+
+		false,
+		false,
+		epsMap)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -81,7 +90,10 @@ func TestSupplier_GetSubListFromFile4Series(t *testing.T) {
 	}
 }
 
-var a4kInstance *Supplier
+var (
+	a4kInstance *Supplier
+	dealers     *media_info_dealers.Dealers
+)
 
 func defInstance() {
 
@@ -98,4 +110,7 @@ func defInstance() {
 
 	a4kInstance = NewSupplier(file_downloader.NewFileDownloader(
 		cache_center.NewCacheCenter("test", log_helper.GetLogger4Tester()), authKey))
+
+	dealers = media_info_dealers.NewDealers(log_helper.GetLogger4Tester(),
+		subtitle_best_api.NewSubtitleBestApi(log_helper.GetLogger4Tester(), authKey))
 }

+ 8 - 14
pkg/logic/sub_supplier/assrt/assrt.go

@@ -30,7 +30,6 @@ import (
 type Supplier struct {
 	log               *logrus.Logger
 	fileDownloader    *file_downloader.FileDownloader
-	topic             int
 	isAlive           bool
 	theSearchInterval time.Duration
 }
@@ -40,11 +39,10 @@ func NewSupplier(fileDownloader *file_downloader.FileDownloader) *Supplier {
 	sup := Supplier{}
 	sup.log = fileDownloader.Log
 	sup.fileDownloader = fileDownloader
-	sup.topic = common2.DownloadSubsPerSite
 	sup.isAlive = true // 默认是可以使用的,如果 check 后,再调整状态
 
-	if settings.Get().AdvancedSettings.Topic > 0 && settings.Get().AdvancedSettings.Topic != sup.topic {
-		sup.topic = settings.Get().AdvancedSettings.Topic
+	if settings.Get().AdvancedSettings.Topic != common2.DownloadSubsPerSite {
+		settings.Get().AdvancedSettings.Topic = common2.DownloadSubsPerSite
 	}
 
 	sup.theSearchInterval = 20 * time.Second
@@ -52,7 +50,7 @@ func NewSupplier(fileDownloader *file_downloader.FileDownloader) *Supplier {
 	return &sup
 }
 
-func (s *Supplier) CheckAlive(proxySettings ...*settings.ProxySettings) (bool, int64) {
+func (s *Supplier) CheckAlive() (bool, int64) {
 
 	// 如果没有设置这个 API 接口,那么就任务是不可用的
 	if settings.Get().SubtitleSources.AssrtSettings.Token == "" {
@@ -93,10 +91,6 @@ func (s *Supplier) GetLogger() *logrus.Logger {
 	return s.log
 }
 
-func (s *Supplier) GetSettings() *settings.Settings {
-	return settings.Get()
-}
-
 func (s *Supplier) GetSupplierName() string {
 	return common2.SubSiteAssrt
 }
@@ -152,7 +146,7 @@ func (s *Supplier) getSubListFromFile(videoFPath string, isMovie bool) ([]suppli
 	s.log.Debugln(s.GetSupplierName(), videoFPath, "Start...")
 
 	outSubInfoList := make([]supplier.SubInfo, 0)
-	mediaInfo, err := mix_media_info.GetMixMediaInfo(s.fileDownloader.MediaInfoDealers, videoFPath, isMovie, settings.Get().AdvancedSettings.ProxySettings)
+	mediaInfo, err := mix_media_info.GetMixMediaInfo(s.fileDownloader.MediaInfoDealers, videoFPath, isMovie)
 	if err != nil {
 		s.log.Errorln(s.GetSupplierName(), videoFPath, "GetMixMediaInfo", err)
 		return nil, err
@@ -213,7 +207,7 @@ func (s *Supplier) getSubListFromFile(videoFPath string, isMovie bool) ([]suppli
 
 		outSubInfoList = append(outSubInfoList, *subInfo)
 		// 如果够了那么多个字幕就返回
-		if len(outSubInfoList) >= s.topic {
+		if len(outSubInfoList) >= settings.Get().AdvancedSettings.Topic {
 			return outSubInfoList, nil
 		}
 	}
@@ -285,7 +279,7 @@ func (s *Supplier) getSubByKeyWord(keyword string) (*SearchSubResult, error) {
 
 	s.log.Infoln("Search KeyWord:", keyword)
 	tt := url.QueryEscape(keyword)
-	httpClient, err := pkg.NewHttpClient(settings.Get().AdvancedSettings.ProxySettings)
+	httpClient, err := pkg.NewHttpClient()
 	if err != nil {
 		return nil, err
 	}
@@ -338,7 +332,7 @@ func (s *Supplier) getSubDetail(subID int) (OneSubDetail, error) {
 
 	var subDetail OneSubDetail
 
-	httpClient, err := pkg.NewHttpClient(settings.Get().AdvancedSettings.ProxySettings)
+	httpClient, err := pkg.NewHttpClient()
 	if err != nil {
 		return subDetail, err
 	}
@@ -377,7 +371,7 @@ func (s *Supplier) getUserInfo() (UserInfo, error) {
 
 	var userInfo UserInfo
 
-	httpClient, err := pkg.NewHttpClient(settings.Get().AdvancedSettings.ProxySettings)
+	httpClient, err := pkg.NewHttpClient()
 	if err != nil {
 		return userInfo, err
 	}

+ 5 - 12
pkg/logic/sub_supplier/csf/csf.go

@@ -32,7 +32,6 @@ import (
 type Supplier struct {
 	log            *logrus.Logger
 	fileDownloader *file_downloader.FileDownloader
-	topic          int
 	isAlive        bool
 }
 
@@ -41,21 +40,19 @@ func NewSupplier(fileDownloader *file_downloader.FileDownloader) *Supplier {
 	sup := Supplier{}
 	sup.log = fileDownloader.Log
 	sup.fileDownloader = fileDownloader
-	sup.topic = common2.DownloadSubsPerSite
 	sup.isAlive = true // 默认是可以使用的,如果 check 后,再调整状态
 
-	if settings.Get().AdvancedSettings.Topic > 0 && settings.Get().AdvancedSettings.Topic != sup.topic {
-		sup.topic = settings.Get().AdvancedSettings.Topic
+	if settings.Get().AdvancedSettings.Topic != common2.DownloadSubsPerSite {
+		settings.Get().AdvancedSettings.Topic = common2.DownloadSubsPerSite
 	}
 
 	return &sup
 }
 
-func (s *Supplier) CheckAlive(proxySettings ...*settings.ProxySettings) (bool, int64) {
-
+func (s *Supplier) CheckAlive() (bool, int64) {
 	// 计算当前时间
 	startT := time.Now()
-	err := s.fileDownloader.MediaInfoDealers.SubtitleBestApi.CheckAlive(proxySettings...)
+	err := s.fileDownloader.MediaInfoDealers.SubtitleBestApi.CheckAlive()
 	if err != nil {
 		s.log.Errorln(s.GetSupplierName(), "CheckAlive", "Error", err)
 		s.isAlive = false
@@ -84,10 +81,6 @@ func (s *Supplier) GetLogger() *logrus.Logger {
 	return s.log
 }
 
-func (s *Supplier) GetSettings() *settings.Settings {
-	return settings.Get()
-}
-
 func (s *Supplier) GetSupplierName() string {
 	return common2.SubSiteChineseSubFinder
 }
@@ -156,7 +149,7 @@ func (s *Supplier) findAndDownload(videoFPath string, isMovie bool, Season, Epis
 		err = errors.New(fmt.Sprintf("%s.Calculate %s %s", s.GetSupplierName(), videoFPath, err))
 		return
 	}
-	mediaInfo, err := mix_media_info.GetMixMediaInfo(s.fileDownloader.MediaInfoDealers, videoFPath, isMovie, settings.Get().AdvancedSettings.ProxySettings)
+	mediaInfo, err := mix_media_info.GetMixMediaInfo(s.fileDownloader.MediaInfoDealers, videoFPath, isMovie)
 	if err != nil {
 		err = errors.New(fmt.Sprintf("%s.GetMixMediaInfo %s %s", s.GetSupplierName(), videoFPath, err))
 		return

+ 11 - 2
pkg/logic/sub_supplier/csf/csf_test.go

@@ -3,6 +3,9 @@ package csf
 import (
 	"testing"
 
+	"github.com/allanpk716/ChineseSubFinder/pkg/media_info_dealers"
+	"github.com/allanpk716/ChineseSubFinder/pkg/subtitle_best_api"
+
 	"github.com/allanpk716/ChineseSubFinder/pkg"
 
 	"github.com/allanpk716/ChineseSubFinder/pkg/cache_center"
@@ -42,7 +45,7 @@ func TestSupplier_GetSubListFromFile4Series(t *testing.T) {
 	//ser := filepath.Join(rootDir, "zimuku", "series", "黄石 (2018)")
 	ser := "X:\\连续剧\\Tokyo Vice"
 	// 读取本地的视频和字幕信息
-	seriesInfo, err := series_helper.ReadSeriesInfoFromDir(log_helper.GetLogger4Tester(),
+	seriesInfo, err := series_helper.ReadSeriesInfoFromDir(dealers,
 		ser,
 		90,
 		false,
@@ -63,7 +66,10 @@ func TestSupplier_GetSubListFromFile4Series(t *testing.T) {
 	}
 }
 
-var csfInstance *Supplier
+var (
+	csfInstance *Supplier
+	dealers     *media_info_dealers.Dealers
+)
 
 func defInstance() {
 
@@ -80,4 +86,7 @@ func defInstance() {
 
 	csfInstance = NewSupplier(file_downloader.NewFileDownloader(
 		cache_center.NewCacheCenter("test", log_helper.GetLogger4Tester()), authKey))
+
+	dealers = media_info_dealers.NewDealers(log_helper.GetLogger4Tester(),
+		subtitle_best_api.NewSubtitleBestApi(log_helper.GetLogger4Tester(), authKey))
 }

+ 2 - 6
pkg/logic/sub_supplier/shooter/shooter.go

@@ -44,7 +44,7 @@ func NewSupplier(fileDownloader *file_downloader.FileDownloader) *Supplier {
 	return &sup
 }
 
-func (s *Supplier) CheckAlive(proxySettings ...*settings.ProxySettings) (bool, int64) {
+func (s *Supplier) CheckAlive() (bool, int64) {
 	// 计算当前时间
 	startT := time.Now()
 	_, err := s.getSubInfos(checkFileHash, checkFileName, qLan)
@@ -76,10 +76,6 @@ func (s *Supplier) GetLogger() *logrus.Logger {
 	return s.log
 }
 
-func (s *Supplier) GetSettings() *settings.Settings {
-	return settings.Get()
-}
-
 func (s *Supplier) GetSupplierName() string {
 	return common.SubSiteShooter
 }
@@ -163,7 +159,7 @@ func (s *Supplier) getSubInfos(fileHash, fileName, qLan string) ([]SublistShoote
 
 	var jsonList []SublistShooter
 
-	httpClient, err := pkg.NewHttpClient(settings.Get().AdvancedSettings.ProxySettings)
+	httpClient, err := pkg.NewHttpClient()
 	if err != nil {
 		return nil, err
 	}

+ 11 - 14
pkg/logic/sub_supplier/subSupplierHub.go

@@ -19,14 +19,12 @@ import (
 )
 
 type SubSupplierHub struct {
-	settings  *settings.Settings
 	log       *logrus.Logger
 	Suppliers []ifaces.ISupplier
 }
 
 func NewSubSupplierHub(one ifaces.ISupplier, _inSupplier ...ifaces.ISupplier) *SubSupplierHub {
 	s := SubSupplierHub{}
-	s.settings = one.GetSettings()
 	s.log = one.GetLogger()
 	s.Suppliers = make([]ifaces.ISupplier, 0)
 	s.Suppliers = append(s.Suppliers, one)
@@ -63,10 +61,10 @@ func (d *SubSupplierHub) MovieNeedDlSub(dealers *media_info_dealers.Dealers, vid
 	}
 
 	var err error
-	if d.settings.AdvancedSettings.ScanLogic.SkipChineseMovie == true {
+	if settings.Get().AdvancedSettings.ScanLogic.SkipChineseMovie == true {
 		var skip bool
 		// 跳过中文的电影,不是一定要跳过的
-		skip, err = movieHelper.SkipChineseMovie(dealers, videoFullPath, d.settings.AdvancedSettings.ProxySettings)
+		skip, err = movieHelper.SkipChineseMovie(dealers, videoFullPath)
 		if err != nil {
 			d.log.Warnln("SkipChineseMovie", videoFullPath, err)
 		}
@@ -80,7 +78,7 @@ func (d *SubSupplierHub) MovieNeedDlSub(dealers *media_info_dealers.Dealers, vid
 		// 强制下载字幕
 		needDlSub = true
 	} else {
-		needDlSub, err = movieHelper.MovieNeedDlSub(d.log, videoFullPath, d.settings.AdvancedSettings.TaskQueue.ExpirationTime)
+		needDlSub, err = movieHelper.MovieNeedDlSub(d.log, videoFullPath, settings.Get().AdvancedSettings.TaskQueue.ExpirationTime)
 		if err != nil {
 			d.log.Errorln(errors.Newf("MovieNeedDlSub %v %v", videoFullPath, err))
 			return false
@@ -94,11 +92,11 @@ func (d *SubSupplierHub) MovieNeedDlSub(dealers *media_info_dealers.Dealers, vid
 func (d *SubSupplierHub) SeriesNeedDlSub(dealers *media_info_dealers.Dealers, seriesRootPath string, forcedScanAndDownloadSub bool, need2AnalyzeSub bool) (bool, *series.SeriesInfo, error) {
 
 	if forcedScanAndDownloadSub == false {
-		if d.settings.AdvancedSettings.ScanLogic.SkipChineseSeries == true {
+		if settings.Get().AdvancedSettings.ScanLogic.SkipChineseSeries == true {
 			var skip bool
 			var err error
 			// 跳过中文的电影,不是一定要跳过的
-			skip, _, err = seriesHelper.SkipChineseSeries(dealers, seriesRootPath, d.settings.AdvancedSettings.ProxySettings)
+			skip, _, err = seriesHelper.SkipChineseSeries(dealers, seriesRootPath)
 			if err != nil {
 				d.log.Warnln("SkipChineseMovie", seriesRootPath, err)
 			}
@@ -110,10 +108,9 @@ func (d *SubSupplierHub) SeriesNeedDlSub(dealers *media_info_dealers.Dealers, se
 
 	// 读取本地的视频和字幕信息
 	seriesInfo, err := seriesHelper.ReadSeriesInfoFromDir(dealers, seriesRootPath,
-		d.settings.AdvancedSettings.TaskQueue.ExpirationTime,
+		settings.Get().AdvancedSettings.TaskQueue.ExpirationTime,
 		forcedScanAndDownloadSub,
-		need2AnalyzeSub,
-		d.settings.AdvancedSettings.ProxySettings)
+		need2AnalyzeSub)
 	if err != nil {
 		return false, nil, errors.Newf("ReadSeriesInfoFromDir %v %v", seriesRootPath, err)
 	}
@@ -128,7 +125,7 @@ func (d *SubSupplierHub) SeriesNeedDlSubFromEmby(dealers *media_info_dealers.Dea
 		var skip bool
 		var err error
 		// 跳过中文的电影,不是一定要跳过的
-		skip, _, err = seriesHelper.SkipChineseSeries(dealers, seriesRootPath, d.settings.AdvancedSettings.ProxySettings)
+		skip, _, err = seriesHelper.SkipChineseSeries(dealers, seriesRootPath)
 		if err != nil {
 			d.log.Warnln("SkipChineseMovie", seriesRootPath, err)
 		}
@@ -137,7 +134,7 @@ func (d *SubSupplierHub) SeriesNeedDlSubFromEmby(dealers *media_info_dealers.Dea
 		}
 	}
 	// 读取本地的视频和字幕信息
-	seriesInfo, err := seriesHelper.ReadSeriesInfoFromEmby(dealers, seriesRootPath, seriesVideoList, ExpirationTime, forcedScanAndDownloadSub, false, d.settings.AdvancedSettings.ProxySettings)
+	seriesInfo, err := seriesHelper.ReadSeriesInfoFromEmby(dealers, seriesRootPath, seriesVideoList, ExpirationTime, forcedScanAndDownloadSub, false)
 	if err != nil {
 		return false, nil, errors.Newf("ReadSeriesInfoFromDir %v %v", seriesRootPath, err)
 	}
@@ -183,7 +180,7 @@ func (d *SubSupplierHub) DownloadSub4Series(seriesDirPath string, seriesInfo *se
 }
 
 // CheckSubSiteStatus 检测多个字幕提供的网站是否是有效的,是否下载次数超限
-func (d *SubSupplierHub) CheckSubSiteStatus(proxySettings ...*settings.ProxySettings) backend.ReplyCheckStatus {
+func (d *SubSupplierHub) CheckSubSiteStatus() backend.ReplyCheckStatus {
 
 	outStatus := backend.ReplyCheckStatus{
 		SubSiteStatus: make([]backend.SiteStatus, 0),
@@ -192,7 +189,7 @@ func (d *SubSupplierHub) CheckSubSiteStatus(proxySettings ...*settings.ProxySett
 	// 测试提供字幕的网站是有效的
 	d.log.Infoln("Check Sub Supplier Start...")
 	for _, supplier := range d.Suppliers {
-		bAlive, speed := supplier.CheckAlive(proxySettings...)
+		bAlive, speed := supplier.CheckAlive()
 		if bAlive == false {
 			d.log.Warningln(supplier.GetSupplierName(), "Check Alive = false")
 		} else {

+ 24 - 31
pkg/logic/sub_supplier/subhd/subhd.go

@@ -13,6 +13,8 @@ import (
 	"strings"
 	"time"
 
+	"github.com/allanpk716/ChineseSubFinder/pkg/local_http_proxy_server"
+
 	"github.com/allanpk716/ChineseSubFinder/pkg/search"
 
 	"github.com/allanpk716/ChineseSubFinder/pkg"
@@ -41,12 +43,9 @@ import (
 )
 
 type Supplier struct {
-	settings       *settings.Settings
 	log            *logrus.Logger
 	fileDownloader *file_downloader.FileDownloader
-	topic          int
 	tt             time.Duration
-	debugMode      bool
 	isAlive        bool
 }
 
@@ -55,28 +54,26 @@ func NewSupplier(fileDownloader *file_downloader.FileDownloader) *Supplier {
 	sup := Supplier{}
 	sup.log = fileDownloader.Log
 	sup.fileDownloader = fileDownloader
-	sup.topic = common.DownloadSubsPerSite
 
-	sup.settings = fileDownloader.Settings
-	if sup.settings.AdvancedSettings.Topic > 0 && sup.settings.AdvancedSettings.Topic != sup.topic {
-		sup.topic = sup.settings.AdvancedSettings.Topic
+	if settings.Get().AdvancedSettings.Topic != common.DownloadSubsPerSite {
+		settings.Get().AdvancedSettings.Topic = common.DownloadSubsPerSite
 	}
 	sup.isAlive = true // 默认是可以使用的,如果 check 后,再调整状态
 
 	// 默认超时是 2 * 60s,如果是调试模式则是 5 min
 	sup.tt = common.BrowserTimeOut
-	sup.debugMode = sup.settings.AdvancedSettings.DebugMode
-	if sup.debugMode == true {
+	if settings.Get().AdvancedSettings.DebugMode == true {
 		sup.tt = common.OneMovieProcessTimeOut
 	}
 
 	return &sup
 }
 
-func (s *Supplier) CheckAlive(proxySettings ...*settings.ProxySettings) (bool, int64) {
+func (s *Supplier) CheckAlive() (bool, int64) {
 
-	proxyStatus, proxySpeed, err := url_connectedness_helper.UrlConnectednessTest(s.settings.AdvancedSettings.SuppliersSettings.SubHD.RootUrl,
-		s.settings.AdvancedSettings.ProxySettings.GetLocalHttpProxyUrl())
+	proxyStatus, proxySpeed, err := url_connectedness_helper.UrlConnectednessTest(
+		settings.Get().AdvancedSettings.SuppliersSettings.SubHD.RootUrl,
+		local_http_proxy_server.GetProxyUrl())
 	if err != nil {
 		s.log.Errorln(s.GetSupplierName(), "CheckAlive", "Error", err)
 		s.isAlive = false
@@ -100,25 +97,25 @@ func (s *Supplier) OverDailyDownloadLimit() bool {
 
 	return true
 
-	if s.settings.AdvancedSettings.SuppliersSettings.SubHD.DailyDownloadLimit == 0 {
+	if settings.Get().AdvancedSettings.SuppliersSettings.SubHD.DailyDownloadLimit == 0 {
 		s.log.Warningln(s.GetSupplierName(), "DailyDownloadLimit is 0, will Skip Download")
 		return true
 	}
 
 	// 需要查询今天的限额
 	count, err := s.fileDownloader.CacheCenter.DailyDownloadCountGet(s.GetSupplierName(),
-		pkg.GetPublicIP(s.log, s.settings.AdvancedSettings.TaskQueue, s.settings.AdvancedSettings.ProxySettings))
+		pkg.GetPublicIP(s.log, settings.Get().AdvancedSettings.TaskQueue))
 	if err != nil {
 		s.log.Errorln(s.GetSupplierName(), "DailyDownloadCountGet", err)
 		return true
 	}
-	if count >= s.settings.AdvancedSettings.SuppliersSettings.Zimuku.DailyDownloadLimit {
+	if count >= settings.Get().AdvancedSettings.SuppliersSettings.Zimuku.DailyDownloadLimit {
 		// 超限了
-		s.log.Warningln(s.GetSupplierName(), "DailyDownloadLimit:", s.settings.AdvancedSettings.SuppliersSettings.SubHD.DailyDownloadLimit, "Now Is:", count)
+		s.log.Warningln(s.GetSupplierName(), "DailyDownloadLimit:", settings.Get().AdvancedSettings.SuppliersSettings.SubHD.DailyDownloadLimit, "Now Is:", count)
 		return true
 	} else {
 		// 没有超限
-		s.log.Infoln(s.GetSupplierName(), "DailyDownloadLimit:", s.settings.AdvancedSettings.SuppliersSettings.Zimuku.DailyDownloadLimit, "Now Is:", count)
+		s.log.Infoln(s.GetSupplierName(), "DailyDownloadLimit:", settings.Get().AdvancedSettings.SuppliersSettings.Zimuku.DailyDownloadLimit, "Now Is:", count)
 		return false
 	}
 }
@@ -127,10 +124,6 @@ func (s *Supplier) GetLogger() *logrus.Logger {
 	return s.log
 }
 
-func (s *Supplier) GetSettings() *settings.Settings {
-	return s.settings
-}
-
 func (s *Supplier) GetSupplierName() string {
 	return common.SubSiteSubHd
 }
@@ -143,7 +136,7 @@ func (s *Supplier) GetSubListFromFile4Series(seriesInfo *series.SeriesInfo) ([]s
 
 	var browser *rod.Browser
 	// TODO 是用本地的 Browser 还是远程的,推荐是远程的
-	browser, err := rod_helper.NewBrowserEx(rod_helper.NewBrowserOptions(s.log, true, s.settings))
+	browser, err := rod_helper.NewBrowserEx(rod_helper.NewBrowserOptions(s.log, true, settings.Get()))
 	if err != nil {
 		return nil, err
 	}
@@ -153,7 +146,7 @@ func (s *Supplier) GetSubListFromFile4Series(seriesInfo *series.SeriesInfo) ([]s
 
 	mediaInfo, err := mix_media_info.GetMixMediaInfo(s.fileDownloader.MediaInfoDealers,
 		seriesInfo.EpList[0].FileFullPath, false,
-		s.settings.AdvancedSettings.ProxySettings)
+		settings.Get().AdvancedSettings.ProxySettings)
 	if err != nil {
 		s.log.Errorln(s.GetSupplierName(), seriesInfo.EpList[0].FileFullPath, "GetMixMediaInfo", err)
 		return nil, err
@@ -264,7 +257,7 @@ func (s *Supplier) getSubListFromFile4Movie(filePath string) ([]supplier.SubInfo
 	s.log.Infoln(s.GetSupplierName(), filePath, "No subtitle found", "KeyWord:", imdbInfo.ImdbId)
 	mediaInfo, err := mix_media_info.GetMixMediaInfo(s.fileDownloader.MediaInfoDealers,
 		filePath, true,
-		s.settings.AdvancedSettings.ProxySettings)
+		settings.Get().AdvancedSettings.ProxySettings)
 	if err != nil {
 		s.log.Errorln(s.GetSupplierName(), filePath, "GetMixMediaInfo", err)
 		return nil, err
@@ -310,7 +303,7 @@ func (s *Supplier) getSubListFromKeyword4Movie(keyword string) ([]supplier.SubIn
 	s.log.Infoln("Search Keyword:", keyword)
 	var browser *rod.Browser
 	// TODO 是用本地的 Browser 还是远程的,推荐是远程的
-	browser, err := rod_helper.NewBrowserEx(rod_helper.NewBrowserOptions(s.log, true, s.settings))
+	browser, err := rod_helper.NewBrowserEx(rod_helper.NewBrowserOptions(s.log, true, settings.Get()))
 	if err != nil {
 		return nil, err
 	}
@@ -410,7 +403,7 @@ func (s *Supplier) step0(browser *rod.Browser, keyword string) (string, error) {
 		}
 	}()
 
-	result, page, err := rod_helper.HttpGetFromBrowser(browser, fmt.Sprintf(s.settings.AdvancedSettings.SuppliersSettings.SubHD.RootUrl+common.SubSubHDSearchUrl, url.QueryEscape(keyword)), s.tt)
+	result, page, err := rod_helper.HttpGetFromBrowser(browser, fmt.Sprintf(settings.Get().AdvancedSettings.SuppliersSettings.SubHD.RootUrl+common.SubSubHDSearchUrl, url.QueryEscape(keyword)), s.tt)
 	if err != nil {
 		return "", err
 	}
@@ -478,7 +471,7 @@ func (s *Supplier) step1(browser *rod.Browser, detailPageUrl string, isMovieOrSe
 			notify_center.Notify.Add("subhd_step1", err.Error())
 		}
 	}()
-	detailPageUrl = pkg.AddBaseUrl(s.settings.AdvancedSettings.SuppliersSettings.SubHD.RootUrl, detailPageUrl)
+	detailPageUrl = pkg.AddBaseUrl(settings.Get().AdvancedSettings.SuppliersSettings.SubHD.RootUrl, detailPageUrl)
 	result, page, err := rod_helper.HttpGetFromBrowser(browser, detailPageUrl, s.tt)
 	if err != nil {
 		return nil, err
@@ -521,7 +514,7 @@ func (s *Supplier) step1(browser *rod.Browser, detailPageUrl string, isMovieOrSe
 
 		listItem := HdListItem{}
 		listItem.Url = downUrl
-		listItem.BaseUrl = s.settings.AdvancedSettings.SuppliersSettings.SubHD.RootUrl
+		listItem.BaseUrl = settings.Get().AdvancedSettings.SuppliersSettings.SubHD.RootUrl
 		listItem.Title = title
 		listItem.DownCount = downCount
 
@@ -529,7 +522,7 @@ func (s *Supplier) step1(browser *rod.Browser, detailPageUrl string, isMovieOrSe
 		// 连续剧,需要多个
 		if isMovieOrSeries == true {
 
-			if len(lists) >= s.topic {
+			if len(lists) >= settings.Get().AdvancedSettings.Topic {
 				return false
 			}
 		}
@@ -548,7 +541,7 @@ func (s *Supplier) DownFile(browser *rod.Browser, subDownloadPageUrl string, Top
 			notify_center.Notify.Add("subhd_DownFile", err.Error())
 		}
 	}()
-	subDownloadPageFullUrl := pkg.AddBaseUrl(s.settings.AdvancedSettings.SuppliersSettings.SubHD.RootUrl, subDownloadPageUrl)
+	subDownloadPageFullUrl := pkg.AddBaseUrl(settings.Get().AdvancedSettings.SuppliersSettings.SubHD.RootUrl, subDownloadPageUrl)
 
 	_, page, err := rod_helper.HttpGetFromBrowser(browser, subDownloadPageFullUrl, s.tt)
 	if err != nil {
@@ -783,7 +776,7 @@ search:
 	//鬆開滑鼠左鍵, 拖动完毕
 	mouse.MustUp("left")
 
-	if s.debugMode == true {
+	if settings.Get().AdvancedSettings.DebugMode == true {
 		//截圖保存
 		page.MustScreenshot(pkg.DefDebugFolder(), "result.png")
 	}

+ 10 - 2
pkg/logic/sub_supplier/subhd/subhd_test.go

@@ -6,6 +6,9 @@ import (
 	"testing"
 	"time"
 
+	"github.com/allanpk716/ChineseSubFinder/pkg/media_info_dealers"
+	"github.com/allanpk716/ChineseSubFinder/pkg/subtitle_best_api"
+
 	"github.com/allanpk716/ChineseSubFinder/pkg"
 
 	commonValue "github.com/allanpk716/ChineseSubFinder/pkg/types/common"
@@ -20,7 +23,10 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/pkg/unit_test_helper"
 )
 
-var authKey random_auth_key.AuthKey
+var (
+	authKey random_auth_key.AuthKey
+	dealers *media_info_dealers.Dealers
+)
 
 func defInstance() {
 	pkg.ReadCustomAuthFile(log_helper.GetLogger4Tester())
@@ -29,6 +35,8 @@ func defInstance() {
 		AESKey16: pkg.AESKey16(),
 		AESIv16:  pkg.AESIv16(),
 	}
+	dealers = media_info_dealers.NewDealers(log_helper.GetLogger4Tester(),
+		subtitle_best_api.NewSubtitleBestApi(log_helper.GetLogger4Tester(), authKey))
 }
 
 // 无需关注这个测试用例,这个方案暂时弃用
@@ -84,7 +92,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(log_helper.GetLogger4Tester(), ser, 90, false, false, epsMap)
+	seriesInfo, err := series_helper.ReadSeriesInfoFromDir(dealers, ser, 90, false, false, epsMap)
 	if err != nil {
 		t.Fatal(err)
 	}

+ 2 - 6
pkg/logic/sub_supplier/xunlei/xunlei.go

@@ -46,7 +46,7 @@ func NewSupplier(fileDownloader *file_downloader.FileDownloader) *Supplier {
 	return &sup
 }
 
-func (s *Supplier) CheckAlive(proxySettings ...*settings.ProxySettings) (bool, int64) {
+func (s *Supplier) CheckAlive() (bool, int64) {
 
 	// 计算当前时间
 	startT := time.Now()
@@ -86,10 +86,6 @@ func (s *Supplier) GetLogger() *logrus.Logger {
 	return s.log
 }
 
-func (s *Supplier) GetSettings() *settings.Settings {
-	return settings.Get()
-}
-
 func (s *Supplier) GetSupplierName() string {
 	return common.SubSiteXunLei
 }
@@ -190,7 +186,7 @@ func (s *Supplier) getSubListFromFile(filePath string) ([]supplier.SubInfo, erro
 func (s *Supplier) getSubInfos(filePath, cid string) (SublistSliceXunLei, error) {
 	var jsonList SublistSliceXunLei
 
-	httpClient, err := pkg.NewHttpClient(settings.Get().AdvancedSettings.ProxySettings)
+	httpClient, err := pkg.NewHttpClient()
 	if err != nil {
 		return jsonList, err
 	}

+ 29 - 42
pkg/logic/sub_supplier/zimuku/zimuku.go

@@ -36,14 +36,10 @@ import (
 )
 
 type Supplier struct {
-	settings         *settings.Settings
-	log              *logrus.Logger
-	fileDownloader   *file_downloader.FileDownloader
-	tt               time.Duration
-	debugMode        bool
-	httpProxyAddress string
-	topic            int
-	isAlive          bool
+	log            *logrus.Logger
+	fileDownloader *file_downloader.FileDownloader
+	tt             time.Duration
+	isAlive        bool
 }
 
 func NewSupplier(fileDownloader *file_downloader.FileDownloader) *Supplier {
@@ -51,31 +47,26 @@ func NewSupplier(fileDownloader *file_downloader.FileDownloader) *Supplier {
 	sup := Supplier{}
 	sup.log = fileDownloader.Log
 	sup.fileDownloader = fileDownloader
-	sup.topic = common.DownloadSubsPerSite
 	sup.isAlive = true // 默认是可以使用的,如果 check 后,再调整状态
 
-	sup.settings = fileDownloader.Settings
-	if sup.settings.AdvancedSettings.Topic > 0 && sup.settings.AdvancedSettings.Topic != sup.topic {
-		sup.topic = sup.settings.AdvancedSettings.Topic
+	if settings.Get().AdvancedSettings.Topic != common.DownloadSubsPerSite {
+		settings.Get().AdvancedSettings.Topic = common.DownloadSubsPerSite
 	}
 
 	// 默认超时是 2 * 60s,如果是调试模式则是 5 min
 	sup.tt = common.BrowserTimeOut
-	sup.debugMode = sup.settings.AdvancedSettings.DebugMode
-	if sup.debugMode == true {
+	if settings.Get().AdvancedSettings.DebugMode == true {
 		sup.tt = common.OneMovieProcessTimeOut
 	}
-	// 判断是否启用代理
-	sup.httpProxyAddress = sup.settings.AdvancedSettings.ProxySettings.GetLocalHttpProxyUrl()
 	return &sup
 }
 
-func (s *Supplier) CheckAlive(proxySettings ...*settings.ProxySettings) (bool, int64) {
+func (s *Supplier) CheckAlive() (bool, int64) {
 
 	// TODO 是用本地的 Browser 还是远程的,推荐是远程的
 
-	opt := rod_helper.NewBrowserOptions(s.log, true, s.settings)
-	opt.SetPreLoadUrl(s.settings.AdvancedSettings.SuppliersSettings.Zimuku.RootUrl)
+	opt := rod_helper.NewBrowserOptions(s.log, true, settings.Get())
+	opt.SetPreLoadUrl(settings.Get().AdvancedSettings.SuppliersSettings.Zimuku.RootUrl)
 	browser, err := rod_helper.NewBrowserEx(opt)
 	if err != nil {
 		return false, 0
@@ -85,7 +76,7 @@ func (s *Supplier) CheckAlive(proxySettings ...*settings.ProxySettings) (bool, i
 	}()
 
 	begin := time.Now() //判断代理访问时间
-	_, page, err := rod_helper.HttpGetFromBrowser(browser, s.settings.AdvancedSettings.SuppliersSettings.Zimuku.RootUrl, 15*time.Second)
+	_, page, err := rod_helper.HttpGetFromBrowser(browser, settings.Get().AdvancedSettings.SuppliersSettings.Zimuku.RootUrl, 15*time.Second)
 	if err != nil {
 		return false, 0
 	}
@@ -103,24 +94,24 @@ func (s *Supplier) OverDailyDownloadLimit() bool {
 
 	return true
 
-	if s.settings.AdvancedSettings.SuppliersSettings.Zimuku.DailyDownloadLimit == 0 {
+	if settings.Get().AdvancedSettings.SuppliersSettings.Zimuku.DailyDownloadLimit == 0 {
 		s.log.Warningln(s.GetSupplierName(), "DailyDownloadLimit is 0, will Skip Download")
 		return true
 	}
 	// 需要查询今天的限额
 	count, err := s.fileDownloader.CacheCenter.DailyDownloadCountGet(s.GetSupplierName(),
-		pkg.GetPublicIP(s.log, s.settings.AdvancedSettings.TaskQueue, s.settings.AdvancedSettings.ProxySettings))
+		pkg.GetPublicIP(s.log, settings.Get().AdvancedSettings.TaskQueue))
 	if err != nil {
 		s.log.Errorln(s.GetSupplierName(), "DailyDownloadCountGet", err)
 		return true
 	}
-	if count >= s.settings.AdvancedSettings.SuppliersSettings.Zimuku.DailyDownloadLimit {
+	if count >= settings.Get().AdvancedSettings.SuppliersSettings.Zimuku.DailyDownloadLimit {
 		// 超限了
-		s.log.Warningln(s.GetSupplierName(), "DailyDownloadLimit:", s.settings.AdvancedSettings.SuppliersSettings.Zimuku.DailyDownloadLimit, "Now Is:", count)
+		s.log.Warningln(s.GetSupplierName(), "DailyDownloadLimit:", settings.Get().AdvancedSettings.SuppliersSettings.Zimuku.DailyDownloadLimit, "Now Is:", count)
 		return true
 	} else {
 		// 没有超限
-		s.log.Infoln(s.GetSupplierName(), "DailyDownloadLimit:", s.settings.AdvancedSettings.SuppliersSettings.Zimuku.DailyDownloadLimit, "Now Is:", count)
+		s.log.Infoln(s.GetSupplierName(), "DailyDownloadLimit:", settings.Get().AdvancedSettings.SuppliersSettings.Zimuku.DailyDownloadLimit, "Now Is:", count)
 		return false
 	}
 }
@@ -129,10 +120,6 @@ func (s *Supplier) GetLogger() *logrus.Logger {
 	return s.log
 }
 
-func (s *Supplier) GetSettings() *settings.Settings {
-	return s.settings
-}
-
 func (s *Supplier) GetSupplierName() string {
 	return common.SubSiteZiMuKu
 }
@@ -140,8 +127,8 @@ func (s *Supplier) GetSupplierName() string {
 func (s *Supplier) GetSubListFromFile4Movie(filePath string) ([]supplier.SubInfo, error) {
 
 	// TODO 是用本地的 Browser 还是远程的,推荐是远程的
-	opt := rod_helper.NewBrowserOptions(s.log, true, s.settings)
-	opt.SetPreLoadUrl(s.settings.AdvancedSettings.SuppliersSettings.Zimuku.RootUrl)
+	opt := rod_helper.NewBrowserOptions(s.log, true, settings.Get())
+	opt.SetPreLoadUrl(settings.Get().AdvancedSettings.SuppliersSettings.Zimuku.RootUrl)
 	browser, err := rod_helper.NewBrowserEx(opt)
 	if err != nil {
 		return nil, err
@@ -163,8 +150,8 @@ func (s *Supplier) GetSubListFromFile4Series(seriesInfo *series.SeriesInfo) ([]s
 
 	var err error
 	// TODO 是用本地的 Browser 还是远程的,推荐是远程的
-	opt := rod_helper.NewBrowserOptions(s.log, true, s.settings)
-	opt.SetPreLoadUrl(s.settings.AdvancedSettings.SuppliersSettings.Zimuku.RootUrl)
+	opt := rod_helper.NewBrowserOptions(s.log, true, settings.Get())
+	opt.SetPreLoadUrl(settings.Get().AdvancedSettings.SuppliersSettings.Zimuku.RootUrl)
 	browser, err := rod_helper.NewBrowserEx(opt)
 	if err != nil {
 		return nil, err
@@ -454,9 +441,9 @@ func (s *Supplier) whichSubInfoNeedDownload(browser *rod.Browser, subInfos SubIn
 	}
 
 	// 看字幕够不够
-	if len(tmpSubInfo) < s.topic {
+	if len(tmpSubInfo) < settings.Get().AdvancedSettings.Topic {
 		for _, subInfo := range subInfos {
-			if len(tmpSubInfo) >= s.topic {
+			if len(tmpSubInfo) >= settings.Get().AdvancedSettings.Topic {
 				break
 			}
 			tmpLang := language.LangConverter4Sub_Supplier(subInfo.Lang)
@@ -477,8 +464,8 @@ func (s *Supplier) whichSubInfoNeedDownload(browser *rod.Browser, subInfos SubIn
 	}
 
 	// 看字幕是不是太多了,超出 topic 的限制了
-	if len(tmpSubInfo) > s.topic {
-		tmpSubInfo = tmpSubInfo[:s.topic]
+	if len(tmpSubInfo) > settings.Get().AdvancedSettings.Topic {
+		tmpSubInfo = tmpSubInfo[:settings.Get().AdvancedSettings.Topic]
 	}
 	s.log.Debugln(s.GetSupplierName(), "step2 -> tmpSubInfo.Count with topic limit", len(tmpSubInfo))
 	for i, info := range tmpSubInfo {
@@ -521,7 +508,7 @@ func (s *Supplier) step0(browser *rod.Browser, keyword string) (string, error) {
 		}
 	}()
 
-	desUrl := fmt.Sprintf(s.settings.AdvancedSettings.SuppliersSettings.Zimuku.RootUrl+common.SubZiMuKuSearchFormatUrl, url.QueryEscape(keyword))
+	desUrl := fmt.Sprintf(settings.Get().AdvancedSettings.SuppliersSettings.Zimuku.RootUrl+common.SubZiMuKuSearchFormatUrl, url.QueryEscape(keyword))
 	result, page, err := rod_helper.HttpGetFromBrowser(browser, desUrl, s.tt)
 	if err != nil {
 		return "", err
@@ -552,7 +539,7 @@ func (s *Supplier) step1(browser *rod.Browser, filmDetailPageUrl string) (SubRes
 	var subResult SubResult
 	subResult.SubInfos = SubInfos{}
 
-	filmDetailPageUrl = pkg.AddBaseUrl(s.settings.AdvancedSettings.SuppliersSettings.Zimuku.RootUrl, filmDetailPageUrl)
+	filmDetailPageUrl = pkg.AddBaseUrl(settings.Get().AdvancedSettings.SuppliersSettings.Zimuku.RootUrl, filmDetailPageUrl)
 
 	result, page, err := rod_helper.HttpGetFromBrowser(browser, filmDetailPageUrl, s.tt)
 	if err != nil {
@@ -653,7 +640,7 @@ func (s *Supplier) step2(browser *rod.Browser, subInfo *SubInfo) error {
 			notify_center.Notify.Add("zimuku_step2", err.Error())
 		}
 	}()
-	detailUrl := pkg.AddBaseUrl(s.settings.AdvancedSettings.SuppliersSettings.Zimuku.RootUrl, subInfo.DetailUrl)
+	detailUrl := pkg.AddBaseUrl(settings.Get().AdvancedSettings.SuppliersSettings.Zimuku.RootUrl, subInfo.DetailUrl)
 	result, page, err := rod_helper.HttpGetFromBrowser(browser, detailUrl, s.tt)
 	if err != nil {
 		return err
@@ -671,7 +658,7 @@ func (s *Supplier) step2(browser *rod.Browser, subInfo *SubInfo) error {
 	if strings.Contains(matched[0][1], "://") {
 		subInfo.SubDownloadPageUrl = matched[0][1]
 	} else {
-		subInfo.SubDownloadPageUrl = fmt.Sprintf("%s%s", s.settings.AdvancedSettings.SuppliersSettings.Zimuku.RootUrl, matched[0][1])
+		subInfo.SubDownloadPageUrl = fmt.Sprintf("%s%s", settings.Get().AdvancedSettings.SuppliersSettings.Zimuku.RootUrl, matched[0][1])
 	}
 	return nil
 }
@@ -684,7 +671,7 @@ func (s *Supplier) DownFile(browser *rod.Browser, subDownloadPageUrl string, Top
 			notify_center.Notify.Add("zimuku_DownFile", err.Error())
 		}
 	}()
-	subDownloadPageFullUrl := pkg.AddBaseUrl(s.settings.AdvancedSettings.SuppliersSettings.Zimuku.RootUrl, subDownloadPageUrl)
+	subDownloadPageFullUrl := pkg.AddBaseUrl(settings.Get().AdvancedSettings.SuppliersSettings.Zimuku.RootUrl, subDownloadPageUrl)
 	result, page, err := rod_helper.HttpGetFromBrowser(browser, subDownloadPageFullUrl, s.tt)
 	if err != nil {
 		return nil, err

+ 11 - 3
pkg/logic/sub_supplier/zimuku/zimuku_test.go

@@ -4,6 +4,9 @@ import (
 	"path/filepath"
 	"testing"
 
+	"github.com/allanpk716/ChineseSubFinder/pkg/media_info_dealers"
+	"github.com/allanpk716/ChineseSubFinder/pkg/subtitle_best_api"
+
 	"github.com/allanpk716/ChineseSubFinder/pkg"
 
 	"github.com/allanpk716/ChineseSubFinder/pkg/rod_helper"
@@ -88,12 +91,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(log_helper.GetLogger4Tester(),
+	seriesInfo, err := series_helper.ReadSeriesInfoFromDir(dealers,
 		ser,
 		90,
 		false,
 		false,
-		settings.Get().AdvancedSettings.ProxySettings,
 		epsMap)
 	if err != nil {
 		t.Fatal(err)
@@ -172,7 +174,10 @@ func TestSupplier_CheckAlive(t *testing.T) {
 	}
 }
 
-var zimukuInstance *Supplier
+var (
+	zimukuInstance *Supplier
+	dealers        *media_info_dealers.Dealers
+)
 
 func defInstance() {
 
@@ -186,4 +191,7 @@ func defInstance() {
 
 	zimukuInstance = NewSupplier(file_downloader.NewFileDownloader(
 		cache_center.NewCacheCenter("test", log_helper.GetLogger4Tester()), authKey))
+
+	dealers = media_info_dealers.NewDealers(log_helper.GetLogger4Tester(),
+		subtitle_best_api.NewSubtitleBestApi(log_helper.GetLogger4Tester(), authKey))
 }

+ 2 - 3
pkg/mix_media_info/mix_media_info.go

@@ -14,14 +14,13 @@ import (
 
 	"github.com/allanpk716/ChineseSubFinder/internal/models"
 	"github.com/allanpk716/ChineseSubFinder/pkg/imdb_helper"
-	"github.com/allanpk716/ChineseSubFinder/pkg/settings"
 )
 
 func GetMixMediaInfo(
 	dealers *media_info_dealers.Dealers,
-	videoFPath string, isMovie bool, _proxySettings *settings.ProxySettings) (*models.MediaInfo, error) {
+	videoFPath string, isMovie bool) (*models.MediaInfo, error) {
 
-	imdbInfo, err := imdb_helper.GetIMDBInfoFromVideoFile(dealers, videoFPath, isMovie, _proxySettings)
+	imdbInfo, err := imdb_helper.GetIMDBInfoFromVideoFile(dealers, videoFPath, isMovie)
 	if err != nil {
 		return nil, err
 	}

+ 4 - 2
pkg/rod_helper/rod_base.go

@@ -12,6 +12,8 @@ import (
 	"sync"
 	"time"
 
+	"github.com/allanpk716/ChineseSubFinder/pkg/local_http_proxy_server"
+
 	"github.com/allanpk716/ChineseSubFinder/pkg"
 
 	"github.com/allanpk716/ChineseSubFinder/pkg/regex_things"
@@ -36,11 +38,11 @@ func NewBrowserEx(rodOptions *BrowserOptions) (*rod.Browser, error) {
 		}
 		return NewBrowserBase(rodOptions.Log,
 			localChromeFPath,
-			rodOptions.Settings.AdvancedSettings.ProxySettings.GetLocalHttpProxyUrl(),
+			local_http_proxy_server.GetProxyUrl(),
 			rodOptions.LoadAdblock,
 			rodOptions.PreLoadUrl())
 	} else {
-		return NewBrowserBaseFromDocker(rodOptions.Settings.AdvancedSettings.ProxySettings.GetLocalHttpProxyUrl(),
+		return NewBrowserBaseFromDocker(local_http_proxy_server.GetProxyUrl(),
 			rodOptions.Settings.ExperimentalFunction.RemoteChromeSettings.RemoteDockerURL,
 			rodOptions.Settings.ExperimentalFunction.RemoteChromeSettings.RemoteAdblockPath,
 			rodOptions.Settings.ExperimentalFunction.RemoteChromeSettings.ReMoteUserDataDir,

+ 2 - 51
pkg/settings/proxy_settings.go

@@ -1,12 +1,5 @@
 package settings
 
-import (
-	"fmt"
-	"sync"
-
-	"github.com/allanpk716/ChineseSubFinder/pkg/local_http_proxy_server"
-)
-
 type ProxySettings struct {
 	UseProxy                 bool   `json:"use_proxy"`                                    // 是否使用代理
 	UseWhichProxyProtocol    string `json:"use_which_proxy_protocol"`                     // 是使用 socks5 还是 http 代理
@@ -17,9 +10,6 @@ type ProxySettings struct {
 	InputProxyUsername       string `json:"input_proxy_username"`                         // 输入的代理用户名
 	InputProxyPassword       string `json:"input_proxy_password"`                         // 输入的代理密码
 	Referer                  string `json:"-"`                                            // 可能下载文件的时候需要设置
-
-	localHttpProxyServer *local_http_proxy_server.LocalHttpProxyServer // 本地代理服务器
-	locker               sync.Mutex
 }
 
 func NewProxySettings(useProxy bool, useWhichProxyProtocol string,
@@ -45,25 +35,10 @@ func (p *ProxySettings) CopyOne() *ProxySettings {
 		p.UseProxy, p.UseWhichProxyProtocol, p.LocalHttpProxyServerPort,
 		p.InputProxyAddress, p.InputProxyPort,
 		p.InputProxyUsername, p.InputProxyPassword)
-	nowSettings.localHttpProxyServer = p.localHttpProxyServer
 	return nowSettings
 }
 
-func (p *ProxySettings) GetLocalHttpProxyUrl() string {
-	defer p.locker.Unlock()
-	p.locker.Lock()
-
-	if p.UseProxy == false {
-		return ""
-	}
-
-	if p.localHttpProxyServer == nil {
-		p.localHttpProxyServer = local_http_proxy_server.NewLocalHttpProxyServer()
-	}
-
-	if p.localHttpProxyServer.IsRunning() == true {
-		return p.localHttpProxyServer.LocalHttpProxyUrl
-	}
+func (p *ProxySettings) GetInfos() (bool, []string, string) {
 
 	inputInfo := []string{
 		p.UseWhichProxyProtocol,
@@ -74,29 +49,5 @@ func (p *ProxySettings) GetLocalHttpProxyUrl() string {
 		inputInfo = append(inputInfo, p.InputProxyUsername, p.InputProxyPassword)
 	}
 
-	localHttpProxyUrl, err := p.localHttpProxyServer.Start(inputInfo, p.LocalHttpProxyServerPort)
-	if err != nil {
-		panic(fmt.Sprintln("start local http proxy server error:", err))
-		return ""
-	}
-
-	return localHttpProxyUrl
-}
-
-func (p *ProxySettings) CloseLocalHttpProxyServer() error {
-	defer func() {
-		p.locker.Unlock()
-	}()
-	p.locker.Lock()
-
-	if p.localHttpProxyServer == nil {
-		return nil
-	}
-
-	if p.localHttpProxyServer.IsRunning() == false {
-		return nil
-	}
-
-	println("CloseLocalHttpProxyServer Done")
-	return p.localHttpProxyServer.Stop()
+	return p.UseProxy, inputInfo, p.LocalHttpProxyServerPort
 }

+ 0 - 14
pkg/settings/settings.go

@@ -76,11 +76,6 @@ func SetFullNewSettings(inSettings *Settings) error {
 	_settingsLocker.Lock()
 	defer _settingsLocker.Unlock()
 
-	// 保存前进行本地代理的关闭
-	err := _settings.AdvancedSettings.ProxySettings.CloseLocalHttpProxyServer()
-	if err != nil {
-		return err
-	}
 	nowConfigFPath := _settings.configFPath
 	_settings = inSettings
 	_settings.configFPath = nowConfigFPath
@@ -118,11 +113,6 @@ func (s *Settings) read() error {
 	if err != nil {
 		return err
 	}
-	// 因为是重新加载配置文件信息,所以需要考虑提前关闭之前开启的本地代理
-	err = s.AdvancedSettings.ProxySettings.CloseLocalHttpProxyServer()
-	if err != nil {
-		return err
-	}
 	err = strcut_json.ToStruct(s.configFPath, s)
 	if err != nil {
 		return err
@@ -140,10 +130,6 @@ func (s *Settings) Save() error {
 	if err != nil {
 		return err
 	}
-	err = s.AdvancedSettings.ProxySettings.CloseLocalHttpProxyServer()
-	if err != nil {
-		return err
-	}
 	s.EmbySettings.AddressUrl = newEmbyAddressUrl
 
 	return strcut_json.ToFile(s.configFPath, s)

+ 2 - 2
pkg/settings/settings_test.go

@@ -25,8 +25,8 @@ func TestNewSettings(t *testing.T) {
 		},
 		AdvancedSettings: &AdvancedSettings{
 			ProxySettings: &ProxySettings{
-				UseHttpProxy:     true,
-				HttpProxyAddress: "123",
+				UseProxy:                 true,
+				LocalHttpProxyServerPort: "123",
 			},
 			DebugMode:                  true,
 			SaveFullSeasonTmpSubtitles: true,

+ 14 - 15
pkg/subtitle_best_api/subtitle_best_api.go

@@ -21,7 +21,6 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal/models"
 
 	"github.com/allanpk716/ChineseSubFinder/pkg/random_auth_key"
-	"github.com/allanpk716/ChineseSubFinder/pkg/settings"
 )
 
 type SubtitleBestApi struct {
@@ -38,14 +37,14 @@ func NewSubtitleBestApi(log *logrus.Logger, inAuthKey random_auth_key.AuthKey) *
 	}
 }
 
-func (s *SubtitleBestApi) CheckAlive(proxySettings ...*settings.ProxySettings) error {
+func (s *SubtitleBestApi) CheckAlive() error {
 
 	if s.authKey.BaseKey == random_auth_key.BaseKey || s.authKey.AESKey16 == random_auth_key.AESKey16 || s.authKey.AESIv16 == random_auth_key.AESIv16 {
 		return errors.New("auth key is not set")
 	}
 
 	postUrl := webUrlBase + "/v1/subhd-code"
-	httpClient, err := pkg.NewHttpClient(proxySettings...)
+	httpClient, err := pkg.NewHttpClient()
 	if err != nil {
 		return err
 	}
@@ -77,7 +76,7 @@ func (s *SubtitleBestApi) GetCode() (string, error) {
 	}
 
 	postUrl := webUrlBase + "/v1/subhd-code"
-	httpClient, err := pkg.NewHttpClient(settings.Get().AdvancedSettings.ProxySettings)
+	httpClient, err := pkg.NewHttpClient()
 	if err != nil {
 		return "", err
 	}
@@ -130,7 +129,7 @@ func (s *SubtitleBestApi) GetMediaInfo(id, source, videoType string) (*MediaInfo
 	}
 
 	postUrl := webUrlBase + "/v1/media-info"
-	httpClient, err := pkg.NewHttpClient(settings.Get().AdvancedSettings.ProxySettings)
+	httpClient, err := pkg.NewHttpClient()
 	if err != nil {
 		return nil, err
 	}
@@ -169,7 +168,7 @@ func (s *SubtitleBestApi) AskFroUpload(subSha256 string, IsMovie, trusted bool,
 		return nil, errors.New("auth key is not set")
 	}
 	postUrl := webUrlBase + "/v1/ask-for-upload"
-	httpClient, err := pkg.NewHttpClient(settings.Get().AdvancedSettings.ProxySettings)
+	httpClient, err := pkg.NewHttpClient()
 	if err != nil {
 		return nil, err
 	}
@@ -231,7 +230,7 @@ func (s *SubtitleBestApi) UploadSub(videoSubInfo *models.VideoSubInfo, subSaveRo
 	}
 
 	postUrl := webUrlBase + "/v1/upload-sub"
-	httpClient, err := pkg.NewHttpClient(settings.Get().AdvancedSettings.ProxySettings)
+	httpClient, err := pkg.NewHttpClient()
 	if err != nil {
 		return nil, err
 	}
@@ -316,7 +315,7 @@ func (s *SubtitleBestApi) UploadLowTrustSub(lowTrustVideoSubInfo *models.LowVide
 	}
 
 	postUrl := webUrlBase + "/v1/upload-sub"
-	httpClient, err := pkg.NewHttpClient(settings.Get().AdvancedSettings.ProxySettings)
+	httpClient, err := pkg.NewHttpClient()
 	if err != nil {
 		return nil, err
 	}
@@ -405,7 +404,7 @@ func (s *SubtitleBestApi) AskFindSub(VideoFeature, ImdbId, TmdbId, Season, Episo
 		return nil, errors.New("auth key is not set")
 	}
 	postUrl := webUrlBase + "/v1/ask-find-sub"
-	httpClient, err := pkg.NewHttpClient(settings.Get().AdvancedSettings.ProxySettings)
+	httpClient, err := pkg.NewHttpClient()
 	if err != nil {
 		return nil, err
 	}
@@ -450,7 +449,7 @@ func (s *SubtitleBestApi) FindSub(VideoFeature, ImdbId, TmdbId, Season, Episode,
 		return nil, errors.New("auth key is not set")
 	}
 	postUrl := webUrlBase + "/v1/find-sub"
-	httpClient, err := pkg.NewHttpClient(settings.Get().AdvancedSettings.ProxySettings)
+	httpClient, err := pkg.NewHttpClient()
 	if err != nil {
 		return nil, err
 	}
@@ -495,7 +494,7 @@ func (s *SubtitleBestApi) AskDownloadSub(SubSha256, DownloadToken, ApiKey string
 		return nil, errors.New("auth key is not set")
 	}
 	postUrl := webUrlBase + "/v1/ask-for-download"
-	httpClient, err := pkg.NewHttpClient(settings.Get().AdvancedSettings.ProxySettings)
+	httpClient, err := pkg.NewHttpClient()
 	if err != nil {
 		return nil, err
 	}
@@ -537,7 +536,7 @@ func (s *SubtitleBestApi) DownloadSub(SubSha256, DownloadToken, ApiKey, download
 		return nil, errors.New("auth key is not set")
 	}
 	postUrl := webUrlBase + "/v1/download-sub"
-	httpClient, err := pkg.NewHttpClient(settings.Get().AdvancedSettings.ProxySettings)
+	httpClient, err := pkg.NewHttpClient()
 	if err != nil {
 		return nil, err
 	}
@@ -611,7 +610,7 @@ func (s *SubtitleBestApi) ConvertId(id, source, videoType string) (*IdConvertRep
 	}
 
 	postUrl := webUrlBase + "/v1/id-convert"
-	httpClient, err := pkg.NewHttpClient(settings.Get().AdvancedSettings.ProxySettings)
+	httpClient, err := pkg.NewHttpClient()
 	if err != nil {
 		return nil, err
 	}
@@ -656,7 +655,7 @@ func (s *SubtitleBestApi) FeedBack(id, version, MediaServer string, EnableShare,
 	}
 
 	postUrl := webUrlBase + "/v1/feedback"
-	httpClient, err := pkg.NewHttpClient(settings.Get().AdvancedSettings.ProxySettings)
+	httpClient, err := pkg.NewHttpClient()
 	if err != nil {
 		return nil, err
 	}
@@ -703,7 +702,7 @@ func (s *SubtitleBestApi) AskDownloadTask(id string) (*AskDownloadTaskReply, err
 	}
 
 	postUrl := webUrlBase + "/v1/ask-download-task"
-	httpClient, err := pkg.NewHttpClient(settings.Get().AdvancedSettings.ProxySettings)
+	httpClient, err := pkg.NewHttpClient()
 	if err != nil {
 		return nil, err
 	}

+ 13 - 16
pkg/tmdb_api/tmdb.go

@@ -2,22 +2,23 @@ package tmdb_api
 
 import (
 	"fmt"
-	"github.com/allanpk716/ChineseSubFinder/pkg"
 	"strconv"
 
 	"github.com/allanpk716/ChineseSubFinder/pkg/settings"
+
+	"github.com/allanpk716/ChineseSubFinder/pkg"
+
 	tmdb "github.com/cyruzin/golang-tmdb"
 	"github.com/sirupsen/logrus"
 )
 
 type TmdbApi struct {
-	l             *logrus.Logger
-	apiKey        string
-	tmdbClient    *tmdb.Client
-	proxySettings *settings.ProxySettings
+	l          *logrus.Logger
+	apiKey     string
+	tmdbClient *tmdb.Client
 }
 
-func NewTmdbHelper(l *logrus.Logger, apiKey string, _proxySettings ...*settings.ProxySettings) (*TmdbApi, error) {
+func NewTmdbHelper(l *logrus.Logger, apiKey string) (*TmdbApi, error) {
 
 	tmdbClient, err := tmdb.Init(apiKey)
 	if err != nil {
@@ -25,15 +26,10 @@ func NewTmdbHelper(l *logrus.Logger, apiKey string, _proxySettings ...*settings.
 		return nil, err
 	}
 
-	var nowProxy *settings.ProxySettings
-	if _proxySettings != nil && len(_proxySettings) > 0 {
-		nowProxy = _proxySettings[0]
-	}
 	t := TmdbApi{
-		l:             l,
-		apiKey:        apiKey,
-		tmdbClient:    tmdbClient,
-		proxySettings: nowProxy,
+		l:          l,
+		apiKey:     apiKey,
+		tmdbClient: tmdbClient,
 	}
 	t.setClientConfig()
 	return &t, nil
@@ -203,7 +199,7 @@ func (t *TmdbApi) ConvertId(iD string, idType string, isMovieOrSeries bool) (con
 
 func (t *TmdbApi) setClientConfig() {
 	// 获取 http client 实例
-	restyClient, err := pkg.NewHttpClient(t.proxySettings)
+	restyClient, err := pkg.NewHttpClient()
 	if err != nil {
 		err = fmt.Errorf("error initializing resty client: %s", err)
 		return
@@ -224,5 +220,6 @@ type ConvertIdResult struct {
 }
 
 type Req struct {
-	ApiKey string `json:"api_key"`
+	ProxySettings settings.ProxySettings `json:"proxy_settings"  binding:"required"`
+	ApiKey        string                 `json:"api_key"`
 }

+ 12 - 23
pkg/util.go

@@ -23,6 +23,8 @@ import (
 	"strings"
 	"time"
 
+	"github.com/allanpk716/ChineseSubFinder/pkg/local_http_proxy_server"
+
 	"github.com/allanpk716/ChineseSubFinder/pkg/types/common"
 
 	"github.com/allanpk716/ChineseSubFinder/pkg/regex_things"
@@ -34,16 +36,11 @@ import (
 )
 
 // NewHttpClient 新建一个 resty 的对象
-func NewHttpClient(_proxySettings ...*settings.ProxySettings) (*resty.Client, error) {
+func NewHttpClient(referer ...string) (*resty.Client, error) {
 	//const defUserAgent = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50"
 	//const defUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36 Edg/91.0.864.41"
 
-	var proxySettings *settings.ProxySettings
 	var UserAgent, Referer string
-
-	if len(_proxySettings) > 0 {
-		proxySettings = _proxySettings[0]
-	}
 	// ------------------------------------------------
 	// 随机的 Browser
 	UserAgent = browser.Random()
@@ -57,10 +54,8 @@ func NewHttpClient(_proxySettings ...*settings.ProxySettings) (*resty.Client, er
 	httpClient.SetRetryCount(1)
 	// ------------------------------------------------
 	// 设置 Referer
-	if len(_proxySettings) > 0 {
-		if len(proxySettings.Referer) > 0 {
-			Referer = proxySettings.Referer
-		}
+	if len(referer) > 0 {
+		Referer = referer[0]
 		if len(Referer) > 0 {
 			httpClient.SetHeader("Referer", Referer)
 		}
@@ -75,14 +70,8 @@ func NewHttpClient(_proxySettings ...*settings.ProxySettings) (*resty.Client, er
 	// 不要求安全链接
 	httpClient.SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true})
 	// ------------------------------------------------
-	if len(_proxySettings) == 0 ||
-		(proxySettings != nil && proxySettings.UseProxy == false) {
-		// 无需设置代理
-		return httpClient, nil
-	}
-	// ------------------------------------------------
 	// http 代理
-	HttpProxyAddress := proxySettings.GetLocalHttpProxyUrl()
+	HttpProxyAddress := local_http_proxy_server.GetProxyUrl()
 	if HttpProxyAddress != "" {
 		httpClient.SetProxy(HttpProxyAddress)
 	} else {
@@ -92,10 +81,10 @@ func NewHttpClient(_proxySettings ...*settings.ProxySettings) (*resty.Client, er
 	return httpClient, nil
 }
 
-func getPublicIP(inputSite string, _proxySettings ...*settings.ProxySettings) string {
+func getPublicIP(inputSite string) string {
 
 	var client *resty.Client
-	client, err := NewHttpClient(_proxySettings...)
+	client, err := NewHttpClient()
 	if err != nil {
 		return ""
 	}
@@ -106,7 +95,7 @@ func getPublicIP(inputSite string, _proxySettings ...*settings.ProxySettings) st
 	return response.String()
 }
 
-func GetPublicIP(log *logrus.Logger, queue *settings.TaskQueue, _proxySettings ...*settings.ProxySettings) string {
+func GetPublicIP(log *logrus.Logger, queue *settings.TaskQueue) string {
 
 	defPublicIPSites := []string{
 		"https://myip.biturl.top/",
@@ -130,7 +119,7 @@ func GetPublicIP(log *logrus.Logger, queue *settings.TaskQueue, _proxySettings .
 
 	for i, publicIPSite := range customPublicIPSites {
 		log.Debugln("[GetPublicIP]", i, publicIPSite)
-		publicIP := getPublicIP(publicIPSite, _proxySettings...)
+		publicIP := getPublicIP(publicIPSite)
 
 		matcheds := regex_things.ReMatchIP.FindAllString(publicIP, -1)
 
@@ -144,11 +133,11 @@ func GetPublicIP(log *logrus.Logger, queue *settings.TaskQueue, _proxySettings .
 }
 
 // DownFile 从指定的 url 下载文件
-func DownFile(l *logrus.Logger, urlStr string, _proxySettings ...*settings.ProxySettings) ([]byte, string, error) {
+func DownFile(l *logrus.Logger, urlStr string) ([]byte, string, error) {
 
 	var err error
 	var httpClient *resty.Client
-	httpClient, err = NewHttpClient(_proxySettings...)
+	httpClient, err = NewHttpClient()
 	if err != nil {
 		return nil, "", err
 	}

+ 21 - 23
pkg/util_test.go

@@ -4,9 +4,7 @@ import (
 	"path/filepath"
 	"testing"
 
-	"github.com/allanpk716/ChineseSubFinder/pkg/local_http_proxy_server"
 	"github.com/allanpk716/ChineseSubFinder/pkg/log_helper"
-	"github.com/allanpk716/ChineseSubFinder/pkg/settings"
 	"github.com/allanpk716/ChineseSubFinder/pkg/unit_test_helper"
 )
 
@@ -35,27 +33,27 @@ func TestGetRestOfDaySec(t *testing.T) {
 
 func TestGetPublicIP(t *testing.T) {
 
-	got := GetPublicIP(log_helper.GetLogger4Tester(), settings.NewTaskQueue())
-	println("NoProxy:", got)
-
-	sock5ProxySettings := settings.NewProxySettings(true, "socks5", local_http_proxy_server.LocalHttpProxyPort,
-		"127.0.0.1", "10808", "", "")
-
-	got = GetPublicIP(log_helper.GetLogger4Tester(), settings.NewTaskQueue(), sock5ProxySettings)
-	println("UseProxy socks5:", got)
-	err := sock5ProxySettings.CloseLocalHttpProxyServer()
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	httpProxySettings := settings.NewProxySettings(true, "http", local_http_proxy_server.LocalHttpProxyPort,
-		"127.0.0.1", "10809", "", "")
-	got = GetPublicIP(log_helper.GetLogger4Tester(), settings.NewTaskQueue(), httpProxySettings)
-	println("UseProxy http:", got)
-	err = httpProxySettings.CloseLocalHttpProxyServer()
-	if err != nil {
-		t.Fatal(err)
-	}
+	//got := GetPublicIP(log_helper.GetLogger4Tester(), settings.NewTaskQueue())
+	//println("NoProxy:", got)
+	//
+	//sock5ProxySettings := settings.NewProxySettings(true, "socks5", local_http_proxy_server.LocalHttpProxyPort,
+	//	"127.0.0.1", "10808", "", "")
+	//
+	//got = GetPublicIP(log_helper.GetLogger4Tester(), settings.NewTaskQueue(), sock5ProxySettings)
+	//println("UseProxy socks5:", got)
+	//err := sock5ProxySettings.CloseLocalHttpProxyServer()
+	//if err != nil {
+	//	t.Fatal(err)
+	//}
+	//
+	//httpProxySettings := settings.NewProxySettings(true, "http", local_http_proxy_server.LocalHttpProxyPort,
+	//	"127.0.0.1", "10809", "", "")
+	//got = GetPublicIP(log_helper.GetLogger4Tester(), settings.NewTaskQueue(), httpProxySettings)
+	//println("UseProxy http:", got)
+	//err = httpProxySettings.CloseLocalHttpProxyServer()
+	//if err != nil {
+	//	t.Fatal(err)
+	//}
 }
 
 func TestSortByModTime(t *testing.T) {

+ 5 - 7
pkg/video_list_helper/video_list_helper.go

@@ -13,14 +13,12 @@ import (
 )
 
 type VideoListHelper struct {
-	settings *settings.Settings // 设置的实例
-	log      *logrus.Logger     // 日志实例
+	log *logrus.Logger // 日志实例
 }
 
-func NewVideoListHelper(log *logrus.Logger, settings *settings.Settings) *VideoListHelper {
+func NewVideoListHelper(log *logrus.Logger) *VideoListHelper {
 	return &VideoListHelper{
-		settings: settings,
-		log:      log,
+		log: log,
 	}
 }
 
@@ -47,7 +45,7 @@ func (v *VideoListHelper) RefreshMainList() (*vsh.NormalScanVideoResult, error)
 		}()
 		// --------------------------------------------------
 		// 电影
-		normalScanResult.MoviesDirMap, errMovie = search.MatchedVideoFileFromDirs(v.log, v.settings.CommonSettings.MoviePaths)
+		normalScanResult.MoviesDirMap, errMovie = search.MatchedVideoFileFromDirs(v.log, settings.Get().CommonSettings.MoviePaths)
 	}()
 	wg.Add(1)
 	go func() {
@@ -58,7 +56,7 @@ func (v *VideoListHelper) RefreshMainList() (*vsh.NormalScanVideoResult, error)
 		// --------------------------------------------------
 		// 连续剧
 		// 遍历连续剧总目录下的第一层目录
-		normalScanResult.SeriesDirMap, errSeries = seriesHelper.GetSeriesListFromDirs(v.log, v.settings.CommonSettings.SeriesPaths)
+		normalScanResult.SeriesDirMap, errSeries = seriesHelper.GetSeriesListFromDirs(v.log, settings.Get().CommonSettings.SeriesPaths)
 		// ------------------------------------------------------------------------------
 		// 输出调试信息,有那些连续剧文件夹名称
 		if normalScanResult.SeriesDirMap == nil {

+ 5 - 5
pkg/video_scan_and_refresh_helper/video_scan_and_refresh_helper.go

@@ -373,7 +373,7 @@ func (v *VideoScanAndRefreshHelper) scanLowVideoSubInfo(scanVideoResult *ScanVid
 
 			v.log.Infoln("--------------------------------------------------------------------------------")
 			v.log.Infoln("scanLowVideoSubInfo.MovieHasChineseSub", videoIndex, videoFPath)
-			mixMediaInfo, err := mix_media_info.GetMixMediaInfo(v.fileDownloader.MediaInfoDealers, videoFPath, true, settings.Get().AdvancedSettings.ProxySettings)
+			mixMediaInfo, err := mix_media_info.GetMixMediaInfo(v.fileDownloader.MediaInfoDealers, videoFPath, true)
 			if err != nil {
 				v.log.Warningln("scanLowVideoSubInfo.GetMixMediaInfo", videoFPath, err)
 				continue
@@ -423,7 +423,7 @@ func (v *VideoScanAndRefreshHelper) scanLowVideoSubInfo(scanVideoResult *ScanVid
 		seriesDirRootFPathLisst := seriesFPath.([]string)
 		for seriesDirIndex, seriesDirRootFPath := range seriesDirRootFPathLisst {
 
-			seriesInfo, err := seriesHelper.ReadSeriesInfoFromDir(v.fileDownloader.MediaInfoDealers, seriesDirRootFPath, 90, true, true, settings.Get().AdvancedSettings.ProxySettings)
+			seriesInfo, err := seriesHelper.ReadSeriesInfoFromDir(v.fileDownloader.MediaInfoDealers, seriesDirRootFPath, 90, true, true)
 			if err != nil {
 				v.log.Warningln("scanLowVideoSubInfo.ReadSeriesInfoFromDir", seriesDirRootFPath, err)
 				return false
@@ -433,7 +433,7 @@ func (v *VideoScanAndRefreshHelper) scanLowVideoSubInfo(scanVideoResult *ScanVid
 				continue
 			}
 
-			mixMediaInfo, err := mix_media_info.GetMixMediaInfo(v.fileDownloader.MediaInfoDealers, seriesInfo.EpList[0].FileFullPath, false, settings.Get().AdvancedSettings.ProxySettings)
+			mixMediaInfo, err := mix_media_info.GetMixMediaInfo(v.fileDownloader.MediaInfoDealers, seriesInfo.EpList[0].FileFullPath, false)
 			if err != nil {
 				v.log.Warningln("scanLowVideoSubInfo.GetMixMediaInfo", seriesInfo.EpList[0].FileFullPath, err)
 				continue
@@ -1046,7 +1046,7 @@ func (v *VideoScanAndRefreshHelper) updateLocalVideoCacheInfo(scanVideoResult *S
 			return err
 		}
 		// 获取 IMDB 信息
-		localIMDBInfo, err := imdb_helper.GetIMDBInfoFromVideoNfoInfo(v.fileDownloader.MediaInfoDealers, videoImdbInfo, settings.Get().AdvancedSettings.ProxySettings)
+		localIMDBInfo, err := imdb_helper.GetIMDBInfoFromVideoNfoInfo(v.fileDownloader.MediaInfoDealers, videoImdbInfo)
 		if err != nil {
 			v.log.Warningln("GetIMDBInfoFromVideoNfoInfo,IMDB:", videoImdbInfo.ImdbId, movieInputData.InputPath, err)
 			return err
@@ -1100,7 +1100,7 @@ func (v *VideoScanAndRefreshHelper) updateLocalVideoCacheInfo(scanVideoResult *S
 		}
 
 		// 获取 IMDB 信息
-		localIMDBInfo, err := imdb_helper.GetIMDBInfoFromVideoNfoInfo(v.fileDownloader.MediaInfoDealers, videoNfoInfo, settings.Get().AdvancedSettings.ProxySettings)
+		localIMDBInfo, err := imdb_helper.GetIMDBInfoFromVideoNfoInfo(v.fileDownloader.MediaInfoDealers, videoNfoInfo)
 		if err != nil {
 			v.log.Warningln("GetIMDBInfoFromVideoNfoInfo,IMDB:", videoNfoInfo.ImdbId, seriesInputData.InputPath, err)
 			return err