mirror of
https://github.com/bolucat/Archive.git
synced 2025-10-03 15:27:34 +08:00
55 lines
1.8 KiB
C#
55 lines
1.8 KiB
C#
using System.Net;
|
|
using Netch.Models;
|
|
|
|
namespace Netch.Utils;
|
|
|
|
public static class SubscriptionUtil
|
|
{
|
|
private static readonly object ServerLock = new();
|
|
|
|
public static Task UpdateServersAsync(string? proxyServer = default)
|
|
{
|
|
return Task.WhenAll(Global.Settings.Subscription.Select(item => UpdateServerCoreAsync(item, proxyServer)));
|
|
}
|
|
|
|
private static async Task UpdateServerCoreAsync(Subscription item, string? proxyServer)
|
|
{
|
|
try
|
|
{
|
|
if (!item.Enable)
|
|
return;
|
|
|
|
var request = WebUtil.CreateRequest(item.Link);
|
|
|
|
if (!string.IsNullOrEmpty(item.UserAgent))
|
|
request.UserAgent = item.UserAgent;
|
|
|
|
if (!string.IsNullOrEmpty(proxyServer))
|
|
request.Proxy = new WebProxy(proxyServer);
|
|
|
|
List<Server> servers;
|
|
|
|
var (code, result) = await WebUtil.DownloadStringAsync(request);
|
|
if (code == HttpStatusCode.OK)
|
|
servers = ShareLink.ParseText(result);
|
|
else
|
|
throw new Exception($"{item.Remark} Response Status Code: {code}");
|
|
|
|
foreach (var server in servers)
|
|
server.Group = item.Remark;
|
|
|
|
lock (ServerLock)
|
|
{
|
|
Global.Settings.Server.RemoveAll(server => server.Group.Equals(item.Remark));
|
|
Global.Settings.Server.AddRange(servers);
|
|
}
|
|
|
|
Global.MainForm.NotifyTip(i18N.TranslateFormat("Update {1} server(s) from {0}", item.Remark, servers.Count));
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Global.MainForm.NotifyTip($"{i18N.TranslateFormat("Update servers failed from {0}", item.Remark)}\n{e.Message}", info: false);
|
|
Log.Warning(e, "Update servers failed");
|
|
}
|
|
}
|
|
} |