From ca1abb58ebf47844756ab904dbc4aacacea8f5b3 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sun, 12 Feb 2023 20:42:10 +0800 Subject: [PATCH] Add subscription update multiple update function --- v2rayN/v2rayN/Handler/DownloadHandle.cs | 92 ++++++++++++++++++++++--- v2rayN/v2rayN/Handler/UpdateHandle.cs | 6 +- 2 files changed, 84 insertions(+), 14 deletions(-) diff --git a/v2rayN/v2rayN/Handler/DownloadHandle.cs b/v2rayN/v2rayN/Handler/DownloadHandle.cs index 07f3fb9c..9a1569fe 100644 --- a/v2rayN/v2rayN/Handler/DownloadHandle.cs +++ b/v2rayN/v2rayN/Handler/DownloadHandle.cs @@ -121,19 +121,15 @@ namespace v2rayN.Handler } } - /// - /// DownloadString - /// - /// - public async Task DownloadStringAsync(string url, bool blProxy, string userAgent) + public async Task TryDownloadString(string url, bool blProxy, string userAgent) { try { - Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().guiItem.enableSecurityProtocolTls13); - - var webProxy = GetWebProxy(blProxy); - var result = await DownloaderHelper.Instance.DownloadStringAsync(webProxy, url, userAgent, 30); - return result; + var result1 = await DownloadStringAsync(url, blProxy, userAgent); + if (!Utils.IsNullOrEmpty(result1)) + { + return result1; + } } catch (Exception ex) { @@ -144,6 +140,48 @@ namespace v2rayN.Handler Error?.Invoke(this, new ErrorEventArgs(ex.InnerException)); } } + + try + { + var result2 = await DownloadStringViaDownloader(url, blProxy, userAgent); + if (!Utils.IsNullOrEmpty(result2)) + { + return result2; + } + } + catch (Exception ex) + { + Utils.SaveLog(ex.Message, ex); + Error?.Invoke(this, new ErrorEventArgs(ex)); + if (ex.InnerException != null) + { + Error?.Invoke(this, new ErrorEventArgs(ex.InnerException)); + } + } + + try + { + using (var wc = new WebClient()) + { + wc.Proxy = GetWebProxy(blProxy); + var result3 = await wc.DownloadStringTaskAsync(url); + if (!Utils.IsNullOrEmpty(result3)) + { + return result3; + } + } + } + catch (Exception ex) + { + Utils.SaveLog(ex.Message, ex); + Error?.Invoke(this, new ErrorEventArgs(ex)); + if (ex.InnerException != null) + { + Error?.Invoke(this, new ErrorEventArgs(ex.InnerException)); + } + } + + return null; } @@ -151,7 +189,7 @@ namespace v2rayN.Handler /// DownloadString /// /// - public async Task DownloadStringAsyncOri(string url, bool blProxy, string userAgent) + public async Task DownloadStringAsync(string url, bool blProxy, string userAgent) { try { @@ -192,6 +230,38 @@ namespace v2rayN.Handler return null; } + /// + /// DownloadString + /// + /// + public async Task DownloadStringViaDownloader(string url, bool blProxy, string userAgent) + { + try + { + Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().guiItem.enableSecurityProtocolTls13); + + var webProxy = GetWebProxy(blProxy); + + if (Utils.IsNullOrEmpty(userAgent)) + { + userAgent = $"{Utils.GetVersion(false)}"; + } + var result = await DownloaderHelper.Instance.DownloadStringAsync(webProxy, url, userAgent, 30); + return result; + } + catch (Exception ex) + { + Utils.SaveLog(ex.Message, ex); + Error?.Invoke(this, new ErrorEventArgs(ex)); + if (ex.InnerException != null) + { + Error?.Invoke(this, new ErrorEventArgs(ex.InnerException)); + } + } + return null; + } + + public int RunAvailabilityCheck(WebProxy webProxy) { try diff --git a/v2rayN/v2rayN/Handler/UpdateHandle.cs b/v2rayN/v2rayN/Handler/UpdateHandle.cs index ab1eab67..a3ba3777 100644 --- a/v2rayN/v2rayN/Handler/UpdateHandle.cs +++ b/v2rayN/v2rayN/Handler/UpdateHandle.cs @@ -213,10 +213,10 @@ namespace v2rayN.Handler url = Utils.GetPunycode(url); _updateFunc(false, $"{hashCode}{ResUI.MsgStartGettingSubscriptions}"); - var result = await downloadHandle.DownloadStringAsync(url, blProxy, userAgent); + var result = await downloadHandle.TryDownloadString(url, blProxy, userAgent); if (blProxy && Utils.IsNullOrEmpty(result)) { - result = await downloadHandle.DownloadStringAsync(url, false, userAgent); + result = await downloadHandle.TryDownloadString(url, false, userAgent); } if (Utils.IsNullOrEmpty(result)) @@ -328,7 +328,7 @@ namespace v2rayN.Handler var coreInfo = LazyConfig.Instance.GetCoreInfo(type); string url = coreInfo.coreReleaseApiUrl; - var result = await (new DownloadHandle()).DownloadStringAsyncOri(url, true, ""); + var result = await (new DownloadHandle()).DownloadStringAsync(url, true, ""); if (!Utils.IsNullOrEmpty(result)) { responseHandler(type, result, preRelease);