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 internal class AboutConst : AboutMultilangConst
{ {
public static string DeveloperButtonUrl => "https://www.spacetimee.xyz"; 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 VersionButtonUrl => "https://spacetime.lanzouu.com/b017hp0lc";
public static string EmailButtonUrl => "Zeus6_6@163.com"; public static string EmailButtonUrl => "Zeus6_6@163.com";

View File

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

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
@ -23,7 +24,8 @@ public partial class MainWin : Window
private static MainPres? MainPres; private static MainPres? MainPres;
private static readonly HttpClient MainClient = new(); private static readonly HttpClient MainClient = new();
private static DispatcherTimer? HoldButtonTimer; 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; private static string CealArgs = string.Empty;
internal MainWin(string[] args) internal MainWin(string[] args)
@ -32,9 +34,12 @@ public partial class MainWin : Window
DataContext = MainPres = new(args); DataContext = MainPres = new(args);
CealingHostWatcher.Changed += CealingHostWatcher_Changed; HostWatcher.Changed += HostWatcher_Changed;
CealingHostWatcher_Changed(null!, null!);
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); protected override void OnSourceInitialized(EventArgs e) => IconRemover.RemoveIcon(this);
private void MainWin_Loaded(object sender, RoutedEventArgs e) => SettingsBox.Focus(); private void MainWin_Loaded(object sender, RoutedEventArgs e) => SettingsBox.Focus();
private void MainWin_Closing(object sender, CancelEventArgs e) => Application.Current.Shutdown(); 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()); 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)) string hostPath = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase!, senderButton == EditLocalHostButton ? "Cealing-Host-Local.json" : "Cealing-Host-Upstream.json");
File.Create(cealingHostPath).Dispose();
ProcessStartInfo processStartInfo = new(cealingHostPath) { UseShellExecute = true }; if (!File.Exists(hostPath))
File.Create(hostPath).Dispose();
ProcessStartInfo processStartInfo = new(hostPath) { UseShellExecute = true };
Process.Start(processStartInfo); Process.Start(processStartInfo);
}
private void EditUpstreamHostButton_Click(object sender, RoutedEventArgs e)
{
} }
private async void UpdateUpstreamHostButton_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 upstreamHostUrl = (MainPres!.UpstreamUrl.StartsWith("http://") || MainPres!.UpstreamUrl.StartsWith("https://") ? string.Empty : "https://") + MainPres!.UpstreamUrl;
string upstreamHostString = await Http.GetAsync<string>(upstreamHostUrl, MainClient); 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; string localHostString;
if (!File.Exists(localHostPath)) if (!File.Exists(localHostPath))
@ -162,7 +165,7 @@ public partial class MainWin : Window
MessageBoxResult overrideOptionResult = MessageBox.Show(MainConst._OverrideUpstreamHostPrompt, string.Empty, MessageBoxButton.YesNoCancel); MessageBoxResult overrideOptionResult = MessageBox.Show(MainConst._OverrideUpstreamHostPrompt, string.Empty, MessageBoxButton.YesNoCancel);
if (overrideOptionResult == MessageBoxResult.Yes) 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); MessageBox.Show(MainConst._UpdateUpstreamHostSuccessHint);
} }
else if (overrideOptionResult == MessageBoxResult.No) 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 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 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 try
{ {
string hostRules = string.Empty; string hostRulesFragments = string.Empty;
string hostResolverRules = string.Empty; string hostResolverRulesFragments = string.Empty;
string hostName = e.Name!.TrimStart("Cealing-Host-".ToCharArray()).TrimEnd(".json".ToCharArray());
int ruleIndex = 0; 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 }; JsonDocumentOptions hostOptions = new() { AllowTrailingCommas = true, CommentHandling = JsonCommentHandling.Skip };
JsonElement hostArray = JsonDocument.Parse(hostStream, hostOptions).RootElement; JsonElement hostArray = JsonDocument.Parse(hostStream, hostOptions).RootElement;
foreach (JsonElement hostItem in hostArray.EnumerateArray()) 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(); string hostIp = string.IsNullOrWhiteSpace(hostItem[2].ToString()) ? "127.0.0.1" : hostItem[2].ToString();
foreach (JsonElement hostName in hostItem[0].EnumerateArray()) foreach (JsonElement hostDomain in hostItem[0].EnumerateArray())
hostRules += $"MAP {hostName} {hostSni},"; hostRulesFragments += $"MAP {hostDomain} {hostSni},";
hostResolverRules += $"MAP {hostSni} {hostIp},"; hostResolverRulesFragments += $"MAP {hostSni} {hostIp},";
++ruleIndex; ++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; } catch { CealArgs = string.Empty; }
} }