Compare commits

..

1 Commits

Author SHA1 Message Date
Aigio Liu 99cfe5c8fb #1992 2022-09-09 00:17:04 +08:00
55 changed files with 578 additions and 2679 deletions
+1 -1
View File
@@ -29,7 +29,7 @@ jobs:
submodules: recursive
- name: Setup .NET 6
uses: actions/setup-dotnet@v3.0.2
uses: actions/setup-dotnet@v2
with:
dotnet-version: 6.0.x
+2 -2
View File
@@ -28,7 +28,7 @@ jobs:
submodules: recursive
- name: Setup .NET 6
uses: actions/setup-dotnet@v3.0.2
uses: actions/setup-dotnet@v2
with:
dotnet-version: 6.0.x
@@ -321,7 +321,7 @@ jobs:
submodules: recursive
- name: Setup .NET 6
uses: actions/setup-dotnet@v3.0.2
uses: actions/setup-dotnet@v2
with:
dotnet-version: 6.0.x
+2 -2
View File
@@ -24,7 +24,7 @@ jobs:
submodules: recursive
- name: Setup .NET 6
uses: actions/setup-dotnet@v3.0.2
uses: actions/setup-dotnet@v2
with:
dotnet-version: 6.0.x
@@ -63,7 +63,7 @@ jobs:
# xcode-version: '12.x' # set the latest available Xcode 12
- name: Setup Android NDK
uses: nttld/setup-ndk@v1.2.0
uses: nttld/setup-ndk@v1.0.6
id: setup-ndk
with:
ndk-version: r21e
+61 -63
View File
@@ -5,18 +5,18 @@
<PackageVersion Include="Microsoft.Extensions.Http" Version="6.0.0" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="6.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0" />
<PackageVersion Include="Microsoft.Extensions.Logging.AzureAppServices" Version="6.0.10" />
<PackageVersion Include="Microsoft.Extensions.Logging.AzureAppServices" Version="6.0.8" />
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="6.0.1" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.10" />
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="6.0.10" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.10" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.10" />
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="6.0.10" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.10" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.10" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="6.0.10" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="6.0.10" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="6.0.10" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.8" />
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="6.0.8" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.8" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.8" />
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="6.0.8" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.8" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.8" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="6.0.8" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="6.0.8" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="6.0.8" />
</ItemGroup>
<ItemGroup Condition=" $(TargetFramework.StartsWith('netstandard')) Or $(TargetFramework.StartsWith('netcoreapp3.1'))">
<!-- Microsoft.Extensions.* & AspNetCore & EntityFrameworkCore(NETCOREAPP31) -->
@@ -24,7 +24,7 @@
<PackageVersion Include="Microsoft.Extensions.Http" Version="3.1.27" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="3.1.27" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="3.1.27" />
<PackageVersion Include="Microsoft.Extensions.Logging.AzureAppServices" Version="6.0.10" />
<PackageVersion Include="Microsoft.Extensions.Logging.AzureAppServices" Version="6.0.8" />
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="3.1.27" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.27" />
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="3.1.27" />
@@ -40,12 +40,12 @@
<ItemGroup Condition=" $(TargetFramework.StartsWith('net6.0')) ">
<!-- Entity Framework Plus -->
<!-- A FREE & Open Source library to enhance EF6 and EF Core -->
<PackageVersion Include="Z.EntityFramework.Plus.EFCore" Version="6.15.2" />
<PackageVersion Include="Z.EntityFramework.Plus.EFCore" Version="6.14.4" />
<!-- AspNetCore 6 OpenId/OAuth -->
<PackageVersion Include="AspNet.Security.OpenId.Steam" Version="6.0.0" />
<PackageVersion Include="AspNet.Security.OAuth.QQ" Version="6.0.12" />
<PackageVersion Include="AspNet.Security.OAuth.Apple" Version="6.0.12" />
<PackageVersion Include="AspNet.Security.OAuth.QQ" Version="6.0.11" />
<PackageVersion Include="AspNet.Security.OAuth.Apple" Version="6.0.11" />
</ItemGroup>
<ItemGroup>
</ItemGroup>
@@ -74,11 +74,11 @@
</ItemGroup>
<ItemGroup>
<!-- Microsoft.* -->
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.4.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.3.1" />
<!--<PackageVersion Include="Microsoft.Windows.CsWinRT" Version="1.4.1" />-->
<!--<PackageVersion Include="Microsoft.Windows.SDK.NET.Ref" Version="10.0.19041.22" />-->
<!--<PackageVersion Include="Microsoft.Windows.SDK.Contracts" Version="10.0.19041.1" />-->
<PackageVersion Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22621.755" />
<PackageVersion Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22621.1" />
<PackageVersion Include="Microsoft.Extensions.Primitives" Version="6.0.0" />
<PackageVersion Include="Microsoft.Net.Http.Headers" Version="2.2.255.255" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
@@ -86,11 +86,11 @@
<PackageVersion Include="System.Text.Encoding.CodePages" Version="6.0.0" />
<PackageVersion Include="System.Diagnostics.PerformanceCounter" Version="6.0.1" />
<PackageVersion Include="System.Net.Http.WinHttpHandler" Version="6.0.1" />
<!-- AppCenter.* -->
<PackageVersion Include="Microsoft.AppCenter" Version="5.0.1" />
<PackageVersion Include="Microsoft.AppCenter.Analytics" Version="5.0.1" />
<PackageVersion Include="Microsoft.AppCenter.Crashes" Version="5.0.1" />
<PackageVersion Include="Microsoft.AppCenter" Version="4.5.3" />
<PackageVersion Include="Microsoft.AppCenter.Analytics" Version="4.5.3" />
<PackageVersion Include="Microsoft.AppCenter.Crashes" Version="4.5.3" />
<PackageVersion Include="Aigio.Avalonia.AppCenter" Version="4.5.3" />
<PackageVersion Include="Aigio.Avalonia.AppCenter.Analytics" Version="4.5.3" />
<PackageVersion Include="Aigio.Avalonia.AppCenter.Crashes" Version="4.5.3" />
@@ -108,43 +108,43 @@
<PackageVersion Include="Xamarin.Forms" Version="5.0.0.2478" />
<PackageVersion Include="Xamarin.Forms.Visual.Material" Version="5.0.0.2478" />
<PackageVersion Include="Xam.Plugins.Forms.ImageCircle" Version="3.1.1.1-beta" />
<!-- NUnit & NUnit.Xamarin & Moq -->
<PackageVersion Include="NUnit" Version="3.13.3" />
<PackageVersion Include="NUnit3TestAdapter" Version="4.3.1" />
<PackageVersion Include="NUnit3TestAdapter" Version="4.2.1" />
<PackageVersion Include="nunit.xamarin" Version="3.6.1" />
<PackageVersion Include="PCLStorage" Version="1.0.2" />
<PackageVersion Include="Moq" Version="4.18.3" />
<PackageVersion Include="Moq" Version="4.18.2" />
<!-- NLog -->
<PackageVersion Include="NLog" Version="5.1.0" />
<PackageVersion Include="NLog.Extensions.Logging" Version="5.2.0" />
<PackageVersion Include="NLog.Web.AspNetCore" Version="5.2.0" />
<PackageVersion Include="NLog" Version="5.0.4" />
<PackageVersion Include="NLog.Extensions.Logging" Version="5.0.4" />
<PackageVersion Include="NLog.Web.AspNetCore" Version="5.1.4" />
<PackageVersion Include="AspNetCore2.NETStandard.NLog.Web.AspNetCore" Version="5.0.0" />
<!-- ReactiveUI -->
<PackageVersion Include="System.Reactive" Version="5.0.0" />
<PackageVersion Include="Splat" Version="14.6.1" />
<PackageVersion Include="DynamicData" Version="7.12.11" />
<PackageVersion Include="ReactiveUI" Version="18.4.1" />
<PackageVersion Include="ReactiveUI.Fody" Version="18.4.1" />
<PackageVersion Include="ReactiveUI.XamForms" Version="18.4.1" />
<PackageVersion Include="ReactiveUI.AndroidX" Version="18.4.1" />
<PackageVersion Include="ReactiveUI.Maui" Version="18.4.1" />
<PackageVersion Include="Splat" Version="14.4.1" />
<PackageVersion Include="DynamicData" Version="7.9.14" />
<PackageVersion Include="ReactiveUI" Version="18.3.1" />
<PackageVersion Include="ReactiveUI.Fody" Version="18.3.1" />
<PackageVersion Include="ReactiveUI.XamForms" Version="18.3.1" />
<PackageVersion Include="ReactiveUI.AndroidX" Version="18.3.1" />
<PackageVersion Include="ReactiveUI.Maui" Version="18.3.1" />
<!-- SkiaSharp & HarfBuzzSharp -->
<!-- https://github.com/AvaloniaUI/Avalonia/blob/master/build/HarfBuzzSharp.props -->
<PackageVersion Include="HarfBuzzSharp" Version="2.8.2.3" />
<PackageVersion Include="HarfBuzzSharp.NativeAssets.Linux" Version="2.8.2.3" />
<PackageVersion Include="HarfBuzzSharp" Version="2.8.2.1-preview.104" />
<PackageVersion Include="HarfBuzzSharp.NativeAssets.Linux" Version="2.8.2.1-preview.104" />
<!-- https://github.com/AvaloniaUI/Avalonia/blob/master/build/SkiaSharp.props -->
<PackageVersion Include="SkiaSharp" Version="2.88.3" />
<PackageVersion Include="SkiaSharp.NativeAssets.Linux" Version="2.88.3" />
<PackageVersion Include="SkiaSharp" Version="2.88.1-preview.104" />
<PackageVersion Include="SkiaSharp.NativeAssets.Linux" Version="2.88.1-preview.104" />
<!-- AutoMapper -->
<PackageVersion Include="AutoMapper" Version="12.0.0" />
<PackageVersion Include="AutoMapper.Collection" Version="9.0.0" />
<PackageVersion Include="AutoMapper" Version="11.0.1" />
<PackageVersion Include="AutoMapper.Collection" Version="8.0.0" />
<PackageVersion Include="AutoMapper.Collection.EntityFrameworkCore" Version="8.0.0" />
<PackageVersion Include="AutoMapper.Extensions.ExpressionMapping" Version="6.0.2" />
<PackageVersion Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.0" />
<PackageVersion Include="AutoMapper.Extensions.ExpressionMapping" Version="5.1.0" />
<PackageVersion Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="11.0.0" />
<!-- QRCode -->
<!--<PackageVersion Include="QRCoder" Version="1.4.2" />-->
@@ -158,14 +158,14 @@
<!--<PackageVersion Include="GtkSharp" Version="3.24.24.38" />-->
<!-- Compression -->
<PackageVersion Include="SharpZipLib" Version="1.4.1" />
<PackageVersion Include="SharpZipLib" Version="1.3.3" />
<PackageVersion Include="Squid-Box.SevenZipSharp.Lite" Version="1.5.0.366" />
<PackageVersion Include="7-Zip.NativeAssets.Win32" Version="21.7.0-preview.1" />
<PackageVersion Include="ZstdNet" Version="1.4.5" />
<!-- Algorithm -->
<PackageVersion Include="Crc32.NET" Version="1.2.0" />
<PackageVersion Include="gfoidl.Base64" Version="1.1.2" />
<PackageVersion Include="gfoidl.Base64" Version="1.1.1" />
<!--Command Line Tools-->
<PackageVersion Include="System.CommandLine" Version="2.0.0-beta4.22272.1" />
@@ -190,31 +190,31 @@
<!--<PackageVersion Include="AlipaySDKNet.Standard" Version="4.6.109" />-->
<!-- Excel -->
<PackageVersion Include="NPOI" Version="2.6.0" />
<PackageVersion Include="NPOI" Version="2.5.6" />
<!-- Github API -->
<PackageVersion Include="Octokit" Version="4.0.3" />
<PackageVersion Include="Octokit" Version="2.0.1" />
<!-- ORM -->
<PackageVersion Include="sqlite-net-pcl" Version="1.8.116" />
<PackageVersion Include="SQLitePCLRaw.bundle_green" Version="2.1.3" />
<PackageVersion Include="SQLitePCLRaw.bundle_green" Version="2.1.0" />
<!-- MonoMac(NETSTANDARD) -->
<PackageVersion Include="MonoMac.NetStandard" Version="0.0.4" />
<!-- .NET Compat -->
<PackageVersion Include="OperatingSystem2" Version="2.0.0" />
<PackageVersion Include="JustArchiNET.Madness" Version="3.8.0" />
<PackageVersion Include="JustArchiNET.Madness" Version="3.7.0" />
<!-- Serialize -->
<PackageVersion Include="MessagePack" Version="2.4.59" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.2" />
<PackageVersion Include="MessagePack" Version="2.4.35" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.1" />
<!-- Html Parser -->
<PackageVersion Include="HtmlAgilityPack" Version="1.11.46" />
<PackageVersion Include="HtmlAgilityPack" Version="1.11.45" />
<!-- Clipboard -->
<PackageVersion Include="TextCopy" Version="6.2.0" />
<PackageVersion Include="TextCopy" Version="6.1.0" />
<!-- Nito.* -->
<PackageVersion Include="Nito.Comparers" Version="6.2.2" />
@@ -229,9 +229,7 @@
<PackageVersion Include="Fleck" Version="1.2.0" />
<!-- DNS -->
<PackageVersion Include="Ae.DNS.Client" Version="0.0.16" />
<!--<PackageVersion Include="Ae.Dns.Protocol" Version="0.0.16" />-->
<PackageVersion Include="DnsClient" Version="1.7.0" />
<PackageVersion Include="DnsClient" Version="1.6.1" />
<PackageVersion Include="DNS" Version="7.0.0" />
<!-- Cryptographic Algorithms & Protocols -->
@@ -248,12 +246,12 @@
<PackageVersion Include="Avalonia.ReactiveUI" Version="0.10.18" />
<!--<PackageVersion Include="Avalonia.Direct2D1" Version="0.10.16" />-->
<PackageVersion Include="Avalonia.Controls.DataGrid" Version="0.10.18" />
<PackageVersion Include="Avalonia.Xaml.Behaviors" Version="0.10.18" />
<PackageVersion Include="Avalonia.Xaml.Behaviors" Version="0.10.17" />
<!--<PackageVersion Include="Avalonia.AvaloniaEdit" Version="0.10.12.2" />-->
<!--<PackageVersion Include="CefNet.Avalonia" Version="93.1.21240.857" />-->
<!--<PackageVersion Include="LibVLCSharp.Avalonia" Version="3.5.1" />-->
<!--<PackageVersion Include="FluentAvaloniaUI" Version="1.4.4" />-->
<PackageVersion Include="LiveChartsCore.SkiaSharpView.Avalonia" Version="2.0.0-beta.603" />
<!--<PackageVersion Include="FluentAvaloniaUI" Version="1.4.1" />-->
<PackageVersion Include="LiveChartsCore.SkiaSharpView.Avalonia" Version="2.0.0-beta.350" />
<PackageVersion Include="JumpLists.Win32.Avalonia" Version="1.0.0" />
<PackageVersion Include="Avalonia.Native" Version="0.10.18" />
<PackageVersion Include="Avalonia.Win32" Version="0.10.18" />
@@ -263,12 +261,12 @@
<!--Avalonia End-->
<!-- Xamarin.Android -->
<PackageVersion Include="Xamarin.Build.Download" Version="0.11.4" />
<PackageVersion Include="Xamarin.Build.Download" Version="0.11.3" />
<PackageVersion Include="Xamarin.Google.Dagger" Version="2.40.5" />
<PackageVersion Include="Xamarin.Google.MLKit.BarcodeScanning" Version="116.1.2.5" />
<PackageVersion Include="Plugin.CurrentActivity" Version="2.1.0.4" />
<PackageVersion Include="de.hdodenhof.circleimageview" Version="3.1.0.4" />
<PackageVersion Include="Square.OkHttp3" Version="4.9.3.2" />
<PackageVersion Include="Square.OkHttp3" Version="4.9.3" />
<PackageVersion Include="Square.Picasso" Version="2.71828.0" />
<!--<PackageVersion Include="LeakCanaryBinding" Version="1.5.1.1" />-->
<!--<PackageVersion Include="TencentOpenApiSDK.Android" Version="3.5.4.11" />-->
@@ -308,14 +306,14 @@
<PackageVersion Include="Toast.iOS" Version="1.2.0" />
<!-- UWP -->
<PackageVersion Include="Microsoft.Toolkit.Uwp.Notifications" Version="7.1.3" />
<PackageVersion Include="Microsoft.WindowsAppSDK" Version="1.2.221116.1" />
<PackageVersion Include="Microsoft.Toolkit.Uwp.Notifications" Version="7.1.2" />
<PackageVersion Include="Microsoft.WindowsAppSDK" Version="1.1.4" />
<!-- Code Style -->
<PackageVersion Include="StyleCop.Analyzers" Version="1.2.0-beta.435" />
<!-- Quartz -->
<PackageVersion Include="Quartz.AspNetCore" Version="3.5.0" />
<PackageVersion Include="Quartz.AspNetCore" Version="3.4.0" />
<!-- Yet Another Reverse Proxy -->
<PackageVersion Include="Yarp.ReverseProxy" Version="1.1.1" />
+8
View File
@@ -24,9 +24,13 @@
"src\\Common.PinyinLib\\Common.PinyinLib.csproj",
"src\\Common.PinyinLib.CFStringTransform\\Common.PinyinLib.CFStringTransform.csproj",
"src\\Repositories.sqlite-net-pcl\\Repositories.sqlite-net-pcl.csproj",
"src\\ST.Client.Android\\ST.Client.Android.csproj",
"src\\ST.Client.Desktop.Mac\\ST.Client.Mac.csproj",
"src\\ST.Client.Mobile.Droid.App\\ST.Client.Android.App.csproj",
"src\\ST.Client.XamarinForms\\ST.Client.XamarinForms.csproj",
"src\\ST.Client.Desktop.Avalonia\\ST.Client.Avalonia.csproj",
"src\\ST.Client.Desktop.Avalonia.App\\ST.Client.Avalonia.App.csproj",
"src\\ST.Client.iOS\\ST.Client.iOS.csproj",
"src\\ST.Client\\ST.Client.csproj",
"src\\ST.Services.CloudService.Models\\ST.Services.CloudService.Models.csproj",
"src\\ST.Services.CloudService.ViewModels\\ST.Services.CloudService.ViewModels.csproj",
@@ -38,7 +42,11 @@
"src\\ST.Tools.Translate\\ST.Tools.Translate.csproj",
"src\\ST\\ST.csproj",
"src\\ST.Client.ResSecrets\\ST.Client.ResSecrets.csproj",
"src\\ST.Client.iOS.ResSecrets\\ST.Client.iOS.ResSecrets.csproj",
"src\\ST.Client.Android.ResSecrets\\ST.Client.Android.ResSecrets.csproj",
"src\\ST.Client.Mac.ResSecrets\\ST.Client.Mac.ResSecrets.csproj",
"tests\\Common.UnitTest.Droid.App\\ST.Client.UnitTest.Droid.App.csproj",
"tests\\Common.UnitTest.Droid\\ST.Client.UnitTest.Droid.csproj",
"tests\\Common.UnitTest\\Common.UnitTest.csproj",
"tests\\ST.Client.Desktop.UnitTest\\ST.Client.Desktop.UnitTest.csproj",
"tests\\ST.Client.UnitTest\\ST.Client.UnitTest.csproj"
+350 -1
View File
@@ -115,6 +115,14 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UI Framework", "UI Framewor
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Web API", "Web API", "{4E7DF449-F136-4B90-82CE-D1418CD5123C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Android", "src\ST.Client.Android\ST.Client.Android.csproj", "{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.iOS", "src\ST.Client.iOS\ST.Client.iOS.csproj", "{7EE23547-B2AC-409D-991C-1FDAE122657C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.XamarinForms", "src\ST.Client.XamarinForms\ST.Client.XamarinForms.csproj", "{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ST.Client.Android.App", "src\ST.Client.Mobile.Droid.App\ST.Client.Android.App.csproj", "{B355E372-27D2-4217-A129-D3355573681F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Avalonia.Ref", "Avalonia.Ref", "{910D6A0F-42AB-4B65-B532-852E864EC006}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Native", "src\Avalonia.Native\Avalonia.Native.csproj", "{17FBD44D-D9AA-48C2-9A06-214E8405CF88}"
@@ -146,6 +154,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Github", "_Github", "{B114
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Common.ClientLib.iOS", "src\Common.ClientLib.iOS\Common.ClientLib.iOS.csproj", "{4658B02A-CB1A-4561-AD9C-3B3FF969D7F0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.UnitTest.Droid", "tests\Common.UnitTest.Droid\ST.Client.UnitTest.Droid.csproj", "{80E6762E-AB43-41E2-BDB4-7A3E24713977}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ST.Client.UnitTest.Droid.App", "tests\Common.UnitTest.Droid.App\ST.Client.UnitTest.Droid.App.csproj", "{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Desktop.UnitTest", "tests\ST.Client.Desktop.UnitTest\ST.Client.Desktop.UnitTest.csproj", "{5D9E0EAA-2419-426B-BAB4-EA496C1FF7E9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.UnitTest.Resources", "tests\ST.Client.UnitTest.Resources\ST.Client.UnitTest.Resources.csproj", "{FB2CA9B4-71F1-48E8-B9AE-FF4375F4FE43}"
@@ -156,8 +168,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.Skia.Internals", "
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Bindings", "Bindings", "{80EBD601-28AC-4840-B9B8-E6064816A443}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Android.V2Ray", "src\ST.Client.Android.V2Ray\ST.Client.Android.V2Ray.csproj", "{4A79264D-5BF5-4F89-8066-44E154BF557F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Gameloop.Vdf", "references\Gameloop.Vdf\Gameloop.Vdf\Gameloop.Vdf.csproj", "{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Android.Shadowsocks", "src\ST.Client.Android.Shadowsocks\ST.Client.Android.Shadowsocks.csproj", "{920EF29F-406F-43A9-B002-29DD6B0B4FBF}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ResSecrets", "ResSecrets", "{17667B53-1A09-45A6-855A-0F07F9AE044F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Android.ResSecrets", "src\ST.Client.Android.ResSecrets\ST.Client.Android.ResSecrets.csproj", "{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}"
@@ -176,6 +192,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FDELauncher", "src\FDELaunc
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Net.Http.Headers", "src\Microsoft.Net.Http.Headers\Microsoft.Net.Http.Headers.csproj", "{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Maui.App", "src\ST.Client.Maui.App\ST.Client.Maui.App.csproj", "{73A9AB65-AF95-4F27-98E2-B3296F9BC198}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ST.Client.Maui", "src\ST.Client.Maui\ST.Client.Maui.csproj", "{48417EE3-BACB-4E04-B48D-B3781862AD81}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Common.Essentials", "src\Common.Essentials\Common.Essentials.csproj", "{41434AB5-48C3-47D4-8721-D118D87F472B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Common.Essentials.Xamarin", "src\Common.Essentials.Xamarin\Common.Essentials.Xamarin.csproj", "{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526}"
@@ -1298,6 +1318,132 @@ Global
{D30203AC-97AB-4A51-BFA5-826251C9A28E}.Release|x64.Build.0 = Release|Any CPU
{D30203AC-97AB-4A51-BFA5-826251C9A28E}.Release|x86.ActiveCfg = Release|Any CPU
{D30203AC-97AB-4A51-BFA5-826251C9A28E}.Release|x86.Build.0 = Release|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Debug|ARM.ActiveCfg = Debug|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Debug|ARM.Build.0 = Debug|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Debug|ARM64.Build.0 = Debug|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Debug|iPhone.Build.0 = Debug|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Debug|x64.ActiveCfg = Debug|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Debug|x64.Build.0 = Debug|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Debug|x86.ActiveCfg = Debug|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Debug|x86.Build.0 = Debug|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Release|Any CPU.Build.0 = Release|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Release|ARM.ActiveCfg = Release|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Release|ARM.Build.0 = Release|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Release|ARM64.ActiveCfg = Release|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Release|ARM64.Build.0 = Release|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Release|iPhone.ActiveCfg = Release|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Release|iPhone.Build.0 = Release|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Release|x64.ActiveCfg = Release|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Release|x64.Build.0 = Release|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Release|x86.ActiveCfg = Release|Any CPU
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B}.Release|x86.Build.0 = Release|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Debug|ARM.ActiveCfg = Debug|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Debug|ARM.Build.0 = Debug|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Debug|ARM64.Build.0 = Debug|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Debug|iPhone.Build.0 = Debug|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Debug|x64.ActiveCfg = Debug|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Debug|x64.Build.0 = Debug|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Debug|x86.ActiveCfg = Debug|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Debug|x86.Build.0 = Debug|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Release|Any CPU.Build.0 = Release|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Release|ARM.ActiveCfg = Release|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Release|ARM.Build.0 = Release|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Release|ARM64.ActiveCfg = Release|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Release|ARM64.Build.0 = Release|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Release|iPhone.ActiveCfg = Release|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Release|iPhone.Build.0 = Release|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Release|x64.ActiveCfg = Release|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Release|x64.Build.0 = Release|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Release|x86.ActiveCfg = Release|Any CPU
{7EE23547-B2AC-409D-991C-1FDAE122657C}.Release|x86.Build.0 = Release|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Debug|ARM.ActiveCfg = Debug|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Debug|ARM.Build.0 = Debug|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Debug|ARM64.Build.0 = Debug|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Debug|iPhone.Build.0 = Debug|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Debug|x64.ActiveCfg = Debug|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Debug|x64.Build.0 = Debug|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Debug|x86.ActiveCfg = Debug|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Debug|x86.Build.0 = Debug|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Release|Any CPU.Build.0 = Release|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Release|ARM.ActiveCfg = Release|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Release|ARM.Build.0 = Release|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Release|ARM64.ActiveCfg = Release|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Release|ARM64.Build.0 = Release|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Release|iPhone.ActiveCfg = Release|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Release|iPhone.Build.0 = Release|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Release|x64.ActiveCfg = Release|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Release|x64.Build.0 = Release|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Release|x86.ActiveCfg = Release|Any CPU
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6}.Release|x86.Build.0 = Release|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|ARM.ActiveCfg = Debug|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|ARM.Build.0 = Debug|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|ARM.Deploy.0 = Debug|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|ARM64.Build.0 = Debug|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|ARM64.Deploy.0 = Debug|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|iPhone.Build.0 = Debug|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|iPhone.Deploy.0 = Debug|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|x64.ActiveCfg = Debug|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|x64.Build.0 = Debug|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|x64.Deploy.0 = Debug|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|x86.ActiveCfg = Debug|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|x86.Build.0 = Debug|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Debug|x86.Deploy.0 = Debug|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Release|Any CPU.Build.0 = Release|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Release|Any CPU.Deploy.0 = Release|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Release|ARM.ActiveCfg = Release|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Release|ARM.Build.0 = Release|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Release|ARM.Deploy.0 = Release|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Release|ARM64.ActiveCfg = Release|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Release|ARM64.Build.0 = Release|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Release|ARM64.Deploy.0 = Release|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Release|iPhone.ActiveCfg = Release|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Release|iPhone.Build.0 = Release|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Release|iPhone.Deploy.0 = Release|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Release|x64.ActiveCfg = Release|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Release|x64.Build.0 = Release|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Release|x64.Deploy.0 = Release|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Release|x86.ActiveCfg = Release|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Release|x86.Build.0 = Release|Any CPU
{B355E372-27D2-4217-A129-D3355573681F}.Release|x86.Deploy.0 = Release|Any CPU
{17FBD44D-D9AA-48C2-9A06-214E8405CF88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{17FBD44D-D9AA-48C2-9A06-214E8405CF88}.Debug|Any CPU.Build.0 = Debug|Any CPU
{17FBD44D-D9AA-48C2-9A06-214E8405CF88}.Debug|ARM.ActiveCfg = Debug|Any CPU
@@ -1522,6 +1668,76 @@ Global
{4658B02A-CB1A-4561-AD9C-3B3FF969D7F0}.Release|x64.Build.0 = Release|Any CPU
{4658B02A-CB1A-4561-AD9C-3B3FF969D7F0}.Release|x86.ActiveCfg = Release|Any CPU
{4658B02A-CB1A-4561-AD9C-3B3FF969D7F0}.Release|x86.Build.0 = Release|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Debug|Any CPU.Build.0 = Debug|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Debug|ARM.ActiveCfg = Debug|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Debug|ARM.Build.0 = Debug|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Debug|ARM64.Build.0 = Debug|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Debug|iPhone.Build.0 = Debug|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Debug|x64.ActiveCfg = Debug|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Debug|x64.Build.0 = Debug|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Debug|x86.ActiveCfg = Debug|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Debug|x86.Build.0 = Debug|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Release|Any CPU.ActiveCfg = Release|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Release|Any CPU.Build.0 = Release|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Release|ARM.ActiveCfg = Release|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Release|ARM.Build.0 = Release|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Release|ARM64.ActiveCfg = Release|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Release|ARM64.Build.0 = Release|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Release|iPhone.ActiveCfg = Release|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Release|iPhone.Build.0 = Release|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Release|x64.ActiveCfg = Release|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Release|x64.Build.0 = Release|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Release|x86.ActiveCfg = Release|Any CPU
{80E6762E-AB43-41E2-BDB4-7A3E24713977}.Release|x86.Build.0 = Release|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|ARM.ActiveCfg = Debug|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|ARM.Build.0 = Debug|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|ARM.Deploy.0 = Debug|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|ARM64.Build.0 = Debug|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|ARM64.Deploy.0 = Debug|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|iPhone.Build.0 = Debug|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|iPhone.Deploy.0 = Debug|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|x64.ActiveCfg = Debug|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|x64.Build.0 = Debug|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|x64.Deploy.0 = Debug|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|x86.ActiveCfg = Debug|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|x86.Build.0 = Debug|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Debug|x86.Deploy.0 = Debug|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|Any CPU.Build.0 = Release|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|Any CPU.Deploy.0 = Release|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|ARM.ActiveCfg = Release|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|ARM.Build.0 = Release|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|ARM.Deploy.0 = Release|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|ARM64.ActiveCfg = Release|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|ARM64.Build.0 = Release|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|ARM64.Deploy.0 = Release|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|iPhone.ActiveCfg = Release|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|iPhone.Build.0 = Release|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|iPhone.Deploy.0 = Release|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|x64.ActiveCfg = Release|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|x64.Build.0 = Release|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|x64.Deploy.0 = Release|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|x86.ActiveCfg = Release|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|x86.Build.0 = Release|Any CPU
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA}.Release|x86.Deploy.0 = Release|Any CPU
{5D9E0EAA-2419-426B-BAB4-EA496C1FF7E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5D9E0EAA-2419-426B-BAB4-EA496C1FF7E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5D9E0EAA-2419-426B-BAB4-EA496C1FF7E9}.Debug|ARM.ActiveCfg = Debug|Any CPU
@@ -1634,6 +1850,34 @@ Global
{47C151DA-D2B1-43F4-A04E-B454E2134852}.Release|x64.Build.0 = Release|Any CPU
{47C151DA-D2B1-43F4-A04E-B454E2134852}.Release|x86.ActiveCfg = Release|Any CPU
{47C151DA-D2B1-43F4-A04E-B454E2134852}.Release|x86.Build.0 = Release|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|ARM.ActiveCfg = Debug|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|ARM.Build.0 = Debug|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|ARM64.Build.0 = Debug|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|iPhone.Build.0 = Debug|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|x64.ActiveCfg = Debug|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|x64.Build.0 = Debug|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|x86.ActiveCfg = Debug|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Debug|x86.Build.0 = Debug|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|Any CPU.Build.0 = Release|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|ARM.ActiveCfg = Release|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|ARM.Build.0 = Release|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|ARM64.ActiveCfg = Release|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|ARM64.Build.0 = Release|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|iPhone.ActiveCfg = Release|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|iPhone.Build.0 = Release|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|x64.ActiveCfg = Release|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|x64.Build.0 = Release|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|x86.ActiveCfg = Release|Any CPU
{4A79264D-5BF5-4F89-8066-44E154BF557F}.Release|x86.Build.0 = Release|Any CPU
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Debug|ARM.ActiveCfg = Debug|Any CPU
@@ -1662,6 +1906,34 @@ Global
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Release|x64.Build.0 = Release|Any CPU
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Release|x86.ActiveCfg = Release|Any CPU
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE}.Release|x86.Build.0 = Release|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|ARM.ActiveCfg = Debug|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|ARM.Build.0 = Debug|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|ARM64.Build.0 = Debug|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|iPhone.Build.0 = Debug|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|x64.ActiveCfg = Debug|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|x64.Build.0 = Debug|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|x86.ActiveCfg = Debug|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Debug|x86.Build.0 = Debug|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|Any CPU.Build.0 = Release|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|ARM.ActiveCfg = Release|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|ARM.Build.0 = Release|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|ARM64.ActiveCfg = Release|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|ARM64.Build.0 = Release|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|iPhone.ActiveCfg = Release|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|iPhone.Build.0 = Release|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|x64.ActiveCfg = Release|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|x64.Build.0 = Release|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|x86.ActiveCfg = Release|Any CPU
{920EF29F-406F-43A9-B002-29DD6B0B4FBF}.Release|x86.Build.0 = Release|Any CPU
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Debug|Any CPU.Build.0 = Debug|Any CPU
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277}.Debug|ARM.ActiveCfg = Debug|Any CPU
@@ -1886,6 +2158,76 @@ Global
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Release|x64.Build.0 = Release|Any CPU
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Release|x86.ActiveCfg = Release|Any CPU
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0}.Release|x86.Build.0 = Release|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|Any CPU.Build.0 = Debug|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|ARM.ActiveCfg = Debug|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|ARM.Build.0 = Debug|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|ARM.Deploy.0 = Debug|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|ARM64.Build.0 = Debug|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|ARM64.Deploy.0 = Debug|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|iPhone.Build.0 = Debug|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|iPhone.Deploy.0 = Debug|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|x64.ActiveCfg = Debug|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|x64.Build.0 = Debug|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|x64.Deploy.0 = Debug|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|x86.ActiveCfg = Debug|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|x86.Build.0 = Debug|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Debug|x86.Deploy.0 = Debug|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|Any CPU.ActiveCfg = Release|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|Any CPU.Build.0 = Release|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|Any CPU.Deploy.0 = Release|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|ARM.ActiveCfg = Release|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|ARM.Build.0 = Release|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|ARM.Deploy.0 = Release|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|ARM64.ActiveCfg = Release|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|ARM64.Build.0 = Release|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|ARM64.Deploy.0 = Release|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|iPhone.ActiveCfg = Release|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|iPhone.Build.0 = Release|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|iPhone.Deploy.0 = Release|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|x64.ActiveCfg = Release|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|x64.Build.0 = Release|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|x64.Deploy.0 = Release|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|x86.ActiveCfg = Release|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|x86.Build.0 = Release|Any CPU
{73A9AB65-AF95-4F27-98E2-B3296F9BC198}.Release|x86.Deploy.0 = Release|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|Any CPU.Build.0 = Debug|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|ARM.ActiveCfg = Debug|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|ARM.Build.0 = Debug|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|ARM64.Build.0 = Debug|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|iPhone.Build.0 = Debug|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|x64.ActiveCfg = Debug|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|x64.Build.0 = Debug|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|x86.ActiveCfg = Debug|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Debug|x86.Build.0 = Debug|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|Any CPU.ActiveCfg = Release|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|Any CPU.Build.0 = Release|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|ARM.ActiveCfg = Release|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|ARM.Build.0 = Release|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|ARM64.ActiveCfg = Release|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|ARM64.Build.0 = Release|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|iPhone.ActiveCfg = Release|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|iPhone.Build.0 = Release|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|x64.ActiveCfg = Release|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|x64.Build.0 = Release|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|x86.ActiveCfg = Release|Any CPU
{48417EE3-BACB-4E04-B48D-B3781862AD81}.Release|x86.Build.0 = Release|Any CPU
{41434AB5-48C3-47D4-8721-D118D87F472B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{41434AB5-48C3-47D4-8721-D118D87F472B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{41434AB5-48C3-47D4-8721-D118D87F472B}.Debug|ARM.ActiveCfg = Debug|Any CPU
@@ -2295,6 +2637,9 @@ Global
{E50441E8-75F3-406E-9921-30BFC211B5CE} = {327FDEE7-C4C8-4AA4-A7B0-8BCE3D75346F}
{8E38AAF2-8C7D-4B0D-AB25-AB37EECB4029} = {327FDEE7-C4C8-4AA4-A7B0-8BCE3D75346F}
{4E7DF449-F136-4B90-82CE-D1418CD5123C} = {327FDEE7-C4C8-4AA4-A7B0-8BCE3D75346F}
{DEF239E4-AC40-4BD8-8D36-5AA6B36AB86B} = {E50441E8-75F3-406E-9921-30BFC211B5CE}
{7EE23547-B2AC-409D-991C-1FDAE122657C} = {E50441E8-75F3-406E-9921-30BFC211B5CE}
{3763D6C4-82B7-4C13-9BB8-886FC1BD83B6} = {8E38AAF2-8C7D-4B0D-AB25-AB37EECB4029}
{910D6A0F-42AB-4B65-B532-852E864EC006} = {E50441E8-75F3-406E-9921-30BFC211B5CE}
{17FBD44D-D9AA-48C2-9A06-214E8405CF88} = {910D6A0F-42AB-4B65-B532-852E864EC006}
{650572DD-E958-4E42-9B46-1510BA15E571} = {910D6A0F-42AB-4B65-B532-852E864EC006}
@@ -2304,12 +2649,16 @@ Global
{21C392C5-AE41-421A-A127-1A03C4ACA2AD} = {673FF8CD-9E85-4FA1-ABFC-D1149675E138}
{29DE5086-0690-4AE7-9BA9-840F54B249DC} = {E448F863-4C9D-47A4-BC4A-4A1381B54DA4}
{4658B02A-CB1A-4561-AD9C-3B3FF969D7F0} = {83186945-EC14-4B3F-8C6F-B205AA184CA4}
{80E6762E-AB43-41E2-BDB4-7A3E24713977} = {CC46B486-00D7-49E6-ABA3-FDF8F4868D2B}
{AD7B78B0-AE51-4FB7-9B11-4E22A2B538CA} = {CC46B486-00D7-49E6-ABA3-FDF8F4868D2B}
{5D9E0EAA-2419-426B-BAB4-EA496C1FF7E9} = {CC46B486-00D7-49E6-ABA3-FDF8F4868D2B}
{FB2CA9B4-71F1-48E8-B9AE-FF4375F4FE43} = {CC46B486-00D7-49E6-ABA3-FDF8F4868D2B}
{E84FF7BC-FC2A-424E-8780-7DA9B487E23F} = {910D6A0F-42AB-4B65-B532-852E864EC006}
{47C151DA-D2B1-43F4-A04E-B454E2134852} = {910D6A0F-42AB-4B65-B532-852E864EC006}
{80EBD601-28AC-4840-B9B8-E6064816A443} = {327FDEE7-C4C8-4AA4-A7B0-8BCE3D75346F}
{4A79264D-5BF5-4F89-8066-44E154BF557F} = {80EBD601-28AC-4840-B9B8-E6064816A443}
{DFC341E8-5290-428C-8D2B-6DE2AA163FFE} = {673FF8CD-9E85-4FA1-ABFC-D1149675E138}
{920EF29F-406F-43A9-B002-29DD6B0B4FBF} = {80EBD601-28AC-4840-B9B8-E6064816A443}
{17667B53-1A09-45A6-855A-0F07F9AE044F} = {327FDEE7-C4C8-4AA4-A7B0-8BCE3D75346F}
{68DD3E9C-A96C-4128-8D95-DCD65D1FA277} = {17667B53-1A09-45A6-855A-0F07F9AE044F}
{089D4418-975B-455D-9AE1-B9DEC20FF4B1} = {17667B53-1A09-45A6-855A-0F07F9AE044F}
@@ -2318,9 +2667,9 @@ Global
{058F9955-8EFE-4BF3-A8F9-44C57B1F812E} = {17667B53-1A09-45A6-855A-0F07F9AE044F}
{FA9F0E89-E410-400A-86F3-C603E51E62A8} = {910D6A0F-42AB-4B65-B532-852E864EC006}
{C7F109B9-EA88-4B7E-ADB5-D6407686ADE0} = {673FF8CD-9E85-4FA1-ABFC-D1149675E138}
{48417EE3-BACB-4E04-B48D-B3781862AD81} = {8E38AAF2-8C7D-4B0D-AB25-AB37EECB4029}
{41434AB5-48C3-47D4-8721-D118D87F472B} = {83186945-EC14-4B3F-8C6F-B205AA184CA4}
{07C9AC06-5D84-41AB-A3C9-5C5B1A27F526} = {83186945-EC14-4B3F-8C6F-B205AA184CA4}
{5C440EC2-9251-4DB5-A14E-68FF37814F12} = {83186945-EC14-4B3F-8C6F-B205AA184CA4}
{1891DD14-628D-4921-8A1E-279320312E95} = {327FDEE7-C4C8-4AA4-A7B0-8BCE3D75346F}
{3381B512-7CCB-4211-87B0-273260531BFC} = {327FDEE7-C4C8-4AA4-A7B0-8BCE3D75346F}
{CCB0CAEB-FEFC-4424-B6F4-53D3BB70154D} = {327FDEE7-C4C8-4AA4-A7B0-8BCE3D75346F}
Binary file not shown.
+41 -40
View File
@@ -1,30 +1,31 @@
### 公告
这是一个修复目前累积问题的版本,也是最后一个.NET 6 的版本,
之后桌面端程序将使用.NET 7 + Avalonia 11.0 重构发布新版本。
届时也会放弃继续对 Win7/8.1 系统的支持,所以这也意味着这是最后一个支持 Win7/8.1 的版本。
也请各位敬请期待之后的 3.0 版本吧~
1. 非简中语言将默认隐藏加速和脚本功能,仅能通过切换语言并重启程序的方式还原被隐藏的功能
2. 因经济状况原因,现已停止短信服务节约开销,后续会推出邮箱注册登录,对于仅使用手机号登录的用户请绑定第三方快速登录,否则注销后将无法再次登录,需要等待至邮箱服务推出后支持会暂时在开放短信服务提供换绑邮箱。
3. 自动更新目前仅 Windows 端可用,且由于下载渠道限速可能导致无法更新成功,推荐在官网链接的网盘或群文件中下载压缩包解压覆盖更新(应用商店版由商店更新不受此影响)
4. 在 Android 上因系统限制,目前的加速功能无法正常使用,所以此功能已放弃继续开发,如仍想使用需要自行导入证书到系统目录,使用 adb 工具或 Magisk 之类的软件操作,未来会使用不需要证书的加速功能替换此功能
5. fde 版本需要安装 [ASP.NET Core 运行时 6.0.8 (x64) 与 .NET Core 运行时 6.0.8 (x64)](https://dotnet.microsoft.com/zh-cn/download/dotnet/6.0)
6. Windows x86 与 x64 版本令牌本机加密互不兼容,使用两者版本时注意令牌加密后的文件不能共用。
7. 由于新版本加速功能重构,调整了部分加速项目,这会影响旧版本程序使用加速功能
8. 为了能继续维持开发,从此版本开始将会添加程序内广告,赞助用户可以在设置中关闭所有广告
<!--
### 版本亮点
1. .NET 运行时升级至 6.0.12,使用 fde 版本需要升级运行时
2. ASF 升级至 V5.3.2.4
-->
1. .NET 运行时升级至 6.0.8,使用 fde 版本需要升级运行时
2. ASF 升级至 V5.2.8.4
### 修复问题
1. 改进 Mac 安装证书的提示,显示执行命令
2. 修复 Steam 启动参数在一些场景下无效
3. 修复 网络加速 关闭 http 重定向到 https 依然监听 80 端口错误
4. 修复 网络加速 仅启用脚本功能 导致代理网站无法访问的错误
5. 修复 网络加速 开启系统代理和 PAC 代理后,非代理网站无法正常访问的错误
6. 修改 证书安装路径 为本地计算机 而不在是 当前用户 以支持跨用户访问,这项改动可能导致大家需要重新安装一次证书
7. 修复 库存游戏 因 Steam 客户端更新导致的加载游戏数据失败问题
8. 修复 捐助列表金额显示错位问题
9. 修复 Twitch 聊天连接失败问题
10. 修复 discord.gg 无法访问导致无法加入频道分享链接问题
11. 修复 Steam 没有正确识别 Steam 国服提示问题
12. ASF 升级至 V5.3.2.4
12. .NET 运行时升级至 6.0.12,使用 fde 版本需要升级运行时
13. 新增 Steam 设置可设置 模拟蒸汽平台启动参数
1. 修复 2.8.0 ~ 2.8.2 中 AppData/Config.mpo 文件大小为 0 时导致的程序无法正常启动
2. 修复 Windows 上版本更新在 2.8.0 ~ 2.8.2 中非 FDE 版本识别为 FDE 版
3. 改进 调整代理模式顺序,Hosts 模式置顶
4. 修复 划词翻译等一些 JS 脚本
5. 改进 macOS 上的证书安装
6. 尝试修复 网络加速中能导致内存泄露的问题
7. 改进 非简中默认隐藏加速与脚本仅在 Windows 上生效
8. 改进 减少 Android 上的启动时间
9. 修复 退出程序时可能引发的闪退
10. 修复 macOS/Linux 上设置页面打不开的问题
11. 修复 网络加速中网页上出现 Because https://... actually points to WattToolkit itself...
12. 尝试修复 ASF 控制台中输入时卡死
<!--
### 已知问题
@@ -60,7 +61,7 @@
[![WebSite steampp.net](https://img.shields.io/badge/WebSite-steampp.net-brightgreen.svg?style=flat-square&color=61dafb)](https://steampp.net)
[![Steam++ v2.8.5](https://img.shields.io/badge/Steam++-v2.8.5-brightgreen.svg?style=flat-square&color=512bd4)]()
[![Steam++ v2.8.3](https://img.shields.io/badge/Steam++-v2.8.3-brightgreen.svg?style=flat-square&color=512bd4)]()
##### [不知道该下载哪个文件?](./download-guide.md)
@@ -69,28 +70,28 @@
### 文件校验
| File | Checksum (SHA256) |
| ---- | ---- |
| Steam++_win_x64_v2.8.5.7z | SHA256 |
| Steam++_win_x64_fde_v2.8.5.7z | SHA256 |
| Steam++_win_x64_v2.8.3.7z | SHA256 |
| Steam++_win_x64_fde_v2.8.3.7z | SHA256 |
| | |
| Steam++_win_x64_v2.8.5.exe | SHA256 |
| Steam++_win_x64_fde_v2.8.5.exe | SHA256 |
| Steam++_win_x64_v2.8.3.exe | SHA256 |
| Steam++_win_x64_fde_v2.8.3.exe | SHA256 |
| | |
| Steam++_win_x86_v2.8.5.7z | SHA256 |
| Steam++_win_x86_fde_v2.8.5.7z | SHA256 |
| Steam++_win_x86_v2.8.3.7z | SHA256 |
| Steam++_win_x86_fde_v2.8.3.7z | SHA256 |
| | |
| Steam++_win_x86_v2.8.5.exe | SHA256 |
| Steam++_win_x86_fde_v2.8.5.exe | SHA256 |
| Steam++_win_x86_v2.8.3.exe | SHA256 |
| Steam++_win_x86_fde_v2.8.3.exe | SHA256 |
| | |
| Steam++_linux_x64_v2.8.5.7z | SHA256 |
| Steam++_linux_arm64_v2.8.5.7z | SHA256 |
| Steam++_linux_x64_v2.8.3.7z | SHA256 |
| Steam++_linux_arm64_v2.8.3.7z | SHA256 |
| | |
| Steam++_linux_x64_v2.8.5.deb | SHA256 |
| Steam++_linux_arm64_v2.8.5.deb | SHA256 |
| Steam++_linux_x64_v2.8.3.deb | SHA256 |
| Steam++_linux_arm64_v2.8.3.deb | SHA256 |
| | |
| Steam++_linux_x64_v2.8.5.rpm | SHA256 |
| Steam++_linux_arm64_v2.8.5.rpm | SHA256 |
| Steam++_linux_x64_v2.8.3.rpm | SHA256 |
| Steam++_linux_arm64_v2.8.3.rpm | SHA256 |
| | |
| Steam++_macos_x64_v2.8.5.dmg | SHA256 |
| Steam++_macos_arm64_v2.8.5.dmg | SHA256 |
| Steam++_macos_x64_v2.8.3.dmg | SHA256 |
| Steam++_macos_arm64_v2.8.3.dmg | SHA256 |
| | |
| Steam++_android_v2.8.5.apk | SHA256 |
| Steam++_android_v2.8.3.apk | SHA256 |
@@ -8,16 +8,10 @@ public static partial class EnumExtensions
/// <summary>
/// 返回一个布尔值,该值指示给定的整数值或其名称字符串是否存在于指定的枚举中
/// </summary>
/// <typeparam name="TEnum"></typeparam>
/// <param name="value"></param>
/// <returns>如果 enumType 中的某个常量的值等于 value,则为 <see langword="true"/>;否则为 <see langword="false"/></returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool IsDefined<TEnum>(this TEnum value) where TEnum : struct, Enum
#if NET5_0_OR_GREATER
=> Enum.IsDefined(value);
#else
=> Enum.IsDefined(typeof(TEnum), value);
#endif
public static bool IsDefined(this Enum value) => Enum.IsDefined(value.GetType(), value);
public static TEnum ConvertToEnum<TEnum>(this sbyte value)
where TEnum : Enum
@@ -19,9 +19,6 @@ public abstract class HttpPlatformHelperService : IHttpPlatformHelperService
ImageFormat.JPEG,
ImageFormat.PNG,
ImageFormat.GIF,
ImageFormat.WebP,
ImageFormat.BMP,
ImageFormat.ICO,
});
public virtual ImageFormat[] SupportedImageFormats => mSupportedImageFormats.Value;
@@ -12,7 +12,7 @@ namespace System.Properties
/// <item> macOS:\packaging\build-osx-app.sh &lt;CFBundleVersion&gt; &lt;CFBundleShortVersionString&gt; </item>
/// </list>
/// </summary>
public const string Version = "2.8.5";
public const string Version = "2.8.4";
//public const string InfoVersion = Version + "-beta";
}
+1 -8
View File
@@ -190,13 +190,6 @@ namespace System
#endregion
// https://learn.microsoft.com/zh-cn/dotnet/standard/serialization/system-text-json/character-casing#case-insensitive-property-matching
static readonly SJsonSerializerOptions S_options = new()
{
PropertyNameCaseInsensitive = true,
};
#region Deserialize(反序列化)
/// <summary>
@@ -211,7 +204,7 @@ namespace System
{
return implType switch
{
JsonImplType.SystemTextJson => SJsonSerializer.Deserialize<T>(value, S_options),
JsonImplType.SystemTextJson => SJsonSerializer.Deserialize<T>(value),
_ =>
#if NOT_NJSON
throw new NotSupportedException(),
@@ -2,7 +2,7 @@
<PropertyGroup>
<!--<TargetFrameworks>MonoAndroid12.0;netstandard2.1;net6.0-android</TargetFrameworks>-->
<TargetFrameworks>netstandard2.1</TargetFrameworks>
<TargetFrameworks>MonoAndroid12.0;netstandard2.1</TargetFrameworks>
<RootNamespace>System</RootNamespace>
<AssemblyName>System.Common.PinyinLib.TinyPinyin</AssemblyName>
<ImplicitUsings>enable</ImplicitUsings>
+4 -4
View File
@@ -17,10 +17,10 @@ internal static class Program
{
const string ExecutiveName = "Steam++";
static BundleArch matchArch;
static readonly SemanticVersion runtimeVersion = new(6, 0, 12);
static readonly SemanticVersion sdkVersion1 = new(6, 0, 112);
static readonly SemanticVersion sdkVersion3 = new(6, 0, 307);
static readonly SemanticVersion sdkVersion4 = new(6, 0, 404);
static readonly SemanticVersion runtimeVersion = new(6, 0, 8);
static readonly SemanticVersion sdkVersion1 = new(6, 0, 108);
static readonly SemanticVersion sdkVersion3 = new(6, 0, 303);
static readonly SemanticVersion sdkVersion4 = new(6, 0, 400);
/// <summary>
/// 应用程序的主入口点。
@@ -5,6 +5,6 @@ namespace System.Properties
/// <summary>
/// 版本号
/// </summary>
public const string Version = "1.1.11";
public const string Version = "1.1.0";
}
}
@@ -2,8 +2,7 @@
<PropertyGroup>
<!--<TargetFrameworks>MonoAndroid12.0;Xamarin.iOS10;net6.0-android;net6.0-windows</TargetFrameworks>-->
<!--<TargetFrameworks>MonoAndroid12.0;Xamarin.iOS10;net6.0-windows</TargetFrameworks>-->
<TargetFrameworks>net6.0-windows</TargetFrameworks>
<TargetFrameworks>MonoAndroid12.0;Xamarin.iOS10;net6.0-windows</TargetFrameworks>
<RootNamespace>System.Application.AppCenter</RootNamespace>
<AssemblyName>System.Application.SteamTools.Client.AppCenter</AssemblyName>
<ImplicitUsings>enable</ImplicitUsings>
+2 -2
View File
@@ -245,7 +245,7 @@ public abstract class CommandLineHost : IDisposable
// -clt steam -account
var steamuser = new Command("steam", "Steam 相关操作");
steamuser.AddOption(new Option<string>("-account", "指定对应 Steam 用户名"));
steamuser.Handler = CommandHandler.Create((string account) =>
steamuser.Handler = CommandHandler.Create(async (string account) =>
{
if (!string.IsNullOrEmpty(account))
{
@@ -257,7 +257,7 @@ public abstract class CommandLineHost : IDisposable
var currentuser = users.Where(s => s.AccountName == account).FirstOrDefault();
steamService.TryKillSteamProcess();
await steamService.ShutdownSteamAsync();
if (currentuser != null)
{
@@ -11,7 +11,7 @@
<Identity
Name="4651ED44255E.47979655102CE"
Publisher="CN=A90E406B-B2D3-4A23-B061-0FA1D65C4F66"
Version="2.8.5.0" />
Version="2.8.4.0" />
<Properties>
<DisplayName>Watt Toolkit</DisplayName>
@@ -10,7 +10,6 @@ using NLog;
using Avalonia;
using Avalonia.ReactiveUI;
using Avalonia.Controls;
using System.Net.Http;
#if WINDOWS || WINDOWS_DESKTOP_BRIDGE
using WPFMessageBox = System.Windows.MessageBox;
@@ -48,10 +47,6 @@ namespace System.Application.UI
// fix The request was aborted: Could not create SSL/TLS secure channel
TrySetSecurityProtocol();
#if WINDOWS || WINDOWS_DESKTOP_BRIDGE
HttpClient.DefaultProxy = DynamicHttpWindowsProxy.Instance;
#endif
#if WINDOWS_DESKTOP_BRIDGE
if (!DesktopBridgeHelper.Init()) return 0;
InitWithUWP(ref args);
@@ -32,22 +32,14 @@
<DefineConstants>MAC;PUBLISH;$(DefineConstants)</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(ExtraDefineConstants)' == 'win-x64' Or '$(ExtraDefineConstants)' == 'dev-win-x64' Or '$(ExtraDefineConstants)' == 'win-x86' Or '$(ExtraDefineConstants)' == 'dev-win-x86' ">
<PropertyGroup Condition=" '$(ExtraDefineConstants)' == 'win-x64' Or '$(ExtraDefineConstants)' == 'dev-win-x64' ">
<DefineConstants>PUBLISH;PUBLISH_WIN7;WINDOWS;$(DefineConstants)</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(ExtraDefineConstants)' == 'win-arm64' Or '$(ExtraDefineConstants)' == 'dev-arm64' ">
<DefineConstants>PUBLISH;WINDOWS;$(DefineConstants)</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(ExtraDefineConstants)' == 'fd-win-x64' Or '$(ExtraDefineConstants)' == 'dev-fd-win-x64' Or '$(ExtraDefineConstants)' == 'fd-win-x86' Or '$(ExtraDefineConstants)' == 'dev-fd-win-x86' ">
<PropertyGroup Condition=" '$(ExtraDefineConstants)' == 'fd-win-x64' Or '$(ExtraDefineConstants)' == 'dev-fd-win-x64' ">
<DefineConstants>FRAMEWORK_DEPENDENT;PUBLISH;PUBLISH_WIN7;WINDOWS;$(DefineConstants)</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(ExtraDefineConstants)' == 'fd-win-arm64' Or '$(ExtraDefineConstants)' == 'dev-fd-arm64' ">
<DefineConstants>FRAMEWORK_DEPENDENT;PUBLISH;WINDOWS;$(DefineConstants)</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" $(RuntimeIdentifier.Contains(`win`)) Or $(ExtraDefineConstants.Contains(`win`)) Or ('$(OS)' == 'Windows_NT' And !$(DefineConstants.Contains(`PUBLISH`))) ">
<DefineConstants>WINDOWS;$(DefineConstants)</DefineConstants>
<ApplicationIcon>..\ST.Client.Desktop.Avalonia\Application\UI\Assets\Icon.ico</ApplicationIcon>
@@ -193,15 +193,15 @@
Margin="10">
<controls:ScrollingTextBlock Text="{Binding Name}" Classes="h6 semibold"/>
<!--Foreground="#D22222"-->
<controls:ScrollingTextBlock Text="{Binding Amount,Converter={StaticResource StringFormatConverter},ConverterParameter={ReflectionBinding CurrencyCode}}"/>
<!--<controls:ScrollingTextBlock>
<!--<controls:ScrollingTextBlock Text="{Binding Amount,Converter={StaticResource StringFormatConverter},ConverterParameter={ReflectionBinding CurrencyCode}}"/>-->
<controls:ScrollingTextBlock>
<controls:ScrollingTextBlock.Text>
<MultiBinding Converter="{StaticResource StringFormatConverter}" ConverterParameter="money">
<Binding Path="Amount"/>
<Binding Path="CurrencyCode"/>
</MultiBinding>
</controls:ScrollingTextBlock.Text>
</controls:ScrollingTextBlock>-->
</controls:ScrollingTextBlock>
</StackPanel>
</DockPanel>
</Border>
@@ -39,13 +39,6 @@
</DockPanel>
</Border>
<Border Classes="Item">
<DockPanel>
<TextBlock Text="{ReflectionBinding Path=Res.Settings_Steam_RunSteamChina,Mode=OneWay,Source={x:Static resx:R.Current}}"/>
<ToggleSwitch IsChecked="{ReflectionBinding Source={x:Static ms:SteamSettings.IsRunSteamChina},Path=Value, Mode=TwoWay}"/>
</DockPanel>
</Border>
<Border Classes="Item">
<DockPanel>
<TextBlock Text="{ReflectionBinding Path=Res.Settings_Steam_CheckSteamRuningNotification,Mode=OneWay,Source={x:Static resx:R.Current}}"/>
@@ -91,14 +91,14 @@ namespace System.Application.Services.Implementation
async ValueTask<bool?> IPlatformService.TrustRootCertificate(string filePath)
{
var script = $"security add-trusted-cert -d -r trustRoot -k /Users/{Environment.UserName}/Library/Keychains/login.keychain-db";
var script = $"security add-trusted-cert -d -r trustRoot -k /Users/{Environment.UserName}/Library/Keychains/login.keychain-db \\\"{filePath}\\\"";
TextBoxWindowViewModel vm = new()
{
Title = AppResources.MacTrustRootCertificateTips,
InputType = TextBoxWindowViewModel.TextBoxInputType.Password,
Description = AppResources.MacSudoPasswordTips + $"\r\n sudo {script} \"{filePath}\"",
InputType = TextBoxWindowViewModel.TextBoxInputType.ReadOnlyText,
Description = AppResources.MacTrustRootCertificateTips,
};
var scriptContent = $"osascript -e 'tell app \"Terminal\" to do script \"sudo -S {script} \\\"{filePath}\\\"\"'";
var scriptContent = $"osascript -e 'tell app \"Terminal\" to do script \"sudo -S {script}\"'";
var msg = UnixHelper.RunShell(scriptContent.ToString());
if (await TextBoxWindowViewModel.ShowDialogAsync(vm) == null)
return null;
File diff suppressed because it is too large Load Diff
@@ -1,6 +1,5 @@
using DnsClient;
using DnsClient.Protocol;
using Microsoft.Extensions.DependencyInjection.Extensions;
using System.Application.Services;
using System.Application.Services.Implementation;
using System.Collections.Generic;
@@ -17,16 +16,16 @@ namespace System.Application.Services.Implementation
{
private static readonly LookupClient lookupClient = new();
public async Task<int> AnalysisHostnameTime(string url, CancellationToken cancellationToken = default)
public int AnalysisHostnameTime(string url)
{
if (!string.IsNullOrEmpty(url))
{
var client = lookupClient;
var result = await client.QueryAsync(url, QueryType.A, QueryClass.IN, cancellationToken);
var result = client.Query(url, QueryType.A);
if (result.Answers.Count > 0)
{
var value = result.Answers.ARecords().FirstOrDefault()?.InitialTimeToLive;
return value ?? 0;
if (value.HasValue) return value.Value;
}
}
return 0;
@@ -151,7 +150,6 @@ namespace Microsoft.Extensions.DependencyInjection
{
public static IServiceCollection AddDnsAnalysisService(this IServiceCollection services)
{
//services.AddSingleton<IDnsAnalysisService, DnsDohAnalysisService>();
services.AddSingleton<IDnsAnalysisService, DnsAnalysisServiceImpl>();
return services;
}
@@ -8,14 +8,10 @@ using System.Application.Settings;
using System.Application.UI;
using System.Application.UI.Resx;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
#if WINDOWS
using System.Management;
#endif
using System.Net;
using System.Net.Http;
using System.Runtime.Versioning;
@@ -147,41 +143,6 @@ namespace System.Application.Services.Implementation
/// <returns></returns>
private Process? GetSteamProces() => GetSteamProcesses().FirstOrDefault();
public bool IsSteamChinaLauncher()
{
#if WINDOWS
var process = GetSteamProces();
if (process != null)
{
try
{
return GetCommandLineArgsCore().Contains("-steamchina", StringComparison.OrdinalIgnoreCase);
}
catch (Win32Exception ex) when ((uint)ex.ErrorCode == 0x80004005)
{
// 没有对该进程的安全访问权限。
return false;
}
catch (InvalidOperationException)
{
// 进程已退出。
return false;
}
}
string GetCommandLineArgsCore()
{
using (var searcher = new ManagementObjectSearcher(
"SELECT CommandLine FROM Win32_Process WHERE ProcessId = " + process.Id))
using (var objects = searcher.Get())
{
var @object = objects.Cast<ManagementBaseObject>().SingleOrDefault();
return @object?["CommandLine"]?.ToString() ?? "";
}
}
#endif
return false;
}
public void StartSteam(string? arguments = null)
{
if (!string.IsNullOrWhiteSpace(SteamProgramPath) && File.Exists(SteamProgramPath))
@@ -534,7 +495,6 @@ namespace System.Application.Services.Implementation
private uint univeseNumber;
private const uint MagicNumber = 123094055U;
private const uint MagicNumberV2 = 123094056U;
/// <summary>
/// 从steam本地客户端缓存文件中读取游戏数据
@@ -556,7 +516,7 @@ namespace System.Application.Services.Implementation
}
using BinaryReader binaryReader = new(stream);
uint num = binaryReader.ReadUInt32();
if (num != MagicNumberV2 && num != MagicNumber)
if (num != MagicNumber)
{
Log.Error(nameof(GetAppInfos), string.Format("\"{0}\" magic code is not supported: 0x{1:X8}", Path.GetFileName(AppInfoPath), num));
return apps;
@@ -106,21 +106,6 @@ namespace System.Application.Services.Implementation
return SteamClient.SteamUtils.IsSteamChinaLauncher();
}
public bool IsSteamInBigPictureMode()
{
return SteamClient.SteamUtils.IsSteamInBigPictureMode();
}
public uint GetSecondsSinceAppActive()
{
return SteamClient.SteamUtils.GetSecondsSinceAppActive();
}
public uint GetServerRealTime()
{
return SteamClient.SteamUtils.GetServerRealTime();
}
public bool IsAppInstalled(uint appid)
{
return SteamClient.SteamApps008.IsAppInstalled(appid);
@@ -56,8 +56,8 @@ sealed partial class TitaniumCertificateManagerImpl : CertificateManagerImpl, IC
=> manager.CreateRootCertificate(true);
protected override void SharedRemoveTrustedRootCertificate()
=> manager.RemoveTrustedRootCertificate(true);
=> manager.RemoveTrustedRootCertificate(false);
protected override void SharedTrustRootCertificate()
=> manager.TrustRootCertificate(true);
=> manager.TrustRootCertificate(false);
}
@@ -64,15 +64,14 @@ sealed class HttpReverseProxyMiddleware
return;
}
if (domainConfig == defaultDomainConfig &&
!reverseProxyConfig.Service.OnlyEnableProxyScript)
if (domainConfig == defaultDomainConfig)
{
//部分运营商将奇怪的域名解析到127.0.0.1 再此排除这些不支持的代理域名
var ip = await reverseProxyConfig.DnsAnalysis.AnalysisDomainIpAsync(context.Request.Host.Value, IDnsAnalysisService.DNS_Dnspods).FirstOrDefaultAsync();
var ip = await IDnsAnalysisService.Instance.AnalysisDomainIpAsync(url, IDnsAnalysisService.DNS_Alis).FirstOrDefaultAsync();
if (ip == null || IPAddress.IsLoopback(ip))
{
context.Response.StatusCode = StatusCodes.Status500InternalServerError;
await context.Response.WriteAsync($"域名 {context.Request.Host.Host} 可能已经被 DNS 污染,如果域名为本机域名,请解析为非回环 IP。", Encoding.UTF8);
await context.Response.WriteAsync($"域名 {context.Request.Host.Host} 可能已经被 DNS 污染,如果域名为本机域名,请解析为非回环 IP。");
return;
}
}
@@ -191,7 +190,11 @@ sealed class HttpReverseProxyMiddleware
/// <returns></returns>
static async Task HandleErrorAsync(HttpContext context, ForwarderError error)
{
await context.Response.WriteAsync($"{error}:{context.GetForwarderErrorFeature()?.Exception?.Message}");
await context.Response.WriteAsJsonAsync(new
{
error = error.ToString(),
message = context.GetForwarderErrorFeature()?.Exception?.Message,
});
}
/// <summary>
@@ -78,7 +78,7 @@ sealed partial class YarpCertificateManagerImpl : CertificateManagerImpl, ICerti
"Could not remove certificate as it is null or empty.");
}
using var x509Store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
using var x509Store = new X509Store(StoreName.Root, StoreLocation.CurrentUser);
try
{
@@ -96,7 +96,7 @@ sealed partial class YarpCertificateManagerImpl : CertificateManagerImpl, ICerti
catch (Exception e)
{
Log.Error(TAG, new ApplicationException(
"Failed to remove root certificate trust for LocalMachine store location. You may need admin rights.", e), nameof(SharedRemoveTrustedRootCertificate));
"Failed to remove root certificate trust for CurrentUser store location. You may need admin rights.", e), nameof(SharedRemoveTrustedRootCertificate));
}
finally
{
@@ -112,7 +112,7 @@ sealed partial class YarpCertificateManagerImpl : CertificateManagerImpl, ICerti
"Could not install certificate as it is null or empty.");
}
using var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
using var store = new X509Store(StoreName.Root, StoreLocation.CurrentUser);
try
{
store.Open(OpenFlags.ReadWrite);
@@ -68,8 +68,7 @@ sealed partial class YarpReverseProxyServiceImpl : ReverseProxyServiceImpl, IRev
else
{
options.ListenHttpsReverseProxy();
if (EnableHttpProxyToHttps)
options.ListenHttpReverseProxy();
options.ListenHttpReverseProxy();
}
});
@@ -210,7 +210,7 @@ abstract partial class CertificateManagerImpl
[SupportedOSPlatform("Linux")]
void DeleteRootCertificateLinux()
{
using var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
using var store = new X509Store(StoreName.Root, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
var collection = store.Certificates.Find(X509FindType.FindByIssuerName, IReverseProxyService.RootCertificateName, false);
foreach (var item in collection)
@@ -233,7 +233,7 @@ abstract partial class CertificateManagerImpl
[SupportedOSPlatform("macOS")]
async void DeleteRootCertificateMacOS()
{
using var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
using var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
var collection = store.Certificates.Find(X509FindType.FindByIssuerName, IReverseProxyService.RootCertificateName, false);
foreach (var item in collection)
@@ -287,7 +287,7 @@ abstract partial class CertificateManagerImpl
}
else
{
using var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
using var store = new X509Store(StoreName.Root, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
return store.Certificates.Contains(certificate2);
}
@@ -12,13 +12,13 @@ abstract class ReverseProxyServiceImpl
public ReverseProxyServiceImpl(
IPlatformService platformService,
IDnsAnalysisService dnsAnalyses)
IDnsAnalysisService dnsAnalysis)
{
this.platformService = platformService;
DnsAnalysis = dnsAnalyses;
DnsAnalysis = dnsAnalysis;
}
public IDnsAnalysisService? DnsAnalysis { get; }
public IDnsAnalysisService DnsAnalysis { get; }
public abstract ICertificateManager CertificateManager { get; }
-2
View File
@@ -41,8 +41,6 @@
<!--<PackageReference Include="CommunityToolkit.Mvvm"/>-->
<PackageReference Include="ReactiveUI.Fody" />
<!--<PackageReference Include="ArchiSteamFarm.Library" />-->
<PackageReference Include="Ae.DNS.Client" />
<!--<PackageReference Include="Ae.Dns.Protocol" />-->
</ItemGroup>
<ItemGroup Condition=" $(TargetFramework.StartsWith('netstandard')) ">
<PackageReference Include="JustArchiNET.Madness" />
+1 -21
View File
@@ -12,16 +12,9 @@ namespace System.Application.Services
/// </summary>
public interface IDnsAnalysisService
{
protected const string TAG = "DnsAnalysisService";
static IDnsAnalysisService Instance => DI.Get<IDnsAnalysisService>();
#region DNS常量
const string DNS_Ali_DohAddres = "https://dns.alidns.com";
const string Dnspod_DohAddres = "https://1.12.12.12";
const string Google_DohAddres = "https://dns.google";
const string Cloudflare_DohAddres = "https://cloudflare-dns.com";
protected const string PrimaryDNS_IPV6_Ali = "2400:3200::1";
const string PrimaryDNS_Ali = "223.5.5.5";
@@ -73,7 +66,7 @@ namespace System.Application.Services
return r.RoundtripTime;
}
Task<int> AnalysisHostnameTime(string url, CancellationToken cancellationToken = default);
int AnalysisHostnameTime(string url);
/// <summary>
/// 解析域名 IP 地址
@@ -126,19 +119,6 @@ namespace System.Application.Services
}
}
/// <summary>
/// DOH 解析域名 IP 地址
/// </summary>
/// <param name="hostNameOrAddress">要解析的主机名或 IP 地址</param>
/// <param name="dnsServers">自定义 DNS 服务器,可选的值有 <see cref="DNS_Alis"/>, <see cref="DNS_114s"/>, <see cref="DNS_Cloudflares"/>, <see cref="DNS_Dnspods"/>, <see cref="DNS_Googles"/></param>
/// <param name="isIPv6"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
IAsyncEnumerable<IPAddress>? DohAnalysisDomainIpAsync(string hostNameOrAddress, string? dnsServers, bool isIPv6, CancellationToken cancellationToken = default)
{
return null;
}
async Task<string?> GetHostByIPAddress(IPAddress ip)
{
var hostEntry = await Dns.GetHostEntryAsync(ip);
@@ -1,72 +0,0 @@
using System.Collections.Generic;
using System.Net;
using System.Net.NetworkInformation;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
namespace System.Application.Services
{
/// <summary>
/// DNS 解析服务
/// </summary>
public interface IDnsDohAnalysisService
{
protected const string TAG = "DnsDohAnalysisService";
static IDnsDohAnalysisService Instance => DI.Get<IDnsDohAnalysisService>();
#region DNS常量
const string DNS_Ali_DohAddres = "https://dns.alidns.com/dns-query";
const string Dnspod_DohAddres = "https://1.12.12.12/dns-query";
const string Google_DohAddres = "https://dns.google/dns-query";
const string Cloudflare_DohAddres = "https://cloudflare-dns.com/dns-query";
#endregion
protected const string IPV6_TESTDOMAIN = "ipv6.rmbgame.net";
/// <summary>
/// 解析域名 IP 地址
/// </summary>
/// <param name="hostNameOrAddress">要解析的主机名或 IP 地址</param>
/// <param name="isIPv6"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
IAsyncEnumerable<IPAddress> AnalysisDomainIpAsync(string hostNameOrAddress, bool isIPv6, CancellationToken cancellationToken = default)
=> AnalysisDomainIpAsync(hostNameOrAddress, default, isIPv6, cancellationToken);
/// <summary>
/// 解析域名 IP 地址
/// </summary>
/// <param name="hostNameOrAddress">要解析的主机名或 IP 地址</param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
IAsyncEnumerable<IPAddress> AnalysisDomainIpAsync(string hostNameOrAddress, CancellationToken cancellationToken = default)
=> AnalysisDomainIpAsync(hostNameOrAddress, default, default, cancellationToken);
/// <summary>
/// 解析域名 IP 地址
/// </summary>
/// <param name="hostNameOrAddress">要解析的主机名或 IP 地址</param>
/// <param name="dnsServers">自定义 DNS 服务器,可选的值有 <see cref="DNS_Alis"/>, <see cref="DNS_114s"/>, <see cref="DNS_Cloudflares"/>, <see cref="DNS_Dnspods"/>, <see cref="DNS_Googles"/></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
IAsyncEnumerable<IPAddress> AnalysisDomainIpAsync(string hostNameOrAddress, string? dnsServers, CancellationToken cancellationToken = default)
=> AnalysisDomainIpAsync(hostNameOrAddress, dnsServers, default, cancellationToken);
/// <summary>
/// 解析域名 IP 地址
/// </summary>
/// <param name="hostNameOrAddress">要解析的主机名或 IP 地址</param>
/// <param name="dnsServers">自定义 DNS 服务器,可选的值有 <see cref="DNS_Alis"/>, <see cref="DNS_114s"/>, <see cref="DNS_Cloudflares"/>, <see cref="DNS_Dnspods"/>, <see cref="DNS_Googles"/></param>
/// <param name="isIPv6"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
IAsyncEnumerable<IPAddress> AnalysisDomainIpAsync(string hostNameOrAddress, string? dnsServers, bool isIPv6, CancellationToken cancellationToken = default);
Task<bool> GetIsIpv6Support() => Task.FromResult(false);
}
}
-2
View File
@@ -50,8 +50,6 @@ namespace System.Application.Services
/// <returns></returns>
int GetSteamProcessPid();
bool IsSteamChinaLauncher();
/// <summary>
/// 启动 Steam
/// </summary>
@@ -33,12 +33,6 @@ namespace System.Application.Services
bool IsSteamChinaLauncher();
bool IsSteamInBigPictureMode();
uint GetSecondsSinceAppActive();
uint GetServerRealTime();
bool IsAppInstalled(uint appid);
string GetAppInstallDir(uint appid);
@@ -1,99 +0,0 @@
using System.Linq;
using System.Collections.Generic;
using System.Threading;
using System.Net;
using System.Net.Http;
using Ae.Dns.Client;
using Ae.Dns.Protocol;
using Microsoft.Extensions.Logging;
using Ae.Dns.Protocol.Records;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
namespace System.Application.Services;
public sealed class DnsDohAnalysisService : GeneralHttpClientFactory, IDnsAnalysisService
{
public DnsDohAnalysisService(
ILoggerFactory loggerFactory,
IHttpPlatformHelperService http_helper,
IHttpClientFactory clientFactory)
: base(loggerFactory.CreateLogger(IDnsAnalysisService.TAG), http_helper, clientFactory)
{
}
public async Task<int> AnalysisHostnameTime(string url, CancellationToken cancellationToken = default)
{
if (!string.IsNullOrEmpty(url))
{
var client = CreateClient();
client.BaseAddress = new Uri(IDnsAnalysisService.Dnspod_DohAddres);
IDnsClient dnsClient = new DnsHttpClient(client);
var queryType = Ae.Dns.Protocol.Enums.DnsQueryType.A;
var query = DnsQueryFactory.CreateQuery(url, queryType);
var answer = await dnsClient.Query(query, cancellationToken);
var value = answer.Answers.FirstOrDefault()?.TimeToLive;
return (int)(value ?? 0);
}
return 0;
}
/// <summary>
/// 解析域名 IP 地址
/// </summary>
/// <param name="hostNameOrAddress">要解析的主机名或 IP 地址</param>
/// <param name="isIPv6"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public IAsyncEnumerable<IPAddress> AnalysisDomainIpAsync(string hostNameOrAddress, bool isIPv6, CancellationToken cancellationToken = default)
=> DohAnalysisDomainIpAsync(hostNameOrAddress, default, isIPv6, cancellationToken);
/// <summary>
/// 解析域名 IP 地址
/// </summary>
/// <param name="hostNameOrAddress">要解析的主机名或 IP 地址</param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public IAsyncEnumerable<IPAddress> AnalysisDomainIpAsync(string hostNameOrAddress, CancellationToken cancellationToken = default)
=> DohAnalysisDomainIpAsync(hostNameOrAddress, default, default, cancellationToken);
/// <summary>
/// 解析域名 IP 地址
/// </summary>
/// <param name="hostNameOrAddress">要解析的主机名或 IP 地址</param>
/// <param name="dnsServers">自定义 DNS 服务器,可选的值有 <see cref="DNS_Alis"/>, <see cref="DNS_114s"/>, <see cref="DNS_Cloudflares"/>, <see cref="DNS_Dnspods"/>, <see cref="DNS_Googles"/></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public IAsyncEnumerable<IPAddress> AnalysisDomainIpAsync(string hostNameOrAddress, string? dnsServers, CancellationToken cancellationToken = default)
=> DohAnalysisDomainIpAsync(hostNameOrAddress, dnsServers, default, cancellationToken);
/// <summary>
/// DOH 解析域名 IP 地址
/// </summary>
/// <param name="hostNameOrAddress">要解析的主机名或 IP 地址</param>
/// <param name="dnsServers">自定义 DNS 服务器,可选的值有 <see cref="DNS_Alis"/>, <see cref="DNS_114s"/>, <see cref="DNS_Cloudflares"/>, <see cref="DNS_Dnspods"/>, <see cref="DNS_Googles"/></param>
/// <param name="isIPv6"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public async IAsyncEnumerable<IPAddress> DohAnalysisDomainIpAsync(string hostNameOrAddress, string? dnsServers, bool isIPv6, [EnumeratorCancellation] CancellationToken cancellationToken = default)
{
var client = CreateClient();
client.BaseAddress = new Uri(string.IsNullOrEmpty(dnsServers) ? IDnsAnalysisService.Dnspod_DohAddres : dnsServers);
IDnsClient dnsClient = new DnsHttpClient(client);
var queryType = isIPv6 ? Ae.Dns.Protocol.Enums.DnsQueryType.AAAA : Ae.Dns.Protocol.Enums.DnsQueryType.A;
var query = DnsQueryFactory.CreateQuery(hostNameOrAddress, queryType);
var answer = await dnsClient.Query(query, cancellationToken);
foreach (var x in answer.Answers)
{
if (x.Resource is DnsIpAddressResource ipAddressResource)
{
yield return ipAddressResource.IPAddress;
}
}
}
}
@@ -1,4 +1,4 @@
using System.Application.Models;
using System.Application.Models;
using System.Collections.Generic;
using System.Threading.Tasks;
@@ -66,7 +66,8 @@ namespace System.Application.Services.Implementation
url += "&dimensions=600x900";
}
var rsp = await s.SendAsync<SteamGridItemData>(url, () =>
var rsp = await s.SendAsync<SteamGridItemData>
(url, () =>
{
var rq = new HttpRequestMessage(HttpMethod.Get, url);
rq.Headers.Authorization = new Net.Http.Headers.AuthenticationHeaderValue("Bearer", ApiKey);
@@ -24,12 +24,6 @@ namespace System.Application.Services.Implementation
public bool IsSteamChinaLauncher() => default;
public bool IsSteamInBigPictureMode() => default;
public uint GetSecondsSinceAppActive() => default;
public uint GetServerRealTime() => default;
public bool IsAppInstalled(uint appid) => default;
public string GetAppInstallDir(uint appid) => string.Empty;
@@ -274,16 +274,15 @@ namespace System.Application.Services
CurrentSteamUser = await swWebService.GetUserInfo(id);
CurrentSteamUser.AvatarStream = httpService.GetImageAsync(CurrentSteamUser.AvatarFull, ImageChannelType.SteamAvatars);
//AvatarPath = ImageSouce.TryParse(await CurrentSteamUser.AvatarStream, isCircle: true);
CurrentSteamUser.IPCountry = swLocalService.GetIPCountry();
IsSteamChinaLauncher = stmService.IsSteamChinaLauncher();
var steamServerTime = ((long)swLocalService.GetServerRealTime()).ToDateTimeOffsetS();
//var steamRunTime = swLocalService.GetSecondsSinceAppActive();
IsSteamChinaLauncher = swLocalService.IsSteamChinaLauncher();
#region 初始化需要steam启动才能使用的功能
if (SteamSettings.IsEnableSteamLaunchNotification.Value)
{
INotificationService.Instance.Notify($"{AppResources.Steam_CheckStarted}{(IsSteamChinaLauncher ? AppResources.Steam_SteamChina : AppResources.Steam_SteamWorld)}{Environment.NewLine}{AppResources.Steam_CurrentUser}{CurrentSteamUser.SteamNickName}{Environment.NewLine}{AppResources.Steam_CurrentIPCountry}{CurrentSteamUser.IPCountry}{Environment.NewLine}{AppResources.Steam_ServerTime}{steamServerTime:yyyy-MM-dd HH:mm:ss}", NotificationType.Message);
INotificationService.Instance.Notify($"{AppResources.Steam_CheckStarted}{(IsSteamChinaLauncher ? AppResources.Steam_SteamChina : AppResources.Steam_SteamWorld)}{Environment.NewLine}{AppResources.Steam_CurrentUser}{CurrentSteamUser.SteamNickName}{Environment.NewLine}{AppResources.Steam_CurrentIPCountry}{CurrentSteamUser.IPCountry}", NotificationType.Message);
}
if (GameLibrarySettings.IsAutoAFKApps.Value)
@@ -448,7 +447,7 @@ namespace System.Application.Services
IsDisposedClient = false;
SteamApps.Clear();
var apps = await ISteamService.Instance.GetAppInfos();
if (apps != null)
if (apps.Any())
{
var temps = swLocalService.OwnsApps(apps);
LoadGames(temps);
-19
View File
@@ -14,7 +14,6 @@ public sealed class SteamSettings : SettingsHost2<SteamSettings>
if (!IApplication.IsDesktopPlatform) return;
IsRunSteamMinimized.ValueChanged += IsRunSteamMinimized_ValueChanged;
IsRunSteamNoCheckUpdate.ValueChanged += IsRunSteamNoCheckUpdate_ValueChanged;
IsRunSteamChina.ValueChanged += IsRunSteamChina_ValueChanged;
}
static void IsRunSteamNoCheckUpdate_ValueChanged(object? sender, ValueChangedEventArgs<bool> e)
@@ -33,14 +32,6 @@ public sealed class SteamSettings : SettingsHost2<SteamSettings>
SteamStratParameter.Value = SteamStratParameter.Value.Replace("-silent", "").Trim();
}
static void IsRunSteamChina_ValueChanged(object? sender, ValueChangedEventArgs<bool> e)
{
if (e.NewValue)
SteamStratParameter.Value += " -steamchina";
else if (SteamStratParameter.Value != null)
SteamStratParameter.Value = SteamStratParameter.Value.Replace("-steamchina", "").Trim();
}
static readonly SerializableProperty<string?>? _SteamStratParameter = IApplication.IsDesktopPlatform ?
GetProperty<string?>(defaultValue: null) : null;
@@ -91,16 +82,6 @@ public sealed class SteamSettings : SettingsHost2<SteamSettings>
[SupportedOSPlatform("Linux")]
public static SerializableProperty<bool> IsRunSteamNoCheckUpdate => _IsRunSteamNoCheckUpdate ?? throw new PlatformNotSupportedException();
static readonly SerializableProperty<bool>? _IsRunSteamChina = IApplication.IsDesktopPlatform ? GetProperty(defaultValue: false) : null;
/// <summary>
/// Steam 启动时模拟为蒸汽平台(Steam国服)启动
/// </summary>
[SupportedOSPlatform("Windows7.0")]
[SupportedOSPlatform("macOS")]
[SupportedOSPlatform("Linux")]
public static SerializableProperty<bool> IsRunSteamChina => _IsRunSteamChina ?? throw new PlatformNotSupportedException();
static readonly SerializableProperty<bool>? _IsEnableSteamLaunchNotification = IApplication.IsDesktopPlatform ? GetProperty(defaultValue: true) : null;
/// <summary>
-18
View File
@@ -5356,15 +5356,6 @@ namespace System.Application.UI.Resx {
}
}
/// <summary>
/// 查找类似 Steam 启动时模拟为蒸汽平台(Steam国服)启动 的本地化字符串。
/// </summary>
public static string Settings_Steam_RunSteamChina {
get {
return ResourceManager.GetString("Settings_Steam_RunSteamChina", resourceCulture);
}
}
/// <summary>
/// 查找类似 Steam 启动参数 的本地化字符串。
/// </summary>
@@ -5681,15 +5672,6 @@ namespace System.Application.UI.Resx {
}
}
/// <summary>
/// 查找类似 Steam 服务端时间: 的本地化字符串。
/// </summary>
public static string Steam_ServerTime {
get {
return ResourceManager.GetString("Steam_ServerTime", resourceCulture);
}
}
/// <summary>
/// 查找类似 是否删除此家庭库共享。 的本地化字符串。
/// </summary>
-6
View File
@@ -1230,9 +1230,6 @@ AAAAA-BBBBB-CCCC3</value>
<data name="Settings_Steam_RuningMinimize" xml:space="preserve">
<value>Steam 启动时最小化到托盘</value>
</data>
<data name="Settings_Steam_RunSteamChina" xml:space="preserve">
<value>Steam 启动时模拟为蒸汽平台(Steam国服)启动</value>
</data>
<data name="Settings_Steam_RuningAdmin" xml:space="preserve">
<value>以管理员权限运行 Steam</value>
</data>
@@ -1726,9 +1723,6 @@ AAAAA-BBBBB-CCCC3</value>
<data name="Steam_CurrentUser" xml:space="preserve">
<value>Steam 登录用户:</value>
</data>
<data name="Steam_ServerTime" xml:space="preserve">
<value>Steam 服务端时间:</value>
</data>
<data name="Steam_SteamChina" xml:space="preserve">
<value>Steam 国服</value>
</data>
@@ -131,7 +131,7 @@ namespace System.Application.UI.ViewModels
foreach (var item in SteamUsers.Where(x => x.MostRecent))
item.MostRecent = false;
steamService.TryKillSteamProcess();
await steamService.ShutdownSteamAsync();
if (user != null)
{
@@ -52,7 +52,7 @@ namespace System.Application.UI.ViewModels
{
if (await MessageBox.ShowAsync(AppResources.SaveEditedAppInfo_RestartSteamTip, ThisAssembly.AssemblyTrademark, MessageBox.Button.OKCancel) == MessageBox.Result.OK)
{
stmService.TryKillSteamProcess();
await stmService.ShutdownSteamAsync();
stmService.StartSteamWithParameter();
}
Toast.Show(AppResources.SaveEditedAppInfo_SaveToSteamSuccess);
@@ -277,7 +277,7 @@ namespace System.Application.UI.ViewModels
private bool _IsLogining;
public async void LoginSteamImport()
public void LoginSteamImport()
{
if (string.IsNullOrWhiteSpace(UserName))
{
@@ -300,7 +300,8 @@ namespace System.Application.UI.ViewModels
_Enroll.Language = R.GetCurrentCultureSteamLanguageName();
try
bool result = false;
Task.Run(() =>
{
var isSupportedToastService = ToastService.IsSupported;
if (isSupportedToastService)
@@ -308,7 +309,7 @@ namespace System.Application.UI.ViewModels
ToastService.Current.Set(AppResources.Logining);
}
LoginSteamLoadingText = AppResources.Logining;
var result = await _SteamAuthenticator.Enroll(_Enroll);
result = _SteamAuthenticator.Enroll(_Enroll);
if (isSupportedToastService)
{
ToastService.Current.Set();
@@ -392,13 +393,11 @@ namespace System.Application.UI.ViewModels
Toast.Show(AppResources.LocalAuth_SteamUserImportSuccess);
}
}
catch (Exception ex)
}).ContinueWith(s =>
{
Log.Error(nameof(AddAuthWindowViewModel), ex, nameof(LoginSteamImport));
MessageBox.Show(ex, "Error " + nameof(LoginSteamImport));
}
finally
Log.Error(nameof(AddAuthWindowViewModel), s.Exception, nameof(LoginSteamImport));
MessageBox.Show(s.Exception, "Error " + nameof(LoginSteamImport));
}, TaskContinuationOptions.OnlyOnFaulted).ContinueWith(s =>
{
_IsLogining = false;
if (ToastService.IsSupported)
@@ -406,18 +405,8 @@ namespace System.Application.UI.ViewModels
ToastService.Current.Set();
}
LoginSteamLoadingText = null;
}
//Task.Run(() =>
//{
//}).ContinueWith(s =>
//{
//}, TaskContinuationOptions.OnlyOnFaulted).ContinueWith(s =>
//{
//s.Dispose();
//});
s.Dispose();
});
}
public void ImportWinAuth(string filePath)
@@ -241,7 +241,7 @@ namespace System.Application.Models
/// <param name="data">Name-data pairs</param>
/// <param name="cookies">current cookie container</param>
/// <returns>response body</returns>
static async Task<string> Request(string url, string method, NameValueCollection? data = null, CookieContainer? cookies = null, NameValueCollection? headers = null, int timeout = 0)
static string Request(string url, string method, NameValueCollection? data = null, CookieContainer? cookies = null, NameValueCollection? headers = null, int timeout = 0)
{
// create form-encoded data for query or body
string query = data == null ? string.Empty : string.Join("&", Array.ConvertAll(data.AllKeys, key => string.Format("{0}={1}", HttpUtility.UrlEncode(key), HttpUtility.UrlEncode(data[key]))));
@@ -281,27 +281,31 @@ namespace System.Application.Models
request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
request.ContentLength = query.Length;
using StreamWriter requestStream = new StreamWriter(await request.GetRequestStreamAsync());
StreamWriter requestStream = new StreamWriter(request.GetRequestStream());
requestStream.Write(query);
requestStream.Close();
}
try
{
using HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();
LogRequest(method, url, cookies, data, response.StatusCode.ToString() + " " + response.StatusDescription);
// OK?
if (response.StatusCode != HttpStatusCode.OK)
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
throw new WinAuthInvalidRequestException(string.Format("{0}: {1}", (int)response.StatusCode, response.StatusDescription));
}
LogRequest(method, url, cookies, data, response.StatusCode.ToString() + " " + response.StatusDescription);
// load the response
using StreamReader responseStream = new StreamReader(response.GetResponseStream());
string responseData = responseStream.ReadToEnd();
LogRequest(method, url, cookies, data, responseData);
return responseData;
// OK?
if (response.StatusCode != HttpStatusCode.OK)
{
throw new WinAuthInvalidRequestException(string.Format("{0}: {1}", (int)response.StatusCode, response.StatusDescription));
}
// load the response
using (StreamReader responseStream = new StreamReader(response.GetResponseStream()))
{
string responseData = responseStream.ReadToEnd();
LogRequest(method, url, cookies, data, responseData);
return responseData;
}
}
}
catch (Exception ex)
{
@@ -325,7 +329,7 @@ namespace System.Application.Models
/// <summary>
/// Enroll the authenticator with the server
/// </summary>
public async Task<bool> Enroll(EnrollState state)
public bool Enroll(EnrollState state)
{
// clear error
state.Error = null;
@@ -353,7 +357,7 @@ namespace System.Application.Models
{ "X-Requested-With", "com.valvesoftware.android.steam.community" },
};
response = await Request("https://steamcommunity.com/login?oauth_client_id=DE45CD61&oauth_scope=read_profile%20write_profile%20read_client%20write_client", "GET", null, cookies, headers);
response = Request("https://steamcommunity.com/login?oauth_client_id=DE45CD61&oauth_scope=read_profile%20write_profile%20read_client%20write_client", "GET", null, cookies, headers);
}
// Steam strips any non-ascii chars from username and password
@@ -363,7 +367,7 @@ namespace System.Application.Models
// get the user's RSA key
data.Add("donotache", donotache_value);
data.Add("username", state.Username);
response = await Request(COMMUNITY_BASE + "/login/getrsakey", "POST", data, cookies);
response = Request(COMMUNITY_BASE + "/login/getrsakey", "POST", data, cookies);
var rsaresponse = JObject.Parse(response);
if (rsaresponse.SelectToken("success")?.Value<bool>() != true)
{
@@ -402,7 +406,7 @@ namespace System.Application.Models
{ "donotache", donotache_value },
};
const string url_login_dologin = "/login/dologin/";
response = await Request(COMMUNITY_BASE + url_login_dologin, "POST", data, cookies);
response = Request(COMMUNITY_BASE + url_login_dologin, "POST", data, cookies);
var loginresponse = JsonConvert.DeserializeObject<Dictionary<string, object>>(response);
if (loginresponse == null)
{
@@ -448,7 +452,7 @@ namespace System.Application.Models
state.RequiresEmailAuth = false;
}
// require 2fa auth
// require email auth
if (loginresponse.ContainsKey("requires_twofactor") == true && (bool)loginresponse["requires_twofactor"] == true)
{
state.Requires2FA = true;
@@ -485,7 +489,7 @@ namespace System.Application.Models
// login to webapi
data.Clear();
data.Add("access_token", state.OAuthToken);
response = await Request(WEBAPI_BASE + "/ISteamWebUserPresenceOAuth/Logon/v0001", "POST", data);
response = Request(WEBAPI_BASE + "/ISteamWebUserPresenceOAuth/Logon/v0001", "POST", data);
var sessionid = cookies.GetCookies(new Uri(COMMUNITY_BASE + "/"))?["sessionid"]?.Value;
@@ -496,7 +500,7 @@ namespace System.Application.Models
data.Add("arg", "null");
data.Add("sessionid", sessionid);
response = await Request(COMMUNITY_BASE + "/steamguard/phoneajax", "POST", data, cookies);
response = Request(COMMUNITY_BASE + "/steamguard/phoneajax", "POST", data, cookies);
var jsonresponse = JObject.Parse(response);
var hasPhone = SelectTokenValueNotNull<bool>(response, jsonresponse, "has_phone");
if (hasPhone == false)
@@ -519,7 +523,7 @@ namespace System.Application.Models
data.Add("device_identifier", deviceId);
data.Add("sms_phone_id", "1");
const string url_ITwoFactorService_AddAuthenticator_v0001 = "/ITwoFactorService/AddAuthenticator/v0001";
response = await Request(WEBAPI_BASE + url_ITwoFactorService_AddAuthenticator_v0001, "POST", data);
response = Request(WEBAPI_BASE + url_ITwoFactorService_AddAuthenticator_v0001, "POST", data);
var tfaresponse = JObject.Parse(response);
if (response.IndexOf("status") == -1 && SelectTokenValueNotNull<int>(response, tfaresponse, "response.status") == 84)
{
@@ -581,7 +585,7 @@ namespace System.Application.Models
{
data.Add("authenticator_code", CalculateCode(false));
data.Add("authenticator_time", ServerTime.ToString());
response = await Request(WEBAPI_BASE + "/ITwoFactorService/FinalizeAddAuthenticator/v0001", "POST", data);
response = Request(WEBAPI_BASE + "/ITwoFactorService/FinalizeAddAuthenticator/v0001", "POST", data);
var finalizeresponse = JObject.Parse(response);
if (response.IndexOf("status") != -1 && SelectTokenValueNotNull<int>(response, finalizeresponse, "response.status") == INVALID_ACTIVATION_CODE)
{
@@ -628,7 +632,7 @@ namespace System.Application.Models
data.Add("access_token", state.OAuthToken);
data.Add("steamid", state.SteamId);
data.Add("email_type", "2");
response = await Request(WEBAPI_BASE + "/ITwoFactorService/SendEmail/v0001", "POST", data);
response = Request(WEBAPI_BASE + "/ITwoFactorService/SendEmail/v0001", "POST", data);
return true;
}
@@ -653,7 +657,7 @@ namespace System.Application.Models
/// <summary>
/// Synchronise this authenticator's time with Steam.
/// </summary>
public override async void Sync()
public override void Sync()
{
// check if data is protected
if (SecretKey == null && EncryptedData != null)
@@ -669,7 +673,7 @@ namespace System.Application.Models
try
{
var response = await Request(SYNC_URL, "POST", null, null, null, SYNC_TIMEOUT);
var response = Request(SYNC_URL, "POST", null, null, null, SYNC_TIMEOUT);
var json = JObject.Parse(response);
// get servertime in ms
+8 -16
View File
@@ -1,22 +1,14 @@
using System.Application;
using System.Application.Models;
try
return _(args, "客户端发布命令行工具(Command Line Tools/CLT)", init: () =>
{
return _(args, "客户端发布命令行工具(Command Line Tools/CLT)", init: () =>
if (args.FirstOrDefault() == "apphostpatcher")
{
if (args.FirstOrDefault() == "apphostpatcher")
{
var args_ = args.Skip(1).ToArray();
return AppHostPatcher.Program.M(args_);
}
var args_ = args.Skip(1).ToArray();
return AppHostPatcher.Program.M(args_);
}
FileSystem2.InitFileSystem();
return null;
}, action: ToolConfig.AddInitCommand);
}
catch (Exception ex)
{
Console.WriteLine(ex);
return 500;
}
FileSystem2.InitFileSystem();
return null;
}, action: ToolConfig.AddInitCommand);
+6 -6
View File
@@ -109,7 +109,7 @@ namespace System.Application.Steps
#endif
}
public static async Task VerHandlerAsync(string token, bool use_last_skey, bool dev)
static async Task VerHandlerAsync(string token, bool use_last_skey, bool dev)
{
var desc = ReadVersionDesc();
var request = new CreateVersionRequest
@@ -124,7 +124,7 @@ namespace System.Application.Steps
if (rsp.StatusCode == HttpStatusCode.InternalServerError)
{
var html = await rsp.Content.ReadAsStringAsync();
Console.WriteLine(html);
throw new HttpRequestException(html);
}
rsp.EnsureSuccessStatusCode();
var apiResponse = await GetResponseAsync<AppIdWithPublicKey>(rsp);
@@ -505,7 +505,7 @@ namespace System.Application.Steps
//content.Headers.ContentType = new(MediaTypeNames.MessagePack);
//return content;
var json = Serializable.SJSON(request);
var json = Serializable.SJSON_Original(request);
var content = new StringContent(json, Encoding.UTF8, MediaTypeNames.JSON);
return content;
}
@@ -516,7 +516,7 @@ namespace System.Application.Steps
//return await ApiResponse.DeserializeAsync<T>(stream, default);
var json = await responseMessage.Content.ReadAsStringAsync();
return Serializable.DJSON<ApiRsp<T>>(json)!;
return Serializable.DJSON_Original<ApiRsp<T>>(json)!;
}
static async Task<IApiResponse> GetResponseAsync(HttpResponseMessage responseMessage)
@@ -525,11 +525,11 @@ namespace System.Application.Steps
//return await ApiResponse.DeserializeAsync<object>(stream, default);
var json = await responseMessage.Content.ReadAsStringAsync();
return Serializable.DJSON<ApiRsp>(json)!;
return Serializable.DJSON_Original<ApiRsp>(json)!;
}
const string dev_api_base_url = "https://pan.mossimo.net:9911";
const string api_base_url = "https://adminapi.steampp.net";
const string api_base_url = "https://cycyadmin.steampp.net";
const string api_version_create = "/api/version";
static string GetFullVersion(bool dev)
+1 -1
View File
@@ -1,4 +1,4 @@
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000