Relocate app data and package build output
Adds a new `AppPaths` helper and moves runtime/user-generated files (`init.config`, `custom_set.txt`, cache, WebView2 data) into `%LocalAppData%\Lithium` with readable fallback to portable files. WebView2 initialization now sets a loader DLL path, uses an explicit user data folder, and surfaces runtime-missing errors. The build/publish pipeline is updated to emit a clean `Build\` layout with dependencies under `lib\`, remove duplicate root DLL/docs, and align probing/runtime settings for net48 x64 output. Supporting updates include ignore rules for build/runtime artifacts, refreshed agent build/release docs, and endpoint URL/domain updates.
This commit is contained in:
+14
@@ -17,6 +17,9 @@
|
|||||||
mono_crash.*
|
mono_crash.*
|
||||||
|
|
||||||
# Build results
|
# Build results
|
||||||
|
[Bb]in/
|
||||||
|
[Oo]bj/
|
||||||
|
[Bb]uild/
|
||||||
[Dd]ebug/
|
[Dd]ebug/
|
||||||
[Dd]ebugPublic/
|
[Dd]ebugPublic/
|
||||||
[Rr]elease/
|
[Rr]elease/
|
||||||
@@ -228,6 +231,17 @@ _pkginfo.txt
|
|||||||
# but keep track of directories ending in .cache
|
# but keep track of directories ending in .cache
|
||||||
!?*.[Cc]ache/
|
!?*.[Cc]ache/
|
||||||
|
|
||||||
|
# Runtime-generated application data
|
||||||
|
*.exe.WebView2/
|
||||||
|
|
||||||
|
# Local release archives
|
||||||
|
*.7z
|
||||||
|
*.zip
|
||||||
|
|
||||||
|
# Local Claude Code and VS Code settings
|
||||||
|
.claude/
|
||||||
|
.vscode/
|
||||||
|
|
||||||
# Others
|
# Others
|
||||||
ClientBin/
|
ClientBin/
|
||||||
~$*
|
~$*
|
||||||
|
|||||||
@@ -3,15 +3,24 @@
|
|||||||
## Prerequisites
|
## Prerequisites
|
||||||
- Git remote: `https://git.scpsmp.site/JJ/Lithium.git`
|
- Git remote: `https://git.scpsmp.site/JJ/Lithium.git`
|
||||||
- Auth: OAuth token stored in Windows Credential Manager (via git)
|
- Auth: OAuth token stored in Windows Credential Manager (via git)
|
||||||
- MSBuild: `& "C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Current\Bin\MSBuild.exe"`
|
- Visual Studio 2022 or newer with the .NET desktop development workload
|
||||||
|
- NuGet package restore enabled
|
||||||
|
- .NET Framework 4.8 Developer Pack for building
|
||||||
|
- Microsoft Edge WebView2 Runtime for the Website tab at runtime
|
||||||
|
|
||||||
## Build
|
## Build
|
||||||
```powershell
|
```powershell
|
||||||
# Kill running process first
|
# Kill running process first
|
||||||
Stop-Process -Name "Lithium" -ErrorAction SilentlyContinue
|
Stop-Process -Name "Lithium" -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
# Compile Release build
|
# Locate MSBuild, restore packages, and compile the Release build
|
||||||
& "C:\Program Files\Microsoft Visual Studio\2022\Community\Msbuild\Current\Bin\MSBuild.exe" /t:rebuild /p:Configuration=Release /p:Platform="x64"
|
$msbuild = & "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe | Select-Object -First 1
|
||||||
|
& $msbuild Lithium.sln /t:Restore,Rebuild /p:Configuration=Release /p:Platform="x64"
|
||||||
|
|
||||||
|
# Create the clean file-deployment layout under Build\.
|
||||||
|
& $msbuild Lithium\Lithium.csproj /t:Publish /p:Configuration=Release /p:Platform="x64"
|
||||||
|
|
||||||
|
# Keep Lithium.exe, Lithium.exe.config, and the complete lib directory together.
|
||||||
```
|
```
|
||||||
|
|
||||||
## Stage & Commit
|
## Stage & Commit
|
||||||
@@ -44,9 +53,12 @@ git push origin $version
|
|||||||
$cred = "protocol=https`nhost=git.scpsmp.site`n`n" | git credential fill
|
$cred = "protocol=https`nhost=git.scpsmp.site`n`n" | git credential fill
|
||||||
$token = ($cred -split "`n" | Where-Object { $_ -like "password=*" }) -replace "password=",""
|
$token = ($cred -split "`n" | Where-Object { $_ -like "password=*" }) -replace "password=",""
|
||||||
|
|
||||||
# 7z build output (x64/Release)
|
# Archive the published x64 Release output; run from anywhere inside the repository
|
||||||
$archivePath = "D:\Lithium\Lithium-$version.7z"
|
$repoRoot = (git rev-parse --show-toplevel).Trim()
|
||||||
& "C:\Program Files\7-Zip\7z.exe" a -mx=9 "$archivePath" "D:\Lithium\Lithium\bin\x64\Release\*"
|
$archivePath = Join-Path $repoRoot "Lithium-$version.7z"
|
||||||
|
$releaseOutput = Join-Path $repoRoot "Build\*"
|
||||||
|
$sevenZip = (Get-Command 7z.exe -ErrorAction Stop).Source
|
||||||
|
& $sevenZip a -mx=9 "$archivePath" "$releaseOutput"
|
||||||
|
|
||||||
# Create release via Gitea API
|
# Create release via Gitea API
|
||||||
$body = @"
|
$body = @"
|
||||||
@@ -63,7 +75,7 @@ curl.exe -s -X POST "https://git.scpsmp.site/api/v1/repos/JJ/Lithium/releases/$r
|
|||||||
## Post-Release Cleanup
|
## Post-Release Cleanup
|
||||||
```powershell
|
```powershell
|
||||||
# Delete the local archive after successful upload
|
# Delete the local archive after successful upload
|
||||||
Remove-Item -LiteralPath "D:\Lithium\Lithium-$version.7z" -Force
|
Remove-Item -LiteralPath "$archivePath" -Force
|
||||||
Remove-Item -LiteralPath "$env:TEMP\release.json" -Force
|
Remove-Item -LiteralPath "$env:TEMP\release.json" -Force
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -72,4 +84,4 @@ Remove-Item -LiteralPath "$env:TEMP\release.json" -Force
|
|||||||
- Tag naming scheme: `0.01`, `0.02`, `0.03`, etc. (not `v1.0.0`)
|
- Tag naming scheme: `0.01`, `0.02`, `0.03`, etc. (not `v1.0.0`)
|
||||||
- Release naming scheme: `0.XX @ Lithium`
|
- Release naming scheme: `0.XX @ Lithium`
|
||||||
- Use PATCH to edit existing release tag via API if you mess up the tag name
|
- Use PATCH to edit existing release tag via API if you mess up the tag name
|
||||||
- 7-Zip located at `C:\Program Files\NVIDIA Corporation\NVIDIA app\7z.exe` (or `C:\Program Files\7-Zip\7z.exe` if installed separately)
|
- Add `7z.exe` to `PATH` before running the release archive command
|
||||||
|
|||||||
+10
-7
@@ -1,8 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<configuration>
|
<configuration>
|
||||||
<runtime>
|
<startup useLegacyV2RuntimeActivationPolicy="true">
|
||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
|
||||||
<probing privatePath="lib;dependencies;bin" />
|
</startup>
|
||||||
</assemblyBinding>
|
<runtime>
|
||||||
</runtime>
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
</configuration>
|
<probing privatePath="lib" />
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
</configuration>
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
<package id="System.Memory" version="4.6.3" targetFramework="net48" />
|
<package id="System.Memory" version="4.6.3" targetFramework="net48" />
|
||||||
<package id="System.Numerics.Vectors" version="4.6.1" targetFramework="net48" />
|
<package id="System.Numerics.Vectors" version="4.6.1" targetFramework="net48" />
|
||||||
<package id="System.Runtime.CompilerServices.Unsafe" version="6.1.2" targetFramework="net48" />
|
<package id="System.Runtime.CompilerServices.Unsafe" version="6.1.2" targetFramework="net48" />
|
||||||
<package id="System.Speech" version="10.0.0" targetFramework="net48" />
|
|
||||||
<package id="System.Text.Encodings.Web" version="10.0.0" targetFramework="net48" />
|
<package id="System.Text.Encodings.Web" version="10.0.0" targetFramework="net48" />
|
||||||
<package id="System.Text.Json" version="10.0.0" targetFramework="net48" />
|
<package id="System.Text.Json" version="10.0.0" targetFramework="net48" />
|
||||||
<package id="System.Threading.Tasks.Extensions" version="4.6.3" targetFramework="net48" />
|
<package id="System.Threading.Tasks.Extensions" version="4.6.3" targetFramework="net48" />
|
||||||
|
|||||||
@@ -0,0 +1,55 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace Lua
|
||||||
|
{
|
||||||
|
internal static class AppPaths
|
||||||
|
{
|
||||||
|
private const string ApplicationDirectoryName = "Lithium";
|
||||||
|
|
||||||
|
public static string ExecutableDirectory => AppDomain.CurrentDomain.BaseDirectory;
|
||||||
|
|
||||||
|
public static string UserDataDirectory => Path.Combine(
|
||||||
|
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
|
||||||
|
ApplicationDirectoryName);
|
||||||
|
|
||||||
|
public static string WebViewUserDataDirectory => Path.Combine(UserDataDirectory, "WebView2");
|
||||||
|
|
||||||
|
public static string WebViewLoaderDirectory => Path.Combine(
|
||||||
|
ExecutableDirectory,
|
||||||
|
"lib",
|
||||||
|
"runtimes",
|
||||||
|
GetRuntimeIdentifier(),
|
||||||
|
"native");
|
||||||
|
|
||||||
|
private static string GetRuntimeIdentifier()
|
||||||
|
{
|
||||||
|
switch (RuntimeInformation.ProcessArchitecture)
|
||||||
|
{
|
||||||
|
case Architecture.X64:
|
||||||
|
return "win-x64";
|
||||||
|
case Architecture.Arm64:
|
||||||
|
return "win-arm64";
|
||||||
|
default:
|
||||||
|
return "win-x86";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string GetUserFilePath(string fileName)
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(UserDataDirectory);
|
||||||
|
return Path.Combine(UserDataDirectory, fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string GetReadableFilePath(string fileName)
|
||||||
|
{
|
||||||
|
string userPath = Path.Combine(UserDataDirectory, fileName);
|
||||||
|
if (File.Exists(userPath))
|
||||||
|
return userPath;
|
||||||
|
|
||||||
|
string portablePath = Path.Combine(ExecutableDirectory, fileName);
|
||||||
|
return File.Exists(portablePath) ? portablePath : null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -72,9 +72,10 @@ namespace Lua
|
|||||||
SetConsoleColor();
|
SetConsoleColor();
|
||||||
|
|
||||||
// AA0019
|
// AA0019
|
||||||
if (!File.Exists("init.config")) return;
|
string configPath = AppPaths.GetReadableFilePath("init.config");
|
||||||
|
if (configPath == null) return;
|
||||||
|
|
||||||
var lines = Helper.ReadLinesSafe("init.config");
|
var lines = Helper.ReadLinesSafe(configPath);
|
||||||
|
|
||||||
// AA0020
|
// AA0020
|
||||||
foreach (var raw in lines)
|
foreach (var raw in lines)
|
||||||
|
|||||||
+30
-17
@@ -16,7 +16,7 @@
|
|||||||
<Deterministic>true</Deterministic>
|
<Deterministic>true</Deterministic>
|
||||||
<NuGetPackageImportStamp>
|
<NuGetPackageImportStamp>
|
||||||
</NuGetPackageImportStamp>
|
</NuGetPackageImportStamp>
|
||||||
<PublishUrl>publish\</PublishUrl>
|
<PublishUrl>..\Build\</PublishUrl>
|
||||||
<Install>true</Install>
|
<Install>true</Install>
|
||||||
<InstallFrom>Disk</InstallFrom>
|
<InstallFrom>Disk</InstallFrom>
|
||||||
<UpdateEnabled>false</UpdateEnabled>
|
<UpdateEnabled>false</UpdateEnabled>
|
||||||
@@ -62,7 +62,7 @@
|
|||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<LangVersion>7.3</LangVersion>
|
<LangVersion>7.3</LangVersion>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<Prefer32Bit>true</Prefer32Bit>
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||||
<OutputPath>bin\x64\Release\</OutputPath>
|
<OutputPath>bin\x64\Release\</OutputPath>
|
||||||
@@ -72,7 +72,7 @@
|
|||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<LangVersion>7.3</LangVersion>
|
<LangVersion>7.3</LangVersion>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<Prefer32Bit>true</Prefer32Bit>
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
@@ -96,7 +96,6 @@
|
|||||||
<Reference Include="System.IO, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
<Reference Include="System.IO, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.IO.4.3.0\lib\net462\System.IO.dll</HintPath>
|
<HintPath>..\packages\System.IO.4.3.0\lib\net462\System.IO.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.IO.Pipelines, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="System.IO.Pipelines, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.IO.Pipelines.10.0.0\lib\net462\System.IO.Pipelines.dll</HintPath>
|
<HintPath>..\packages\System.IO.Pipelines.10.0.0\lib\net462\System.IO.Pipelines.dll</HintPath>
|
||||||
@@ -107,7 +106,6 @@
|
|||||||
<Reference Include="System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
<Reference Include="System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll</HintPath>
|
<HintPath>..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Numerics" />
|
<Reference Include="System.Numerics" />
|
||||||
<Reference Include="System.Numerics.Vectors, Version=4.1.6.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
<Reference Include="System.Numerics.Vectors, Version=4.1.6.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
@@ -116,7 +114,6 @@
|
|||||||
<Reference Include="System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
<Reference Include="System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll</HintPath>
|
<HintPath>..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.1.2\lib\net462\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.1.2\lib\net462\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
||||||
@@ -124,22 +121,18 @@
|
|||||||
<Reference Include="System.Security.Cryptography.Algorithms, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
<Reference Include="System.Security.Cryptography.Algorithms, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net463\System.Security.Cryptography.Algorithms.dll</HintPath>
|
<HintPath>..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net463\System.Security.Cryptography.Algorithms.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Security.Cryptography.Encoding, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
<Reference Include="System.Security.Cryptography.Encoding, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll</HintPath>
|
<HintPath>..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
<Reference Include="System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll</HintPath>
|
<HintPath>..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Security.Cryptography.X509Certificates, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
<Reference Include="System.Security.Cryptography.X509Certificates, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll</HintPath>
|
<HintPath>..\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Speech" />
|
<Reference Include="System.Speech" />
|
||||||
<Reference Include="System.Text.Encodings.Web, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="System.Text.Encodings.Web, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
@@ -168,6 +161,7 @@
|
|||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</ApplicationDefinition>
|
</ApplicationDefinition>
|
||||||
|
<Compile Include="AppPaths.cs" />
|
||||||
<Compile Include="HotkeyHandler.cs" />
|
<Compile Include="HotkeyHandler.cs" />
|
||||||
<Compile Include="RecoilEngine.cs" />
|
<Compile Include="RecoilEngine.cs" />
|
||||||
<Compile Include="Utils.cs" />
|
<Compile Include="Utils.cs" />
|
||||||
@@ -238,16 +232,35 @@
|
|||||||
<Error Condition="!Exists('..\packages\System.ValueTuple.4.6.1\build\net471\System.ValueTuple.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\System.ValueTuple.4.6.1\build\net471\System.ValueTuple.targets'))" />
|
<Error Condition="!Exists('..\packages\System.ValueTuple.4.6.1\build\net471\System.ValueTuple.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\System.ValueTuple.4.6.1\build\net471\System.ValueTuple.targets'))" />
|
||||||
</Target>
|
</Target>
|
||||||
<Import Project="..\packages\System.ValueTuple.4.6.1\build\net471\System.ValueTuple.targets" Condition="Exists('..\packages\System.ValueTuple.4.6.1\build\net471\System.ValueTuple.targets')" />
|
<Import Project="..\packages\System.ValueTuple.4.6.1\build\net471\System.ValueTuple.targets" Condition="Exists('..\packages\System.ValueTuple.4.6.1\build\net471\System.ValueTuple.targets')" />
|
||||||
<ItemGroup>
|
|
||||||
<!-- Include all referenced DLLs -->
|
|
||||||
<ReferenceCopyLocalPaths Include="@(ReferencePath)" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Resource Include="A1\a23ae8c4c6863364165637fb70679eb3.ico" />
|
<Resource Include="A1\a23ae8c4c6863364165637fb70679eb3.ico" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Target Name="CopyDllsToLib" AfterTargets="Build">
|
<Target Name="ClearGeneratedLib" BeforeTargets="CopyFilesToOutputDirectory">
|
||||||
<MakeDir Directories="$(OutputPath)lib" />
|
<RemoveDir Directories="$(TargetDir)lib" Condition="Exists('$(TargetDir)lib')" />
|
||||||
<Copy SourceFiles="@(ReferenceCopyLocalPaths)" DestinationFolder="$(OutputPath)lib" SkipUnchangedFiles="true" />
|
</Target>
|
||||||
|
<Target Name="OrganizeBuildOutput" AfterTargets="CopyFilesToOutputDirectory">
|
||||||
|
<ItemGroup>
|
||||||
|
<ManagedDependencies Include="@(ReferenceCopyLocalPaths)" Condition="'%(Extension)' == '.dll'" />
|
||||||
|
<DependencyDocumentation Include="@(ReferenceCopyLocalPaths)" Condition="'%(Extension)' == '.xml'" />
|
||||||
|
<WebViewNativeFiles Include="$(TargetDir)runtimes\**\*" />
|
||||||
|
</ItemGroup>
|
||||||
|
<MakeDir Directories="$(TargetDir)lib" />
|
||||||
|
<Copy SourceFiles="@(ManagedDependencies)" DestinationFolder="$(TargetDir)lib" SkipUnchangedFiles="true" />
|
||||||
|
<Copy SourceFiles="@(WebViewNativeFiles)" DestinationFiles="@(WebViewNativeFiles->'$(TargetDir)lib\runtimes\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="true" Condition="'@(WebViewNativeFiles)' != ''" />
|
||||||
|
<Delete Files="@(ManagedDependencies->'$(TargetDir)%(Filename)%(Extension)');@(DependencyDocumentation->'$(TargetDir)%(Filename)%(Extension)')" />
|
||||||
|
<Delete Files="$(TargetDir)$(TargetName).pdb" Condition="'$(Configuration)' == 'Release' and Exists('$(TargetDir)$(TargetName).pdb')" />
|
||||||
|
<RemoveDir Directories="$(TargetDir)runtimes" Condition="Exists('$(TargetDir)runtimes')" />
|
||||||
|
</Target>
|
||||||
|
<Target Name="OrganizePublishOutput" AfterTargets="PublishOnly">
|
||||||
|
<ItemGroup>
|
||||||
|
<PublishRootFiles Include="$(TargetPath)" />
|
||||||
|
<PublishRootFiles Include="$(TargetPath).config" Condition="Exists('$(TargetPath).config')" />
|
||||||
|
<PublishLibFiles Include="$(TargetDir)lib\**\*" />
|
||||||
|
</ItemGroup>
|
||||||
|
<RemoveDir Directories="$(PublishUrl)" Condition="Exists('$(PublishUrl)')" />
|
||||||
|
<MakeDir Directories="$(PublishUrl)lib" />
|
||||||
|
<Copy SourceFiles="@(PublishRootFiles)" DestinationFolder="$(PublishUrl)" SkipUnchangedFiles="true" />
|
||||||
|
<Copy SourceFiles="@(PublishLibFiles)" DestinationFiles="@(PublishLibFiles->'$(PublishUrl)lib\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="true" />
|
||||||
</Target>
|
</Target>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<PreBuildEvent>
|
<PreBuildEvent>
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ using System.Net.Http;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
using Microsoft.Web.WebView2.Core;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
@@ -43,9 +44,7 @@ namespace Lithium
|
|||||||
);
|
);
|
||||||
|
|
||||||
// AA0116
|
// AA0116
|
||||||
Browser.Source = !string.IsNullOrEmpty(OperatorSets.ConfigExportUrl)
|
InitializeBrowser();
|
||||||
? new Uri(OperatorSets.ConfigExportUrl)
|
|
||||||
: new Uri("https://jj.giggity.gay/exindex.html");
|
|
||||||
|
|
||||||
// AA0117
|
// AA0117
|
||||||
LoadSettingsToUI();
|
LoadSettingsToUI();
|
||||||
@@ -77,6 +76,31 @@ namespace Lithium
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async void InitializeBrowser()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
CoreWebView2Environment.SetLoaderDllFolderPath(AppPaths.WebViewLoaderDirectory);
|
||||||
|
Directory.CreateDirectory(AppPaths.WebViewUserDataDirectory);
|
||||||
|
|
||||||
|
var environment = await CoreWebView2Environment.CreateAsync(
|
||||||
|
userDataFolder: AppPaths.WebViewUserDataDirectory);
|
||||||
|
await Browser.EnsureCoreWebView2Async(environment);
|
||||||
|
|
||||||
|
Browser.Source = !string.IsNullOrEmpty(OperatorSets.ConfigExportUrl)
|
||||||
|
? new Uri(OperatorSets.ConfigExportUrl)
|
||||||
|
: new Uri("https://jj.scpsmp.site/exindex.html");
|
||||||
|
}
|
||||||
|
catch (WebView2RuntimeNotFoundException)
|
||||||
|
{
|
||||||
|
AppendConsole("WebView2 Runtime is not installed. The Website tab is unavailable.");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
AppendConsole($"Website initialization failed: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// AA0118
|
// AA0118
|
||||||
private Thread StartThread(ThreadStart action)
|
private Thread StartThread(ThreadStart action)
|
||||||
{
|
{
|
||||||
@@ -184,7 +208,7 @@ namespace Lithium
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
string configPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "init.config");
|
string configPath = AppPaths.GetUserFilePath("init.config");
|
||||||
File.WriteAllText(configPath, configContent);
|
File.WriteAllText(configPath, configContent);
|
||||||
|
|
||||||
// AA0129
|
// AA0129
|
||||||
@@ -516,7 +540,7 @@ namespace Lithium
|
|||||||
string json = JsonSerializer.Serialize(payload);
|
string json = JsonSerializer.Serialize(payload);
|
||||||
|
|
||||||
var response = await client.PostAsync(
|
var response = await client.PostAsync(
|
||||||
"https://jj.giggity.gay/api/global/add",
|
"https://jj.scpsmp.site/api/global/add",
|
||||||
new StringContent(json, Encoding.UTF8, "application/json")
|
new StringContent(json, Encoding.UTF8, "application/json")
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -541,7 +565,7 @@ namespace Lithium
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string customSetPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "custom_set.txt");
|
string customSetPath = AppPaths.GetUserFilePath("custom_set.txt");
|
||||||
File.WriteAllText(
|
File.WriteAllText(
|
||||||
customSetPath,
|
customSetPath,
|
||||||
$"{OperatorNameTextBox.Text}|{RecoilXTextBox.Text}|{RecoilYTextBox.Text}|{(AttackerRadioButton.IsChecked == true ? "attacker" : "defender")}"
|
$"{OperatorNameTextBox.Text}|{RecoilXTextBox.Text}|{RecoilYTextBox.Text}|{(AttackerRadioButton.IsChecked == true ? "attacker" : "defender")}"
|
||||||
@@ -568,9 +592,9 @@ namespace Lithium
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string customSetPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "custom_set.txt");
|
string customSetPath = AppPaths.GetReadableFilePath("custom_set.txt");
|
||||||
|
|
||||||
if (!File.Exists(customSetPath))
|
if (customSetPath == null)
|
||||||
{
|
{
|
||||||
UpdateCustomSetConsole("No saved set found");
|
UpdateCustomSetConsole("No saved set found");
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -41,14 +41,9 @@ namespace Lua
|
|||||||
Timeout = System.TimeSpan.FromSeconds(10)
|
Timeout = System.TimeSpan.FromSeconds(10)
|
||||||
};
|
};
|
||||||
|
|
||||||
private static string CacheDirectory =>
|
private static string CacheDirectory => AppPaths.UserDataDirectory;
|
||||||
System.IO.Path.Combine(
|
|
||||||
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
|
|
||||||
"coax"
|
|
||||||
);
|
|
||||||
|
|
||||||
private static string CacheFile =>
|
private static string CacheFile => System.IO.Path.Combine(CacheDirectory, "config_cache.txt");
|
||||||
System.IO.Path.Combine(CacheDirectory, "config_cache.txt");
|
|
||||||
|
|
||||||
|
|
||||||
// AA0059
|
// AA0059
|
||||||
@@ -118,7 +113,7 @@ namespace Lua
|
|||||||
var allLines = new List<string>();
|
var allLines = new List<string>();
|
||||||
bool loadedOnline = false;
|
bool loadedOnline = false;
|
||||||
|
|
||||||
// Ensure coax folder exists (with proper error handling)
|
// Ensure the per-user cache folder exists (with proper error handling)
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (!System.IO.Directory.Exists(CacheDirectory))
|
if (!System.IO.Directory.Exists(CacheDirectory))
|
||||||
@@ -184,7 +179,10 @@ namespace Lua
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Also load config.txt (local overrides)
|
// Also load config.txt (local overrides)
|
||||||
var local = Helper.ReadLinesSafe("config.txt");
|
string localConfigPath = AppPaths.GetReadableFilePath("config.txt");
|
||||||
|
var local = localConfigPath == null
|
||||||
|
? Array.Empty<string>()
|
||||||
|
: Helper.ReadLinesSafe(localConfigPath);
|
||||||
if (local.Length > 0)
|
if (local.Length > 0)
|
||||||
allLines.AddRange(local);
|
allLines.AddRange(local);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user