diff --git a/Saradomin/Infrastructure/Services/ClientLaunchService.cs b/Saradomin/Infrastructure/Services/ClientLaunchService.cs index aec4c0a..cf74cac 100644 --- a/Saradomin/Infrastructure/Services/ClientLaunchService.cs +++ b/Saradomin/Infrastructure/Services/ClientLaunchService.cs @@ -34,7 +34,7 @@ namespace Saradomin.Infrastructure.Services StartInfo = new(_settingsService.Launcher.JavaExecutableLocation) { Arguments = $"-jar {scl} {_clientUpdateService.PreferredTargetFilePath}", - WorkingDirectory = CrossPlatform.Locate2009scapeHome(), + WorkingDirectory = _settingsService.Launcher.InstallationDirectory, UseShellExecute = true, WindowStyle = ProcessWindowStyle.Hidden } diff --git a/Saradomin/Infrastructure/Services/ClientUpdateService.cs b/Saradomin/Infrastructure/Services/ClientUpdateService.cs index 16efa00..92c2be0 100644 --- a/Saradomin/Infrastructure/Services/ClientUpdateService.cs +++ b/Saradomin/Infrastructure/Services/ClientUpdateService.cs @@ -50,8 +50,8 @@ namespace Saradomin.Infrastructure.Services public string PreferredTargetFilePath => _settingsService.Launcher.ClientProfile == LauncherSettings.ClientReleaseProfile.Experimental - ? CrossPlatform.Locate2009scapeExperimentalExecutable() - : CrossPlatform.Locate2009scapeLegacyExecutable(); + ? CrossPlatform.Locate2009scapeExperimentalExecutable(_settingsService.Launcher.InstallationDirectory) + : CrossPlatform.Locate2009scapeLegacyExecutable(_settingsService.Launcher.InstallationDirectory); public event EventHandler DownloadProgressChanged; diff --git a/Saradomin/Infrastructure/Services/SettingsService.cs b/Saradomin/Infrastructure/Services/SettingsService.cs index a2db0c3..4585f84 100644 --- a/Saradomin/Infrastructure/Services/SettingsService.cs +++ b/Saradomin/Infrastructure/Services/SettingsService.cs @@ -11,13 +11,11 @@ namespace Saradomin.Infrastructure.Services public LauncherSettings Launcher { get; private set; } = new(); public ClientSettings Client { get; private set; } = new(); - private string ConfigDirectory { get; } = CrossPlatform.Locate2009scapeHome(); - private string ClientSettingsPath - => Path.Combine(ConfigDirectory, ClientSettings.FileName); + => Path.Combine(Launcher.InstallationDirectory, ClientSettings.FileName); private string LauncherSettingsPath - => Path.Combine(ConfigDirectory, LauncherSettings.FileName); + => Path.Combine(CrossPlatform.LocateSaradominHome(), LauncherSettings.FileName); public SettingsService() { @@ -32,8 +30,7 @@ namespace Saradomin.Infrastructure.Services private void TryReadConfigurationData() { - if (!Directory.Exists(CrossPlatform.Locate2009scapeHome())) - Directory.CreateDirectory(CrossPlatform.Locate2009scapeHome()); + Directory.CreateDirectory(CrossPlatform.LocateSaradominHome()); if (File.Exists(LauncherSettingsPath)) { @@ -47,6 +44,7 @@ namespace Saradomin.Infrastructure.Services SaveLauncherSettings(); } + Directory.CreateDirectory(Launcher!.InstallationDirectory); if (File.Exists(ClientSettingsPath)) { using (var stream = File.OpenRead(ClientSettingsPath)) @@ -72,7 +70,7 @@ namespace Saradomin.Infrastructure.Services } private void SaveClientSettings() - { + { File.WriteAllText( ClientSettingsPath, JsonSerializer.Serialize(Client, new JsonSerializerOptions diff --git a/Saradomin/Model/Settings/Launcher/LauncherSettings.cs b/Saradomin/Model/Settings/Launcher/LauncherSettings.cs index 852f94f..467132e 100644 --- a/Saradomin/Model/Settings/Launcher/LauncherSettings.cs +++ b/Saradomin/Model/Settings/Launcher/LauncherSettings.cs @@ -1,5 +1,6 @@ using System.ComponentModel; using System.Runtime.InteropServices; +using Saradomin.Utilities; namespace Saradomin.Model.Settings.Launcher { @@ -26,6 +27,8 @@ namespace Saradomin.Model.Settings.Launcher public string UserFriendlySongName { get; set; } = "Scape Main"; public string JavaExecutableLocation { get; set; } + public string InstallationDirectory { get; set; } = CrossPlatform.LocateDefault2009scapeHome(); + public ClientReleaseProfile ClientProfile { get; set; } = RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ? ClientReleaseProfile.Experimental : ClientReleaseProfile.Legacy; protected override void OnSettingsModified(string propertyName) diff --git a/Saradomin/Saradomin.csproj b/Saradomin/Saradomin.csproj index 4bc73bf..1251746 100644 --- a/Saradomin/Saradomin.csproj +++ b/Saradomin/Saradomin.csproj @@ -2,7 +2,7 @@ WinExe net6.0 - 1.3.1 + 1.4.0-dev diff --git a/Saradomin/Utilities/CrossPlatform.cs b/Saradomin/Utilities/CrossPlatform.cs index 4f0fdc2..6baf335 100644 --- a/Saradomin/Utilities/CrossPlatform.cs +++ b/Saradomin/Utilities/CrossPlatform.cs @@ -122,14 +122,24 @@ namespace Saradomin.Utilities } } - public static string Locate2009scapeHome() + public static string LocateUnixUserHome() + { + return Environment.GetEnvironmentVariable("XDG_DATA_HOME") + ?? Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), + ".local", + "share" + ); + } + + public static string LocateDefault2009scapeHome() { if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || RuntimeInformation.IsOSPlatform(OSPlatform.FreeBSD)) { return Path.Combine( // Get the XDG_DATA_HOME environment variable, or if it doesn't exist, use the default ~/.local/share - Environment.GetEnvironmentVariable("XDG_DATA_HOME") ?? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".local", "share"), + LocateUnixUserHome(), "2009scape" ); } @@ -141,20 +151,43 @@ namespace Saradomin.Utilities ); } } - - public static string Locate2009scapeLegacyExecutable() + + public static string LocateSaradominHome() { - return Path.Combine(Locate2009scapeHome(), "2009scape.jar"); + if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) + || RuntimeInformation.IsOSPlatform(OSPlatform.FreeBSD)) + { + return Path.Combine( + // Get the XDG_DATA_HOME environment variable, or if it doesn't exist, use the default ~/.local/share + LocateUnixUserHome(), + "saradomin" + ); + } + else + { + return Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), + "saradomin" + ); + } } - public static string Locate2009scapeExperimentalExecutable() + public static string Locate2009scapeLegacyExecutable(string baseDirectory) { - return Path.Combine(Locate2009scapeHome(), "2009scape_pazaz.jar"); + baseDirectory ??= LocateDefault2009scapeHome(); + return Path.Combine(baseDirectory, "2009scape.jar"); + } + + public static string Locate2009scapeExperimentalExecutable(string baseDirectory) + { + baseDirectory ??= LocateDefault2009scapeHome(); + return Path.Combine(baseDirectory, "2009scape_pazaz.jar"); } - public static string LocateServerProfilesPath() + public static string LocateServerProfilesPath(string baseDirectory) { - return Path.Combine(Locate2009scapeHome(), "server_profiles.json"); + baseDirectory ??= LocateDefault2009scapeHome(); + return Path.Combine(baseDirectory, "server_profiles.json"); } } } \ No newline at end of file diff --git a/Saradomin/View/Controls/SettingsView.axaml b/Saradomin/View/Controls/SettingsView.axaml index 1a7a421..9a62c94 100644 --- a/Saradomin/View/Controls/SettingsView.axaml +++ b/Saradomin/View/Controls/SettingsView.axaml @@ -1,24 +1,24 @@ - - + + DockPanel.Dock="Top" + Header="graphics settings"> + VerticalAlignment="Center" + Orientation="Vertical"> @@ -28,101 +28,96 @@ + RowDefinitions="Auto,Auto,Auto"> + Text="Anti-aliasing quality" /> - + DockPanel.Dock="Top" + Header="right-click menu settings"> + + Margin="0,0,4,0" + Orientation="Vertical"> + IsChecked="{Binding Client.Customization.RightClickMenu.Styles.UseRuneScape3Border, Mode=TwoWay}" /> - + Header="Background color" + TargetColor="{Binding Client.Customization.RightClickMenu.Background.BackgroundColor, Mode=TwoWay}" /> - + Header="Title bar color" + TargetColor="{Binding Client.Customization.RightClickMenu.TitleBar.BackgroundColor, Mode=TwoWay}" /> - + Header="Title text color" + TargetColor="{Binding Client.Customization.RightClickMenu.TitleBar.ForegroundColor, Mode=TwoWay}" /> - + Header="Border color" + TargetColor="{Binding Client.Customization.RightClickMenu.Border.BackgroundColor, Mode=TwoWay}" /> - + BorderBrush="{StaticResource DarkBorderBrush}" + BorderThickness="1"> - + Margin="1" + Source="avares://Saradomin/Resources/Images/previewbg.png" + Stretch="Fill" /> + UseRs3Border="{Binding Client.Customization.RightClickMenu.Styles.UseRuneScape3Border}" /> -