add update config with api

This commit is contained in:
2dust
2022-08-10 10:59:54 +08:00
parent fc0e31fb33
commit dd7a6b2b5a
4 changed files with 54 additions and 23 deletions

View File

@@ -83,7 +83,17 @@ namespace clashN.Base
var byteContent = new ByteArrayContent(buffer); var byteContent = new ByteArrayContent(buffer);
byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var result = await httpClient.PutAsync(url, byteContent); await httpClient.PutAsync(url, byteContent);
}
public async Task PatchAsync(string url, Dictionary<string, string> headers)
{
var myContent = Utils.ToJson(headers);
var buffer = System.Text.Encoding.UTF8.GetBytes(myContent);
var byteContent = new ByteArrayContent(buffer);
byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
await httpClient.PatchAsync(url, byteContent);
} }
public async Task DownloadFileAsync(HttpClient client, string url, string fileName, IProgress<double> progress, CancellationToken token) public async Task DownloadFileAsync(HttpClient client, string url, string fileName, IProgress<double> progress, CancellationToken token)

View File

@@ -99,7 +99,6 @@ namespace clashN.Forms
OnProgramStarted("shown", true); OnProgramStarted("shown", true);
_ = LoadCore(); _ = LoadCore();
SetRuleMode(config.ruleMode, false);
proxiesControl.Init(config, UpdateTaskHandler); proxiesControl.Init(config, UpdateTaskHandler);
} }
@@ -456,7 +455,7 @@ namespace clashN.Forms
statistics?.SaveToFile(); statistics?.SaveToFile();
ChangePACButtonStatus(config.sysProxyType); ChangePACButtonStatus(config.sysProxyType);
//SetRuleMode(config.ruleMode, false); SetRuleMode(config.ruleMode);
SwitchUI(true); SwitchUI(true);
proxiesControl.ProxiesReload(); proxiesControl.ProxiesReload();
@@ -1172,24 +1171,24 @@ namespace clashN.Forms
private void menuModeRule_Click(object sender, EventArgs e) private void menuModeRule_Click(object sender, EventArgs e)
{ {
SetRuleMode(ERuleMode.Rule, true); SetRuleMode(ERuleMode.Rule);
} }
private void menuModeGlobal_Click(object sender, EventArgs e) private void menuModeGlobal_Click(object sender, EventArgs e)
{ {
SetRuleMode(ERuleMode.Global, true); SetRuleMode(ERuleMode.Global);
} }
private void menuModeDirect_Click(object sender, EventArgs e) private void menuModeDirect_Click(object sender, EventArgs e)
{ {
SetRuleMode(ERuleMode.Direct, true); SetRuleMode(ERuleMode.Direct);
} }
private void menuModeKeep_Click(object sender, EventArgs e) private void menuModeKeep_Click(object sender, EventArgs e)
{ {
SetRuleMode(ERuleMode.Unchanged, true); SetRuleMode(ERuleMode.Unchanged);
} }
private void SetRuleMode(ERuleMode mode, bool reloadCore) private void SetRuleMode(ERuleMode mode)
{ {
for (int k = 0; k < menuRuleMode.DropDownItems.Count; k++) for (int k = 0; k < menuRuleMode.DropDownItems.Count; k++)
{ {
@@ -1198,18 +1197,15 @@ namespace clashN.Forms
} }
mainMsgControl.SetToolSslInfo("routing", mode.ToString()); mainMsgControl.SetToolSslInfo("routing", mode.ToString());
//if (config.ruleMode == mode) AppendText(false, $"{config.ruleMode.ToString()}->{mode.ToString()}");
//{ config.ruleMode = mode;
// return; ConfigHandler.SaveConfig(ref config, false);
//}
if (reloadCore) if (mode != ERuleMode.Unchanged)
{ {
config.ruleMode = mode; Dictionary<string, string> headers = new Dictionary<string, string>();
headers.Add("mode", config.ruleMode.ToString().ToLower());
Global.reloadCore = true; MainFormHandler.Instance.ClashConfigUpdate(headers);
_ = LoadCore();
ConfigHandler.SaveConfig(ref config, false);
} }
} }

View File

@@ -254,12 +254,15 @@ namespace clashN.Forms
{ {
return; return;
} }
var name = lvProxies.Items[index].Tag.ToString(); var name = lvProxies.Items[index].Tag.ToString();
if (Utils.IsNullOrEmpty(name)) if (Utils.IsNullOrEmpty(name))
{ {
return; return;
} }
if (proxies == null)
{
return;
}
proxies.TryGetValue(name, out ProxiesItem proxy); proxies.TryGetValue(name, out ProxiesItem proxy);
if (proxy == null || proxy.all == null) if (proxy == null || proxy.all == null)
@@ -406,10 +409,7 @@ namespace clashN.Forms
return; return;
} }
var url = $"{Global.httpProtocol}{Global.Loopback}:{_config.APIPort}/proxies/{name}"; MainFormHandler.Instance.ClashSetActiveProxy(name, nameNode);
Dictionary<string, string> headers = new Dictionary<string, string>();
headers.Add("name", nameNode);
_ = HttpClientHelper.GetInstance().PutAsync(url, headers);
selectedProxy.now = nameNode; selectedProxy.now = nameNode;
RefreshDetail(GetLvSelectedIndex()); RefreshDetail(GetLvSelectedIndex());

View File

@@ -332,5 +332,30 @@ namespace clashN.Handler
return null; return null;
} }
} }
public async void ClashSetActiveProxy(string name, string nameNode)
{
var url = $"{Global.httpProtocol}{Global.Loopback}:{LazyConfig.Instance.GetConfig().APIPort}/proxies/{name}";
Dictionary<string, string> headers = new Dictionary<string, string>();
headers.Add("name", nameNode);
await HttpClientHelper.GetInstance().PutAsync(url, headers);
}
public void ClashConfigUpdate(Dictionary<string, string> headers)
{
Task.Run(async () =>
{
var proxies = LazyConfig.Instance.GetProxies();
if (proxies == null)
{
return;
}
var urlBase = $"{Global.httpProtocol}{Global.Loopback}:{LazyConfig.Instance.GetConfig().APIPort}/configs";
await HttpClientHelper.GetInstance().PatchAsync(urlBase, headers);
});
}
} }
} }