proxy.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package base
  2. import (
  3. "net/http"
  4. "github.com/allanpk716/ChineseSubFinder/pkg/logic/sub_supplier/a4k"
  5. "github.com/allanpk716/ChineseSubFinder/pkg/types/backend"
  6. subSupplier "github.com/allanpk716/ChineseSubFinder/pkg/logic/sub_supplier"
  7. "github.com/allanpk716/ChineseSubFinder/pkg/logic/sub_supplier/assrt"
  8. "github.com/allanpk716/ChineseSubFinder/pkg/logic/sub_supplier/csf"
  9. "github.com/allanpk716/ChineseSubFinder/pkg/logic/sub_supplier/shooter"
  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. if cb.proxyCheckLocker.Lock() == false {
  20. c.JSON(http.StatusOK, backend.ReplyCommon{Message: "running"})
  21. return
  22. }
  23. checkProxy := backend.ReqCheckProxy{}
  24. err = c.ShouldBindJSON(&checkProxy)
  25. if err != nil {
  26. return
  27. }
  28. // 先尝试关闭之前的本地 http 代理
  29. err = cb.fileDownloader.Settings.AdvancedSettings.ProxySettings.CloseLocalHttpProxyServer()
  30. if err != nil {
  31. return
  32. }
  33. // 备份一份
  34. bkProxySettings := cb.fileDownloader.Settings.AdvancedSettings.ProxySettings.CopyOne()
  35. // 赋值 Web 传递过来的需要测试的代理参数
  36. cb.fileDownloader.Settings.AdvancedSettings.ProxySettings = &checkProxy.ProxySettings
  37. cb.fileDownloader.Settings.AdvancedSettings.ProxySettings.UseProxy = true
  38. // 使用提交过来的这个代理地址,测试多个字幕网站的可用性
  39. subSupplierHub := subSupplier.NewSubSupplierHub(
  40. // 这里无需传递下载字幕的缓存实例
  41. //zimuku.NewSupplier(cb.fileDownloader),
  42. //subhd.NewSupplier(cb.fileDownloader),
  43. xunlei.NewSupplier(cb.fileDownloader),
  44. shooter.NewSupplier(cb.fileDownloader),
  45. a4k.NewSupplier(cb.fileDownloader),
  46. )
  47. if cb.fileDownloader.Settings.SubtitleSources.AssrtSettings.Enabled == true &&
  48. cb.fileDownloader.Settings.SubtitleSources.AssrtSettings.Token != "" {
  49. // 如果开启了 ASSRt 字幕源,则需要测试 ASSRt 的代理
  50. subSupplierHub.AddSubSupplier(assrt.NewSupplier(cb.fileDownloader))
  51. }
  52. if cb.fileDownloader.Settings.ExperimentalFunction.ShareSubSettings.ShareSubEnabled == true {
  53. // 如果开启了分享字幕功能,那么就可以开启这个功能
  54. subSupplierHub.AddSubSupplier(csf.NewSupplier(cb.fileDownloader))
  55. }
  56. outStatus := subSupplierHub.CheckSubSiteStatus(cb.fileDownloader.Settings.AdvancedSettings.ProxySettings)
  57. defer func() {
  58. // 还原
  59. err = checkProxy.ProxySettings.CloseLocalHttpProxyServer()
  60. if err != nil {
  61. return
  62. }
  63. cb.fileDownloader.Settings.AdvancedSettings.ProxySettings = bkProxySettings
  64. cb.proxyCheckLocker.Unlock()
  65. err = cb.fileDownloader.Settings.AdvancedSettings.ProxySettings.CloseLocalHttpProxyServer()
  66. if err != nil {
  67. return
  68. }
  69. }()
  70. c.JSON(http.StatusOK, outStatus)
  71. }