refactor: ShareLink.ParseText Non-Nullable

refactor: UpdateServersFromSubscribe
This commit is contained in:
ChsBuffer
2020-10-09 19:56:47 +08:00
parent be53432a2e
commit ed3f4d1763
2 changed files with 64 additions and 83 deletions

View File

@@ -26,19 +26,8 @@ namespace Netch.Forms
var texts = Clipboard.GetText();
if (!string.IsNullOrWhiteSpace(texts))
{
var result = ShareLink.ParseText(texts);
if (result != null)
{
foreach (var server in result)
{
Global.Settings.Server.Add(server);
}
}
else
{
MessageBoxX.Show(i18N.Translate("Import servers error!"), LogLevel.ERROR);
}
Global.Settings.Server.AddRange(ShareLink.ParseText(texts));
NotifyTip(i18N.TranslateFormat("Import {0} server(s) form Clipboard", ShareLink.ParseText(texts).Count));
InitServer();
Configuration.Save();
@@ -108,6 +97,9 @@ namespace Netch.Forms
await UpdateServersFromSubscribe();
}
private readonly object _serverLock = new object();
public async Task UpdateServersFromSubscribe()
{
void DisableItems(bool v)
@@ -144,8 +136,6 @@ namespace Netch.Forms
await MainController.Start(ServerComboBox.SelectedItem as Server, mode);
}
var serverLock = new object();
await Task.WhenAll(Global.Settings.SubscribeLink.Select(async item => await Task.Run(async () =>
{
try
@@ -156,31 +146,25 @@ namespace Netch.Forms
if (Global.Settings.UseProxyToUpdateSubscription)
request.Proxy = new WebProxy($"http://127.0.0.1:{Global.Settings.HTTPLocalPort}");
var str = await WebUtil.DownloadStringAsync(request);
var servers = ShareLink.ParseText(await WebUtil.DownloadStringAsync(request));
lock (serverLock)
foreach (var server in servers)
{
Global.Settings.Server.RemoveAll(server => server.Group == item.Remark);
var result = ShareLink.ParseText(str);
if (result != null)
{
foreach (var server in result)
{
server.Group = item.Remark;
Global.Settings.Server.Add(server);
}
}
NotifyTip(i18N.TranslateFormat("Update {1} server(s) from {0}", item.Remark, result?.Count ?? 0));
server.Group = item.Remark;
}
}
catch (WebException e)
{
NotifyTip($"{i18N.TranslateFormat("Update servers error from {0}", item.Remark)}\n{e.Message}", info: false);
lock (_serverLock)
{
Global.Settings.Server.RemoveAll(server => server.Group.Equals(item.Remark));
Global.Settings.Server.AddRange(servers);
}
NotifyTip(i18N.TranslateFormat("Update {1} server(s) from {0}", item.Remark, servers.Count));
}
catch (Exception e)
{
NotifyTip($"{i18N.TranslateFormat("Update servers error from {0}", item.Remark)}\n{e.Message}", info: false);
Logging.Error(e.ToString());
}
})).ToArray());

View File

@@ -120,42 +120,30 @@ namespace Netch.Utils
}
var list = new List<Server>();
try
{
try
list.AddRange(JsonConvert.DeserializeObject<List<ShadowsocksConfig>>(text).Select(server => new Shadowsocks
{
list.AddRange(JsonConvert.DeserializeObject<List<ShadowsocksConfig>>(text).Select(server => new Shadowsocks
{
Hostname = server.server,
Port = server.server_port,
EncryptMethod = server.method,
Password = server.password,
Remark = server.remarks,
Plugin = server.plugin,
PluginOption = server.plugin_opts
}));
}
catch (JsonReaderException)
Hostname = server.server,
Port = server.server_port,
EncryptMethod = server.method,
Password = server.password,
Remark = server.remarks,
Plugin = server.plugin,
PluginOption = server.plugin_opts
}));
}
catch (JsonReaderException)
{
foreach (var line in text.GetLines())
{
foreach (var line in text.GetLines())
{
var servers = ParseUri(line);
if (servers != null)
{
list.AddRange(servers);
}
}
}
if (list.Count == 0)
{
return null;
list.AddRange(ParseUri(line));
}
}
catch (Exception e)
{
Logging.Error(e.ToString());
return null;
}
return list;
@@ -179,19 +167,19 @@ namespace Netch.Utils
{
var scheme = GetUriScheme(text);
var util = ServerHelper.GetUtilByUriScheme(scheme);
if (util == null)
if (util != null)
{
list.AddRange(util.ParseUri(text));
}
else
{
Logging.Warning($"无法处理 {scheme} 协议订阅链接");
return null;
}
list.AddRange(util.ParseUri(text));
}
}
catch (Exception e)
{
Logging.Error(e.ToString());
return null;
}
foreach (var node in list)
@@ -212,26 +200,35 @@ namespace Netch.Utils
private static Server ParseNetchUri(string text)
{
text = text.Substring(8);
var NetchLink = (JObject) JsonConvert.DeserializeObject(URLSafeBase64Decode(text));
if (NetchLink == null)
try
{
text = text.Substring(8);
var NetchLink = (JObject) JsonConvert.DeserializeObject(URLSafeBase64Decode(text));
if (NetchLink == null)
{
return null;
}
if (string.IsNullOrEmpty((string) NetchLink["Hostname"]))
{
return null;
}
if (!ushort.TryParse((string) NetchLink["Port"], out _))
{
return null;
}
var type = (string) NetchLink["Type"];
var s = ServerHelper.GetUtilByTypeName(type).ParseJObject(NetchLink);
return ServerHelper.GetUtilByTypeName(s.Type).CheckServer(s) ? s : null;
}
catch (Exception e)
{
Logging.Warning(e.ToString());
return null;
}
if (string.IsNullOrEmpty((string) NetchLink["Hostname"]))
{
return null;
}
if (!ushort.TryParse((string) NetchLink["Port"], out _))
{
return null;
}
var type = (string) NetchLink["Type"];
var s = ServerHelper.GetUtilByTypeName(type).ParseJObject(NetchLink);
return ServerHelper.GetUtilByTypeName(s.Type).CheckServer(s) ? s : null;
}
public static string GetNetchLink(Server s)