proxy.go 2.5 KB

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