1.1.1 -> 1.1.2 第11次更新

This commit is contained in:
Space Time 2024-10-01 23:57:28 +08:00
parent e4c772ba51
commit 4c966e4b09
3 changed files with 45 additions and 28 deletions

View File

@ -5,7 +5,7 @@ namespace Sheas_Cealer.Consts;
internal class AboutConst : AboutMultilangConst
{
public static string DeveloperButtonUrl => "https://www.spacetimee.xyz";
public static string VersionButtonVersionContent => Assembly.GetExecutingAssembly().GetName().Version!.ToString()[0..^2];
public static string VersionButtonVersionContent => Assembly.GetExecutingAssembly().GetName().Version!.ToString().TrimEnd(".0".ToCharArray());
public static string VersionButtonUrl => "https://spacetime.lanzouu.com/b017hp0lc";
public static string EmailButtonUrl => "Zeus6_6@163.com";

View File

@ -99,10 +99,12 @@
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Margin="5" Content="{Binding Source={x:Static consts:MainConst.EditLocalHostButtonContent}}" ToolTip="{Binding Source={x:Static consts:MainConst.EditLocalHostButtonToolTip}}"
Click="EditLocalHostButton_Click" />
<Button Grid.Column="1" Margin="5" Content="{Binding Source={x:Static consts:MainConst.EditUpstreamHostButtonContent}}" ToolTip="{Binding Source={x:Static consts:MainConst.EditUpstreamHostButtonToolTip}}"
Click="EditUpstreamHostButton_Click" />
<Button x:Name="EditLocalHostButton"
Grid.Column="0" Margin="5" Content="{Binding Source={x:Static consts:MainConst.EditLocalHostButtonContent}}" ToolTip="{Binding Source={x:Static consts:MainConst.EditLocalHostButtonToolTip}}"
Click="EditHostButton_Click" />
<Button x:Name="EditUpstreamHostButton"
Grid.Column="1" Margin="5" Content="{Binding Source={x:Static consts:MainConst.EditUpstreamHostButtonContent}}" ToolTip="{Binding Source={x:Static consts:MainConst.EditUpstreamHostButtonToolTip}}"
Click="EditHostButton_Click" />
<Button Grid.Column="2" Margin="5" Content="{Binding Source={x:Static consts:MainConst.UpdateUpstreamHostButtonContent}}" ToolTip="{Binding Source={x:Static consts:MainConst.UpdateUpstreamHostButtonToolTip}}"
Click="UpdateUpstreamHostButton_Click">
<Button.IsEnabled>

View File

@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
@ -23,7 +24,8 @@ public partial class MainWin : Window
private static MainPres? MainPres;
private static readonly HttpClient MainClient = new();
private static DispatcherTimer? HoldButtonTimer;
private static readonly FileSystemWatcher CealingHostWatcher = new(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, "Cealing-Host.json") { EnableRaisingEvents = true, NotifyFilter = NotifyFilters.LastWrite };
private static readonly FileSystemWatcher HostWatcher = new(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, "Cealing-Host-*.json") { EnableRaisingEvents = true, NotifyFilter = NotifyFilters.LastWrite };
private static readonly Dictionary<string, (string hostRulesFragments, string hostResolverRulesFragments)> CealArgsFragments = [];
private static string CealArgs = string.Empty;
internal MainWin(string[] args)
@ -32,9 +34,12 @@ public partial class MainWin : Window
DataContext = MainPres = new(args);
CealingHostWatcher.Changed += CealingHostWatcher_Changed;
CealingHostWatcher_Changed(null!, null!);
HostWatcher.Changed += HostWatcher_Changed;
foreach (string hostPath in Directory.GetFiles(HostWatcher.Path, HostWatcher.Filter))
HostWatcher_Changed(null!, new(new(), Path.GetDirectoryName(hostPath)!, Path.GetFileName(hostPath)));
}
protected override void OnSourceInitialized(EventArgs e) => IconRemover.RemoveIcon(this);
private void MainWin_Loaded(object sender, RoutedEventArgs e) => SettingsBox.Focus();
private void MainWin_Closing(object sender, CancelEventArgs e) => Application.Current.Shutdown();
@ -128,25 +133,23 @@ public partial class MainWin : Window
new CommandProc(sender == null).ShellRun(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, ($"{CealArgs} {MainPres!.ExtraArgs}").Trim());
}
private void EditLocalHostButton_Click(object sender, RoutedEventArgs e)
private void EditHostButton_Click(object sender, RoutedEventArgs e)
{
string cealingHostPath = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, "Cealing-Host.json");
Button? senderButton = sender as Button;
if (!File.Exists(cealingHostPath))
File.Create(cealingHostPath).Dispose();
string hostPath = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, senderButton == EditLocalHostButton ? "Cealing-Host-Local.json" : "Cealing-Host-Upstream.json");
ProcessStartInfo processStartInfo = new(cealingHostPath) { UseShellExecute = true };
if (!File.Exists(hostPath))
File.Create(hostPath).Dispose();
ProcessStartInfo processStartInfo = new(hostPath) { UseShellExecute = true };
Process.Start(processStartInfo);
}
private void EditUpstreamHostButton_Click(object sender, RoutedEventArgs e)
{
}
private async void UpdateUpstreamHostButton_Click(object sender, RoutedEventArgs e)
{
string upstreamHostUrl = (MainPres!.UpstreamUrl.StartsWith("http://") || MainPres!.UpstreamUrl.StartsWith("https://") ? string.Empty : "https://") + MainPres!.UpstreamUrl;
string upstreamHostString = await Http.GetAsync<string>(upstreamHostUrl, MainClient);
string localHostPath = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, "Cealing-Host.json");
string localHostPath = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, "Cealing-Host-Upstream.json");
string localHostString;
if (!File.Exists(localHostPath))
@ -162,7 +165,7 @@ public partial class MainWin : Window
MessageBoxResult overrideOptionResult = MessageBox.Show(MainConst._OverrideUpstreamHostPrompt, string.Empty, MessageBoxButton.YesNoCancel);
if (overrideOptionResult == MessageBoxResult.Yes)
{
File.WriteAllText(Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, "Cealing-Host.json"), upstreamHostString);
File.WriteAllText(Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, "Cealing-Host-Upstream.json"), upstreamHostString);
MessageBox.Show(MainConst._UpdateUpstreamHostSuccessHint);
}
else if (overrideOptionResult == MessageBoxResult.No)
@ -172,32 +175,44 @@ public partial class MainWin : Window
private void ThemesButton_Click(object sender, RoutedEventArgs e) => MainPres!.IsLightTheme = MainPres.IsLightTheme.HasValue ? MainPres.IsLightTheme.Value ? null : true : false;
private void AboutButton_Click(object sender, RoutedEventArgs e) => new AboutWin().ShowDialog();
private void CealingHostWatcher_Changed(object sender, FileSystemEventArgs e)
private void HostWatcher_Changed(object sender, FileSystemEventArgs e)
{
try
{
string hostRules = string.Empty;
string hostResolverRules = string.Empty;
string hostRulesFragments = string.Empty;
string hostResolverRulesFragments = string.Empty;
string hostName = e.Name!.TrimStart("Cealing-Host-".ToCharArray()).TrimEnd(".json".ToCharArray());
int ruleIndex = 0;
using FileStream hostStream = new(Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, "Cealing-Host.json"), FileMode.OpenOrCreate, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete);
using FileStream hostStream = new(e.FullPath, FileMode.OpenOrCreate, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete);
JsonDocumentOptions hostOptions = new() { AllowTrailingCommas = true, CommentHandling = JsonCommentHandling.Skip };
JsonElement hostArray = JsonDocument.Parse(hostStream, hostOptions).RootElement;
foreach (JsonElement hostItem in hostArray.EnumerateArray())
{
string hostSni = string.IsNullOrWhiteSpace(hostItem[1].ToString()) ? $"c{ruleIndex}" : hostItem[1].ToString();
string hostSni = string.IsNullOrWhiteSpace(hostItem[1].ToString()) ? $"{hostName}{ruleIndex}" : hostItem[1].ToString();
string hostIp = string.IsNullOrWhiteSpace(hostItem[2].ToString()) ? "127.0.0.1" : hostItem[2].ToString();
foreach (JsonElement hostName in hostItem[0].EnumerateArray())
hostRules += $"MAP {hostName} {hostSni},";
foreach (JsonElement hostDomain in hostItem[0].EnumerateArray())
hostRulesFragments += $"MAP {hostDomain} {hostSni},";
hostResolverRules += $"MAP {hostSni} {hostIp},";
hostResolverRulesFragments += $"MAP {hostSni} {hostIp},";
++ruleIndex;
}
CealArgs = @$"/c @start .\""Uncealed-Browser.lnk"" --host-rules=""{hostRules[0..^1]}"" --host-resolver-rules=""{hostResolverRules[0..^1]}"" --test-type --ignore-certificate-errors";
CealArgsFragments[hostName] = (hostRulesFragments, hostResolverRulesFragments);
string hostRules = string.Empty;
string hostResolverRules = string.Empty;
foreach ((string hostRulesFragments, string hostResolverRulesFragments) CealArgsFragment in CealArgsFragments.Values)
{
hostRules += CealArgsFragment.hostRulesFragments;
hostResolverRules += CealArgsFragment.hostResolverRulesFragments;
}
CealArgs = @$"--host-rules=""{hostRules.TrimEnd(',')}"" --host-resolver-rules=""{hostResolverRules.TrimEnd(',')}"" --test-type --ignore-certificate-errors";
}
catch { CealArgs = string.Empty; }
}