proxy.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package base
  2. import (
  3. subSupplier "github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier"
  4. "github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier/assrt"
  5. "github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier/shooter"
  6. "github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier/subhd"
  7. "github.com/allanpk716/ChineseSubFinder/internal/logic/sub_supplier/xunlei"
  8. "github.com/allanpk716/ChineseSubFinder/internal/types/backend"
  9. "github.com/gin-gonic/gin"
  10. "net/http"
  11. )
  12. func (cb *ControllerBase) CheckProxyHandler(c *gin.Context) {
  13. var err error
  14. defer func() {
  15. // 统一的异常处理
  16. cb.ErrorProcess(c, "CheckProxyHandler", err)
  17. }()
  18. checkProxy := backend.ReqCheckProxy{}
  19. err = c.ShouldBindJSON(&checkProxy)
  20. if err != nil {
  21. return
  22. }
  23. // 先尝试关闭之前的本地 http 代理
  24. err = cb.fileDownloader.Settings.AdvancedSettings.ProxySettings.CloseLocalHttpProxyServer()
  25. if err != nil {
  26. return
  27. }
  28. // 备份一份
  29. bkProxySettings := cb.fileDownloader.Settings.AdvancedSettings.ProxySettings.CopyOne()
  30. // 赋值 Web 传递过来的需要测试的代理参数
  31. cb.fileDownloader.Settings.AdvancedSettings.ProxySettings = &checkProxy.ProxySettings
  32. cb.fileDownloader.Settings.AdvancedSettings.ProxySettings.UseProxy = true
  33. // 使用提交过来的这个代理地址,测试多个字幕网站的可用性
  34. subSupplierHub := subSupplier.NewSubSupplierHub(
  35. // 这里无需传递下载字幕的缓存实例
  36. //zimuku.NewSupplier(cb.fileDownloader),
  37. xunlei.NewSupplier(cb.fileDownloader),
  38. shooter.NewSupplier(cb.fileDownloader),
  39. subhd.NewSupplier(cb.fileDownloader),
  40. )
  41. if cb.fileDownloader.Settings.SubtitleSources.AssrtSettings.Enabled == true &&
  42. cb.fileDownloader.Settings.SubtitleSources.AssrtSettings.Token != "" {
  43. // 如果开启了 ASSRt 字幕源,则需要测试 ASSRt 的代理
  44. subSupplierHub.AddSubSupplier(assrt.NewSupplier(cb.fileDownloader))
  45. }
  46. outStatus := subSupplierHub.CheckSubSiteStatus()
  47. defer func() {
  48. // 还原
  49. err = cb.fileDownloader.Settings.AdvancedSettings.ProxySettings.CloseLocalHttpProxyServer()
  50. if err != nil {
  51. return
  52. }
  53. cb.fileDownloader.Settings.AdvancedSettings.ProxySettings = bkProxySettings
  54. }()
  55. c.JSON(http.StatusOK, outStatus)
  56. }