Compare commits

...

3 commits

Author SHA1 Message Date
2dust
7fbb0013b0 Optimizing Task Code
Some checks are pending
release Linux / build (Release) (push) Waiting to run
release macOS / build (Release) (push) Waiting to run
release Windows desktop (Avalonia UI) / build (Release) (push) Waiting to run
release Windows / build (Release) (push) Waiting to run
2025-03-03 16:57:55 +08:00
2dust
837cfbd03b Optimize UI prompts 2025-03-03 14:36:30 +08:00
2dust
cdc5d72cfa Update CoreConfigSingboxService.cs 2025-03-03 14:36:01 +08:00
14 changed files with 57 additions and 53 deletions

View file

@ -7,9 +7,9 @@ namespace ServiceLib.Handler
private static readonly Lazy<ClashApiHandler> instance = new(() => new()); private static readonly Lazy<ClashApiHandler> instance = new(() => new());
public static ClashApiHandler Instance => instance.Value; public static ClashApiHandler Instance => instance.Value;
private static readonly string _tag = "ClashApiHandler";
private Dictionary<string, ProxiesItem>? _proxies; private Dictionary<string, ProxiesItem>? _proxies;
public Dictionary<string, object> ProfileContent { get; set; } public Dictionary<string, object> ProfileContent { get; set; }
private static readonly string _tag = "ClashApiHandler";
public async Task<Tuple<ClashProxies, ClashProviders>?> GetClashProxiesAsync(Config config) public async Task<Tuple<ClashProxies, ClashProviders>?> GetClashProxiesAsync(Config config)
{ {
@ -54,7 +54,7 @@ namespace ServiceLib.Handler
return; return;
} }
lstProxy = new List<ClashProxyModel>(); lstProxy = new List<ClashProxyModel>();
foreach (KeyValuePair<string, ProxiesItem> kv in _proxies) foreach (var kv in _proxies)
{ {
if (Global.notAllowTestType.Contains(kv.Value.type.ToLower())) if (Global.notAllowTestType.Contains(kv.Value.type.ToLower()))
{ {

View file

@ -26,7 +26,7 @@ namespace ServiceLib.Handler
//Execute once 20 minute //Execute once 20 minute
if (numOfExecuted % 20 == 0) if (numOfExecuted % 20 == 0)
{ {
Logging.SaveLog("Execute save config"); //Logging.SaveLog("Execute save config");
await ConfigHandler.SaveConfig(config); await ConfigHandler.SaveConfig(config);
await ProfileExHandler.Instance.SaveTo(); await ProfileExHandler.Instance.SaveTo();
@ -35,7 +35,7 @@ namespace ServiceLib.Handler
//Execute once 1 hour //Execute once 1 hour
if (numOfExecuted % 60 == 0) if (numOfExecuted % 60 == 0)
{ {
Logging.SaveLog("Execute delete expired files"); //Logging.SaveLog("Execute delete expired files");
FileManager.DeleteExpiredFiles(Utils.GetBinConfigPath(), DateTime.Now.AddHours(-1)); FileManager.DeleteExpiredFiles(Utils.GetBinConfigPath(), DateTime.Now.AddHours(-1));
FileManager.DeleteExpiredFiles(Utils.GetLogPath(), DateTime.Now.AddMonths(-1)); FileManager.DeleteExpiredFiles(Utils.GetLogPath(), DateTime.Now.AddMonths(-1));
@ -72,7 +72,7 @@ namespace ServiceLib.Handler
updateFunc?.Invoke(success, msg); updateFunc?.Invoke(success, msg);
if (success) if (success)
{ {
Logging.SaveLog("Update subscription end" + msg); Logging.SaveLog($"Update subscription end. {msg}");
} }
}); });
item.UpdateTime = updateTime; item.UpdateTime = updateTime;

View file

@ -2483,7 +2483,7 @@ namespace ServiceLib.Resx {
} }
/// <summary> /// <summary>
/// 查找类似 Address(Ip,Ipv6) 的本地化字符串。 /// 查找类似 Address(Ipv4,Ipv6) 的本地化字符串。
/// </summary> /// </summary>
public static string TbLocalAddress { public static string TbLocalAddress {
get { get {

View file

@ -1319,7 +1319,7 @@
<value>Previous proxy remarks</value> <value>Previous proxy remarks</value>
</data> </data>
<data name="TbLocalAddress" xml:space="preserve"> <data name="TbLocalAddress" xml:space="preserve">
<value>آدرس (IP, IPv6)</value> <value>آدرس (IPv4, IPv6)</value>
</data> </data>
<data name="TbReserved" xml:space="preserve"> <data name="TbReserved" xml:space="preserve">
<value>Reserved(2,3,4)</value> <value>Reserved(2,3,4)</value>

View file

@ -1100,7 +1100,7 @@
<value>Fenntartva (2,3,4)</value> <value>Fenntartva (2,3,4)</value>
</data> </data>
<data name="TbLocalAddress" xml:space="preserve"> <data name="TbLocalAddress" xml:space="preserve">
<value>Cím (Ip,Ipv6)</value> <value>Cím (Ipv4,Ipv6)</value>
</data> </data>
<data name="TbPath7" xml:space="preserve"> <data name="TbPath7" xml:space="preserve">
<value>obfs jelszó</value> <value>obfs jelszó</value>

View file

@ -1100,7 +1100,7 @@
<value>Reserved(2,3,4)</value> <value>Reserved(2,3,4)</value>
</data> </data>
<data name="TbLocalAddress" xml:space="preserve"> <data name="TbLocalAddress" xml:space="preserve">
<value>Address(Ip,Ipv6)</value> <value>Address(Ipv4,Ipv6)</value>
</data> </data>
<data name="TbPath7" xml:space="preserve"> <data name="TbPath7" xml:space="preserve">
<value>obfs password</value> <value>obfs password</value>
@ -1402,4 +1402,4 @@
<data name="TbPorts7Tips" xml:space="preserve"> <data name="TbPorts7Tips" xml:space="preserve">
<value>Will cover the port, separate with commas (,)</value> <value>Will cover the port, separate with commas (,)</value>
</data> </data>
</root> </root>

View file

@ -1052,7 +1052,7 @@
<value>obfs password</value> <value>obfs password</value>
</data> </data>
<data name="TbLocalAddress" xml:space="preserve"> <data name="TbLocalAddress" xml:space="preserve">
<value>Address(Ip,Ipv6)</value> <value>Address(Ipv4,Ipv6)</value>
</data> </data>
<data name="TbSettingsDomainStrategy4Out" xml:space="preserve"> <data name="TbSettingsDomainStrategy4Out" xml:space="preserve">
<value>Default domain strategy for outbound</value> <value>Default domain strategy for outbound</value>

View file

@ -1097,7 +1097,7 @@
<value>Reserved(2,3,4)</value> <value>Reserved(2,3,4)</value>
</data> </data>
<data name="TbLocalAddress" xml:space="preserve"> <data name="TbLocalAddress" xml:space="preserve">
<value>Address(Ip,Ipv6)</value> <value>Address(Ipv4,Ipv6)</value>
</data> </data>
<data name="TbPath7" xml:space="preserve"> <data name="TbPath7" xml:space="preserve">
<value>混淆密码(obfs password)</value> <value>混淆密码(obfs password)</value>

View file

@ -1326,7 +1326,7 @@
<value>Reserved(2,3,4)</value> <value>Reserved(2,3,4)</value>
</data> </data>
<data name="TbLocalAddress" xml:space="preserve"> <data name="TbLocalAddress" xml:space="preserve">
<value>Address(Ip,Ipv6)</value> <value>Address(Ipv4,Ipv6)</value>
</data> </data>
<data name="TbSettingsUseSystemHosts" xml:space="preserve"> <data name="TbSettingsUseSystemHosts" xml:space="preserve">
<value>使用系統hosts</value> <value>使用系統hosts</value>

View file

@ -733,15 +733,10 @@ namespace ServiceLib.Services.CoreConfig
if (node.Ports.IsNotEmpty()) if (node.Ports.IsNotEmpty())
{ {
outbound.server_port = null; outbound.server_port = null;
outbound.server_ports = new List<string>(); outbound.server_ports = node.Ports.Split(',')
var ports = node.Ports.Split(',') .Where(p => p.Trim().IsNotEmpty())
.Select(p => p.Trim()) .Select(p => p.Replace('-', ':'))
.Where(p => !string.IsNullOrEmpty(p))
.ToList(); .ToList();
foreach (var it in ports)
{
outbound.server_ports.Add(it.Contains('-') ? it.Replace('-', ':') : it);
}
outbound.hop_interval = _config.HysteriaItem.HopInterval > 0 ? $"{_config.HysteriaItem.HopInterval}s" : null; outbound.hop_interval = _config.HysteriaItem.HopInterval > 0 ? $"{_config.HysteriaItem.HopInterval}s" : null;
} }

View file

@ -53,26 +53,31 @@ namespace ServiceLib.ViewModels
private async Task Init() private async Task Init()
{ {
var lastTime = DateTime.Now; Task.Run(async () =>
{
var numOfExecuted = 1;
while (true)
{
await Task.Delay(1000 * 5);
numOfExecuted++;
if (!(AutoRefresh && _config.UiItem.ShowInTaskbar && _config.IsRunningCore(ECoreType.sing_box)))
{
continue;
}
if (_config.ClashUIItem.ConnectionsRefreshInterval <= 0)
{
continue;
}
if (numOfExecuted % _config.ClashUIItem.ConnectionsRefreshInterval != 0)
{
continue;
}
await GetClashConnections();
}
});
Observable.Interval(TimeSpan.FromSeconds(5))
.Subscribe(async x =>
{
if (!(AutoRefresh && _config.UiItem.ShowInTaskbar && _config.IsRunningCore(ECoreType.sing_box)))
{
return;
}
var dtNow = DateTime.Now;
if (_config.ClashUIItem.ConnectionsRefreshInterval > 0)
{
if ((dtNow - lastTime).Minutes % _config.ClashUIItem.ConnectionsRefreshInterval == 0)
{
await GetClashConnections();
lastTime = dtNow;
}
Task.Delay(1000).Wait();
}
});
await Task.CompletedTask; await Task.CompletedTask;
} }

View file

@ -95,8 +95,8 @@ namespace ServiceLib.ViewModels
private async Task Init() private async Task Init()
{ {
await ProxiesReload();
_ = DelayTestTask(); _ = DelayTestTask();
await ProxiesReload();
} }
private async Task DoRulemodeSelected(bool c) private async Task DoRulemodeSelected(bool c)
@ -383,8 +383,6 @@ namespace ServiceLib.ViewModels
private async Task ProxiesDelayTest(bool blAll) private async Task ProxiesDelayTest(bool blAll)
{ {
//UpdateHandler(false, "Clash Proxies Latency Test");
ClashApiHandler.Instance.ClashProxiesDelayTest(blAll, _proxyDetails.ToList(), async (item, result) => ClashApiHandler.Instance.ClashProxiesDelayTest(blAll, _proxyDetails.ToList(), async (item, result) =>
{ {
if (item == null) if (item == null)
@ -434,13 +432,13 @@ namespace ServiceLib.ViewModels
public async Task DelayTestTask() public async Task DelayTestTask()
{ {
var lastTime = DateTime.Now; Task.Run(async () =>
_ = Task.Run(async () =>
{ {
var numOfExecuted = 1;
while (true) while (true)
{ {
await Task.Delay(1000 * 60); await Task.Delay(1000 * 60);
numOfExecuted++;
if (!(AutoRefresh && _config.UiItem.ShowInTaskbar && _config.IsRunningCore(ECoreType.sing_box))) if (!(AutoRefresh && _config.UiItem.ShowInTaskbar && _config.IsRunningCore(ECoreType.sing_box)))
{ {
continue; continue;
@ -449,13 +447,11 @@ namespace ServiceLib.ViewModels
{ {
continue; continue;
} }
var dtNow = DateTime.Now; if (numOfExecuted % _config.ClashUIItem.ProxiesAutoDelayTestInterval != 0)
if ((dtNow - lastTime).Minutes % _config.ClashUIItem.ProxiesAutoDelayTestInterval != 0)
{ {
continue; continue;
} }
await ProxiesDelayTest(); await ProxiesDelayTest();
lastTime = dtNow;
} }
}); });
await Task.CompletedTask; await Task.CompletedTask;

View file

@ -349,7 +349,8 @@
Grid.Row="3" Grid.Row="3"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
Margin="{StaticResource Margin4}" /> Margin="{StaticResource Margin4}"
Watermark="1000:2000,3000:4000" />
<TextBlock <TextBlock
Grid.Row="3" Grid.Row="3"
Grid.Column="2" Grid.Column="2"
@ -448,7 +449,8 @@
Grid.Row="3" Grid.Row="3"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
Margin="{StaticResource Margin4}" /> Margin="{StaticResource Margin4}"
Watermark="2,3,4" />
<TextBlock <TextBlock
Grid.Row="4" Grid.Row="4"
@ -461,7 +463,8 @@
Grid.Row="4" Grid.Row="4"
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
Margin="{StaticResource Margin4}" /> Margin="{StaticResource Margin4}"
Watermark="Ipv4,Ipv6" />
<TextBlock <TextBlock
Grid.Row="5" Grid.Row="5"
@ -475,7 +478,8 @@
Grid.Column="1" Grid.Column="1"
Width="200" Width="200"
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}"
HorizontalAlignment="Left" /> HorizontalAlignment="Left"
Watermark="1500" />
</Grid> </Grid>
<Separator <Separator

View file

@ -479,6 +479,7 @@
Width="400" Width="400"
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}"
HorizontalAlignment="Left" HorizontalAlignment="Left"
materialDesign:HintAssist.Hint="1000:2000,3000:4000"
Style="{StaticResource DefTextBox}" /> Style="{StaticResource DefTextBox}" />
<TextBlock <TextBlock
Grid.Row="3" Grid.Row="3"
@ -609,6 +610,7 @@
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}"
materialDesign:HintAssist.Hint="2,3,4"
Style="{StaticResource DefTextBox}" /> Style="{StaticResource DefTextBox}" />
<TextBlock <TextBlock
@ -624,6 +626,7 @@
Grid.Column="1" Grid.Column="1"
Width="400" Width="400"
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}"
materialDesign:HintAssist.Hint="Ipv4,Ipv6"
Style="{StaticResource DefTextBox}" /> Style="{StaticResource DefTextBox}" />
<TextBlock <TextBlock
@ -640,6 +643,7 @@
Width="200" Width="200"
Margin="{StaticResource Margin4}" Margin="{StaticResource Margin4}"
HorizontalAlignment="Left" HorizontalAlignment="Left"
materialDesign:HintAssist.Hint="1500"
Style="{StaticResource DefTextBox}" /> Style="{StaticResource DefTextBox}" />
</Grid> </Grid>