| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | package baseimport (	"net/http"	"github.com/allanpk716/ChineseSubFinder/pkg/logic/sub_supplier/a4k"	"github.com/allanpk716/ChineseSubFinder/pkg/types/backend"	subSupplier "github.com/allanpk716/ChineseSubFinder/pkg/logic/sub_supplier"	"github.com/allanpk716/ChineseSubFinder/pkg/logic/sub_supplier/assrt"	"github.com/allanpk716/ChineseSubFinder/pkg/logic/sub_supplier/csf"	"github.com/allanpk716/ChineseSubFinder/pkg/logic/sub_supplier/shooter"	"github.com/allanpk716/ChineseSubFinder/pkg/logic/sub_supplier/xunlei"	"github.com/gin-gonic/gin")func (cb *ControllerBase) CheckProxyHandler(c *gin.Context) {	var err error	defer func() {		// 统一的异常处理		cb.ErrorProcess(c, "CheckProxyHandler", err)	}()	if cb.proxyCheckLocker.Lock() == false {		c.JSON(http.StatusOK, backend.ReplyCommon{Message: "running"})		return	}	checkProxy := backend.ReqCheckProxy{}	err = c.ShouldBindJSON(&checkProxy)	if err != nil {		return	}	// 先尝试关闭之前的本地 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(cb.fileDownloader),		//subhd.NewSupplier(cb.fileDownloader),		xunlei.NewSupplier(cb.fileDownloader),		shooter.NewSupplier(cb.fileDownloader),		a4k.NewSupplier(cb.fileDownloader),	)	if cb.fileDownloader.Settings.SubtitleSources.AssrtSettings.Enabled == true &&		cb.fileDownloader.Settings.SubtitleSources.AssrtSettings.Token != "" {		// 如果开启了 ASSRt 字幕源,则需要测试 ASSRt 的代理		subSupplierHub.AddSubSupplier(assrt.NewSupplier(cb.fileDownloader))	}	if cb.fileDownloader.Settings.ExperimentalFunction.ShareSubSettings.ShareSubEnabled == true {		// 如果开启了分享字幕功能,那么就可以开启这个功能		subSupplierHub.AddSubSupplier(csf.NewSupplier(cb.fileDownloader))	}	outStatus := subSupplierHub.CheckSubSiteStatus(cb.fileDownloader.Settings.AdvancedSettings.ProxySettings)	defer func() {		// 还原		err = checkProxy.ProxySettings.CloseLocalHttpProxyServer()		if err != nil {			return		}		cb.fileDownloader.Settings.AdvancedSettings.ProxySettings = bkProxySettings		cb.proxyCheckLocker.Unlock()		err = cb.fileDownloader.Settings.AdvancedSettings.ProxySettings.CloseLocalHttpProxyServer()		if err != nil {			return		}	}()	c.JSON(http.StatusOK, outStatus)}
 |