Show Providers proxy
This commit is contained in:
@@ -11,6 +11,7 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using static clashN.Mode.ClashProviders;
|
||||
using static clashN.Mode.ClashProxies;
|
||||
|
||||
namespace clashN.Forms
|
||||
@@ -18,6 +19,7 @@ namespace clashN.Forms
|
||||
public partial class ProxiesForm : BaseForm
|
||||
{
|
||||
Dictionary<String, ProxiesItem> proxies;
|
||||
Dictionary<String, ProvidersItem> providers;
|
||||
ProxiesItem selectedProxy;
|
||||
|
||||
public ProxiesForm()
|
||||
@@ -78,9 +80,11 @@ namespace clashN.Forms
|
||||
|
||||
private void GetClashProxies(bool refreshUI)
|
||||
{
|
||||
MainFormHandler.Instance.GetClashProxies(config, it =>
|
||||
MainFormHandler.Instance.GetClashProxies(config, (it, it2) =>
|
||||
{
|
||||
proxies = it.proxies;
|
||||
providers = it2.providers;
|
||||
|
||||
LazyConfig.Instance.SetProxies(proxies);
|
||||
if (refreshUI)
|
||||
{
|
||||
@@ -106,7 +110,7 @@ namespace clashN.Forms
|
||||
|
||||
foreach (KeyValuePair<string, ProxiesItem> kv in proxies)
|
||||
{
|
||||
if (kv.Value.type != "Selector" && kv.Value.type != "URLTest")
|
||||
if (!Global.allowSelectType.Contains(kv.Value.type.ToLower()))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -159,7 +163,8 @@ namespace clashN.Forms
|
||||
foreach (var item in proxy.all)
|
||||
{
|
||||
var isActive = item == proxy.now;
|
||||
proxies.TryGetValue(item, out ProxiesItem proxy2);
|
||||
|
||||
var proxy2 = TryGetProxy(item);
|
||||
if (proxy2 == null)
|
||||
{
|
||||
continue;
|
||||
@@ -197,6 +202,28 @@ namespace clashN.Forms
|
||||
lvDetail.EndUpdate();
|
||||
}
|
||||
|
||||
private ProxiesItem TryGetProxy(string name)
|
||||
{
|
||||
proxies.TryGetValue(name, out ProxiesItem proxy2);
|
||||
if (proxy2 != null)
|
||||
{
|
||||
return proxy2;
|
||||
}
|
||||
//from providers
|
||||
foreach (KeyValuePair<string, ProvidersItem> kv in providers)
|
||||
{
|
||||
if (Global.proxyVehicleType.Contains(kv.Value.vehicleType.ToLower()))
|
||||
{
|
||||
var proxy3 = kv.Value.proxies.FirstOrDefault(t => t.name == name);
|
||||
if (proxy3 != null)
|
||||
{
|
||||
return proxy3;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private void lvProxies_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
RefreshDetail(GetLvSelectedIndex());
|
||||
|
||||
@@ -48,7 +48,7 @@ namespace clashN
|
||||
/// </summary>
|
||||
public const string httpsProtocol = "https://";
|
||||
|
||||
public const string clashProtocol = "clash://";
|
||||
public const string clashProtocol = "clash://";
|
||||
|
||||
/// <summary>
|
||||
/// MyRegPath
|
||||
@@ -83,6 +83,12 @@ namespace clashN
|
||||
|
||||
public static readonly List<string> coreTypes = new List<string> { "clash", "clash_meta" };
|
||||
|
||||
public static readonly List<string> allowSelectType = new List<string> { "selector", "urltest" };
|
||||
|
||||
public static readonly List<string> notAllowTestType = new List<string> { "selector", "urltest", "direct", "reject", "compatible", "pass" };
|
||||
|
||||
public static readonly List<string> proxyVehicleType = new List<string> { "file", "http" };
|
||||
|
||||
public const string CheckMark = "√";
|
||||
|
||||
|
||||
|
||||
@@ -100,6 +100,12 @@ namespace clashN.Handler
|
||||
ModifyContent(fileContent, "allow-lan", "false");
|
||||
}
|
||||
|
||||
//mode
|
||||
if (!fileContent.ContainsKey("mode"))
|
||||
{
|
||||
ModifyContent(fileContent, "mode", "Rule");
|
||||
}
|
||||
|
||||
//enable tun mode
|
||||
if (node.enableTun)
|
||||
{
|
||||
|
||||
@@ -12,6 +12,7 @@ using System.Linq;
|
||||
using clashN.Resx;
|
||||
using static clashN.Mode.ClashProxies;
|
||||
using clashN.Base;
|
||||
using static clashN.Mode.ClashProviders;
|
||||
|
||||
namespace clashN.Handler
|
||||
{
|
||||
@@ -195,19 +196,22 @@ namespace clashN.Handler
|
||||
}
|
||||
}
|
||||
|
||||
public void GetClashProxies(Config config, Action<ClashProxies> update)
|
||||
public void GetClashProxies(Config config, Action<ClashProxies, ClashProviders> update)
|
||||
{
|
||||
Task.Run(() => GetClashProxiesAsync(config, update));
|
||||
}
|
||||
|
||||
private async Task GetClashProxiesAsync(Config config, Action<ClashProxies> update)
|
||||
private async Task GetClashProxiesAsync(Config config, Action<ClashProxies, ClashProviders> update)
|
||||
{
|
||||
var url = $"{Global.httpProtocol}{Global.Loopback}:{config.APIPort}/proxies";
|
||||
var result = await Base.HttpClientHelper.GetInstance().GetAsync(url);
|
||||
|
||||
var result = await HttpClientHelper.GetInstance().GetAsync(url);
|
||||
var clashProxies = Utils.FromJson<ClashProxies>(result);
|
||||
|
||||
update(clashProxies);
|
||||
var url2 = $"{Global.httpProtocol}{Global.Loopback}:{config.APIPort}/providers/proxies";
|
||||
var result2 = await HttpClientHelper.GetInstance().GetAsync(url2);
|
||||
var clashProviders = Utils.FromJson<ClashProviders>(result2);
|
||||
|
||||
update(clashProxies, clashProviders);
|
||||
}
|
||||
|
||||
public void ClashProxiesDelayTest(Action<string> update)
|
||||
@@ -225,11 +229,7 @@ namespace clashN.Handler
|
||||
List<Task> tasks = new List<Task>();
|
||||
foreach (KeyValuePair<string, ProxiesItem> kv in proxies)
|
||||
{
|
||||
if (kv.Value.type == "Selector"
|
||||
|| kv.Value.type == "URLTest"
|
||||
|| kv.Value.type == "Direct"
|
||||
|| kv.Value.type == "Reject"
|
||||
)
|
||||
if (Global.notAllowTestType.Contains(kv.Value.type.ToLower()))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
19
clashN/clashN/Mode/ClashProviders.cs
Normal file
19
clashN/clashN/Mode/ClashProviders.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using static clashN.Mode.ClashProxies;
|
||||
|
||||
namespace clashN.Mode
|
||||
{
|
||||
public class ClashProviders
|
||||
{
|
||||
public Dictionary<String, ProvidersItem> providers { get; set; }
|
||||
|
||||
public class ProvidersItem
|
||||
{
|
||||
public string name { get; set; }
|
||||
public ProxiesItem[] proxies { get; set; }
|
||||
public string type { get; set; }
|
||||
public string vehicleType { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user