diff --git a/installer/PSLauncher.iss b/installer/PSLauncher.iss index 2ee832d..3bfb45e 100644 --- a/installer/PSLauncher.iss +++ b/installer/PSLauncher.iss @@ -11,7 +11,7 @@ #define MyAppName "PROSERVE Launcher" #define MyAppShortName "PS_Launcher" -#define MyAppVersion "1.0.12" +#define MyAppVersion "1.0.13" #define MyAppPublisher "ASTERION VR" #define MyAppURL "https://asterionvr.com" #define MyAppExeName "PS_Launcher.exe" diff --git a/src/PSLauncher.App/PSLauncher.App.csproj b/src/PSLauncher.App/PSLauncher.App.csproj index c34c715..c016863 100644 --- a/src/PSLauncher.App/PSLauncher.App.csproj +++ b/src/PSLauncher.App/PSLauncher.App.csproj @@ -18,9 +18,9 @@ PROSERVE Launcher © 2026 ASTERION VR — All rights reserved PSLauncher.App - 1.0.12 - 1.0.12.0 - 1.0.12.0 + 1.0.13 + 1.0.13.0 + 1.0.13.0 true diff --git a/src/PSLauncher.App/ViewModels/MainViewModel.cs b/src/PSLauncher.App/ViewModels/MainViewModel.cs index 21e7b50..600c3e8 100644 --- a/src/PSLauncher.App/ViewModels/MainViewModel.cs +++ b/src/PSLauncher.App/ViewModels/MainViewModel.cs @@ -1186,13 +1186,22 @@ public sealed partial class MainViewModel : ObservableObject try { - // Si on lance la version désignée comme "auto", on passe les CLI args - // configurés (ex: -autoconnect -login=Jerome2 -password=… -ipserver=10.0.4.100). - // Pour les lancements manuels d'autres versions, args = null (comportement standard). + // Composition des CLI args passés à PROSERVE_UE_*.exe : + // 1. _config.DefaultLaunchArgs — appliqués à CHAQUE lancement (auto ou manuel). + // Contenu type : -nosplash, -log, -fps=90. + // 2. _config.AutoMode.Args — appliqués UNIQUEMENT si la version lancée est la + // version auto désignée. Contenu type : -autoconnect, -login=Jerome, + // -password=…, -ipserver=10.0.4.100. + // Concaténation dans cet ordre → Unreal FParse lit dans l'ordre, la dernière + // occurrence d'une clé gagne : les auto args écrasent les default args sur un + // même key (comportement intentionnel : un opérateur peut avoir -fps=90 en + // default et -fps=120 en auto sans conflit). var isAutoVersion = _config.AutoMode.FeatureEnabled && !string.IsNullOrEmpty(_config.AutoMode.SelectedVersion) && string.Equals(_config.AutoMode.SelectedVersion, row.Version, StringComparison.Ordinal); - string[]? cliArgs = isAutoVersion ? BuildAutoModeCliArgs(_config.AutoMode.Args) : null; + var argList = new List(_config.DefaultLaunchArgs); + if (isAutoVersion) argList.AddRange(_config.AutoMode.Args); + string[]? cliArgs = argList.Count > 0 ? BuildAutoModeCliArgs(argList) : null; var proc = _processLauncher.Launch(row.Installed, cliArgs); _runningProserve = proc; diff --git a/src/PSLauncher.App/ViewModels/SettingsViewModel.cs b/src/PSLauncher.App/ViewModels/SettingsViewModel.cs index d33a18a..dbff4f5 100644 --- a/src/PSLauncher.App/ViewModels/SettingsViewModel.cs +++ b/src/PSLauncher.App/ViewModels/SettingsViewModel.cs @@ -129,6 +129,10 @@ public sealed partial class SettingsViewModel : ObservableObject public System.Collections.ObjectModel.ObservableCollection LanDiscoveredPeers { get; } = new(); public bool HasLanDiscoveredPeers => LanDiscoveredPeers.Count > 0; + // ----- Args par défaut (chaque lancement) ----- + /// Args édités dans la UI. Persiste vers _config.DefaultLaunchArgs au Save. + public System.Collections.ObjectModel.ObservableCollection DefaultLaunchArgs { get; } = new(); + // ----- Mode auto ----- [ObservableProperty] private bool _autoModeFeatureEnabled; [ObservableProperty] private int _autoModeGraceSeconds; @@ -276,6 +280,9 @@ public sealed partial class SettingsViewModel : ObservableObject Environment.NewLine, config.SteamVr.ProcessesToKill ?? new List()); + foreach (var a in config.DefaultLaunchArgs ?? new List()) + DefaultLaunchArgs.Add(new AutoModeArgRowViewModel(a.Key, a.Value, RemoveDefaultLaunchArg)); + _autoModeFeatureEnabled = config.AutoMode.FeatureEnabled; _autoModeGraceSeconds = config.AutoMode.GracePeriodSeconds; _autoModeSelectedVersion = config.AutoMode.SelectedVersion ?? string.Empty; @@ -465,6 +472,15 @@ public sealed partial class SettingsViewModel : ObservableObject .Distinct(StringComparer.OrdinalIgnoreCase) .ToList(); + _config.DefaultLaunchArgs = DefaultLaunchArgs + .Select(r => new AutoModeArg + { + Key = (r.Key ?? string.Empty).Trim(), + Value = string.IsNullOrEmpty(r.Value) ? null : r.Value.Trim(), + }) + .Where(a => !string.IsNullOrWhiteSpace(a.Key)) + .ToList(); + _config.AutoMode.FeatureEnabled = AutoModeFeatureEnabled; _config.AutoMode.GracePeriodSeconds = Math.Clamp(AutoModeGraceSeconds, 1, 60); _config.AutoMode.SelectedVersion = string.IsNullOrWhiteSpace(AutoModeSelectedVersion) @@ -1057,6 +1073,19 @@ public sealed partial class SettingsViewModel : ObservableObject } } + // ===================== DEFAULT LAUNCH ARGS ===================== + + [RelayCommand] + private void AddDefaultLaunchArg() + { + DefaultLaunchArgs.Add(new AutoModeArgRowViewModel(string.Empty, null, RemoveDefaultLaunchArg)); + } + + private void RemoveDefaultLaunchArg(AutoModeArgRowViewModel row) + { + DefaultLaunchArgs.Remove(row); + } + // ===================== AUTO MODE ARGS ===================== [RelayCommand] diff --git a/src/PSLauncher.App/Views/SettingsDialog.xaml b/src/PSLauncher.App/Views/SettingsDialog.xaml index 20c4b85..6ca18a3 100644 --- a/src/PSLauncher.App/Views/SettingsDialog.xaml +++ b/src/PSLauncher.App/Views/SettingsDialog.xaml @@ -696,6 +696,68 @@ + + + + + + + + + + + + + + + + + + +