Ver código fonte

修复代理检测的问题

Signed-off-by: allan716 <[email protected]>
allan716 3 anos atrás
pai
commit
f8d9279d3c

+ 19 - 9
internal/backend/controllers/base/proxy.go

@@ -1,7 +1,6 @@
 package base
 
 import (
-	"github.com/allanpk716/ChineseSubFinder/internal/logic/file_downloader"
 	subSupplier "github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier"
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier/shooter"
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier/subhd"
@@ -9,7 +8,6 @@ import (
 	"github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier/zimuku"
 	"github.com/allanpk716/ChineseSubFinder/internal/types/backend"
 	"github.com/gin-gonic/gin"
-	"github.com/huandu/go-clone"
 	"net/http"
 )
 
@@ -26,21 +24,33 @@ func (cb *ControllerBase) CheckProxyHandler(c *gin.Context) {
 		return
 	}
 
-	tmpFileDownloader := clone.Clone(cb.fileDownloader).(*file_downloader.FileDownloader)
-	tmpFileDownloader.Settings.AdvancedSettings.ProxySettings = &checkProxy.ProxySettings
-	tmpFileDownloader.Settings.AdvancedSettings.ProxySettings.UseProxy = true
+	// 先尝试关闭之前的本地 http 代理
+	err = cb.fileDownloader.Settings.AdvancedSettings.ProxySettings.CloseLocalHttpProxyServer()
+	if err != nil {
+		return
+	}
+	// 备份一份
+	bkProxySettings := cb.fileDownloader.Settings.AdvancedSettings.ProxySettings.CopyOne()
+	// 赋值 Web 传递过来的需要测试的代理参数
+	cb.fileDownloader.Settings.AdvancedSettings.ProxySettings = &checkProxy.ProxySettings
+	cb.fileDownloader.Settings.AdvancedSettings.ProxySettings.UseProxy = true
 
 	// 使用提交过来的这个代理地址,测试多个字幕网站的可用性
 	subSupplierHub := subSupplier.NewSubSupplierHub(
 		// 这里无需传递下载字幕的缓存实例
-		zimuku.NewSupplier(tmpFileDownloader),
-		xunlei.NewSupplier(tmpFileDownloader),
-		shooter.NewSupplier(tmpFileDownloader),
-		subhd.NewSupplier(tmpFileDownloader),
+		zimuku.NewSupplier(cb.fileDownloader),
+		xunlei.NewSupplier(cb.fileDownloader),
+		shooter.NewSupplier(cb.fileDownloader),
+		subhd.NewSupplier(cb.fileDownloader),
 	)
 
 	outStatus := subSupplierHub.CheckSubSiteStatus()
 
+	defer func() {
+		// 还原
+		cb.fileDownloader.Settings.AdvancedSettings.ProxySettings = bkProxySettings
+	}()
+
 	c.JSON(http.StatusOK, outStatus)
 
 }

+ 7 - 0
internal/pkg/settings/proxy_settings.go

@@ -38,6 +38,13 @@ func NewProxySettings(useProxy bool, useWhichProxyProtocol string,
 	return &set
 }
 
+func (p *ProxySettings) CopyOne() *ProxySettings {
+	return NewProxySettings(
+		p.UseProxy, p.UseWhichProxyProtocol, p.LocalHttpProxyServerPort,
+		p.InputProxyAddress, p.InputProxyPort,
+		p.InputProxyUsername, p.InputProxyPassword)
+}
+
 func (p *ProxySettings) GetLocalHttpProxyUrl() string {
 	defer p.locker.Unlock()
 	p.locker.Lock()