mirror of
https://github.com/wwiinnddyy/LanMountainDesktop.git
synced 2026-06-20 23:54:26 +08:00
92 lines
2.6 KiB
C#
92 lines
2.6 KiB
C#
|
|
using System.Text.Json;
|
||
|
|
|
||
|
|
namespace LanMountainDesktop.Shared.Contracts.Launcher;
|
||
|
|
|
||
|
|
public enum StartupVisualMode
|
||
|
|
{
|
||
|
|
Fade,
|
||
|
|
StaticSplash,
|
||
|
|
SlideSplash
|
||
|
|
}
|
||
|
|
|
||
|
|
public readonly record struct StartupVisualPreferences(
|
||
|
|
bool EnableFadeTransition,
|
||
|
|
bool EnableSlideTransition)
|
||
|
|
{
|
||
|
|
public static StartupVisualPreferences Default => new(true, false);
|
||
|
|
|
||
|
|
public StartupVisualPreferences Normalize()
|
||
|
|
{
|
||
|
|
if (EnableSlideTransition)
|
||
|
|
{
|
||
|
|
return new StartupVisualPreferences(false, true);
|
||
|
|
}
|
||
|
|
|
||
|
|
return new StartupVisualPreferences(EnableFadeTransition, false);
|
||
|
|
}
|
||
|
|
|
||
|
|
public StartupVisualMode Mode => Normalize() switch
|
||
|
|
{
|
||
|
|
{ EnableSlideTransition: true } => StartupVisualMode.SlideSplash,
|
||
|
|
{ EnableFadeTransition: false } => StartupVisualMode.StaticSplash,
|
||
|
|
_ => StartupVisualMode.Fade
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
public static class StartupVisualPreferencesResolver
|
||
|
|
{
|
||
|
|
public static StartupVisualPreferences Resolve(string? settingsPath = null)
|
||
|
|
{
|
||
|
|
var resolvedPath = string.IsNullOrWhiteSpace(settingsPath)
|
||
|
|
? GetDefaultSettingsPath()
|
||
|
|
: settingsPath!;
|
||
|
|
|
||
|
|
if (!File.Exists(resolvedPath))
|
||
|
|
{
|
||
|
|
return StartupVisualPreferences.Default;
|
||
|
|
}
|
||
|
|
|
||
|
|
try
|
||
|
|
{
|
||
|
|
using var stream = File.OpenRead(resolvedPath);
|
||
|
|
using var document = JsonDocument.Parse(stream);
|
||
|
|
var root = document.RootElement;
|
||
|
|
|
||
|
|
var enableFade = TryGetBoolean(root, "enableFadeTransition") ?? true;
|
||
|
|
var enableSlide = TryGetBoolean(root, "enableSlideTransition") ?? false;
|
||
|
|
return FromFlags(enableFade, enableSlide);
|
||
|
|
}
|
||
|
|
catch
|
||
|
|
{
|
||
|
|
return StartupVisualPreferences.Default;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public static StartupVisualPreferences FromFlags(bool enableFadeTransition, bool enableSlideTransition)
|
||
|
|
{
|
||
|
|
return new StartupVisualPreferences(enableFadeTransition, enableSlideTransition).Normalize();
|
||
|
|
}
|
||
|
|
|
||
|
|
public static string GetDefaultSettingsPath()
|
||
|
|
{
|
||
|
|
var appData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
|
||
|
|
return Path.Combine(appData, "LanMountainDesktop", "settings.json");
|
||
|
|
}
|
||
|
|
|
||
|
|
private static bool? TryGetBoolean(JsonElement root, string propertyName)
|
||
|
|
{
|
||
|
|
if (!root.TryGetProperty(propertyName, out var property))
|
||
|
|
{
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
|
||
|
|
return property.ValueKind switch
|
||
|
|
{
|
||
|
|
JsonValueKind.True => true,
|
||
|
|
JsonValueKind.False => false,
|
||
|
|
JsonValueKind.String when bool.TryParse(property.GetString(), out var value) => value,
|
||
|
|
_ => null
|
||
|
|
};
|
||
|
|
}
|
||
|
|
}
|