diff --git a/FASTER/Models/ArmaMod.cs b/FASTER/Models/ArmaMod.cs index d24a20f..9f3e27a 100644 --- a/FASTER/Models/ArmaMod.cs +++ b/FASTER/Models/ArmaMod.cs @@ -62,8 +62,6 @@ public void AddSteamMod(ArmaMod newMod) public void DeleteSteamMod(uint workshopId) { - - try { var currentProfiles = ReloadMods(); diff --git a/FASTER/ViewModel/ModsViewModel.cs b/FASTER/ViewModel/ModsViewModel.cs index 4070d03..ee8eced 100644 --- a/FASTER/ViewModel/ModsViewModel.cs +++ b/FASTER/ViewModel/ModsViewModel.cs @@ -26,7 +26,7 @@ public ModsViewModel() internal void DisplayMessage(string msg) { - MainWindow.Instance.IFlyout.IsOpen = true; + MainWindow.Instance.IFlyout.IsOpen = true; MainWindow.Instance.IFlyoutMessage.Content = msg; } @@ -62,7 +62,7 @@ public async Task AddSteamMod() var mod = new ArmaMod { WorkshopId = modIDOut, - Path = Path.Combine(Properties.Settings.Default.modStagingDirectory, modID), + Path = Path.Combine(Properties.Settings.Default.modStagingDirectory, modID), IsLocal = false }; @@ -107,7 +107,8 @@ public async Task AddLocalModAsync() continue; } - await Task.Factory.StartNew(() => { + await Task.Factory.StartNew(() => + { Directory.CreateSymbolicLink(newPath, oldPath); var progressDone = oldPaths.IndexOf(oldPath); progress.SetMessage($"Copying mod from {oldPath}\n{progressDone} / {progress.Maximum}"); @@ -164,6 +165,41 @@ internal async Task DeleteAllMods() } } + internal void PurgeAndReinstall(ArmaMod mod) + { + if (mod == null || mod.IsLocal) + return; + + DeleteMod(mod); + ModsCollection.AddSteamMod(mod); + + DisplayMessage($"Purged and reinstalled {mod.Name}"); + } + + internal async Task PurgeAndReinstallAll() + { + var answer = await DialogCoordinator.ShowInputAsync(this, "Are you sure you want to purge and reinstall all mods?", "Write \"yes\" and press OK if you wish to continue."); + + if (string.IsNullOrEmpty(answer) || !answer.Equals("yes")) + return; + + Analytics.TrackEvent("Mods - Clicked PurgeAndReinstallAll", new Dictionary + { + {"Name", Properties.Settings.Default.steamUserName} + }); + + // Stores a copy of the mods that are not local so they can be readded + var copyArmaMods = new List(ModsCollection.ArmaMods.Where(x => !x.IsLocal)); + + foreach (var mod in copyArmaMods) + { + DeleteMod(mod); + ModsCollection.AddSteamMod(mod); + } + + DisplayMessage("Purged and reinstalled all mods"); + } + public void OpenModPage(ArmaMod mod) { if (mod == null) @@ -178,7 +214,7 @@ public void OpenModPage(ArmaMod mod) try { url = url.Replace("&", "^&"); - Process.Start(new ProcessStartInfo("cmd", $"/c start {url}") {CreateNoWindow = true}); + Process.Start(new ProcessStartInfo("cmd", $"/c start {url}") { CreateNoWindow = true }); } catch { DisplayMessage($"Could not open \"{url}\""); } @@ -205,7 +241,7 @@ internal async Task OpenLauncherFile() continue; } - if(!await Task.Run(() => extractedMod.IsOnWorkshop())) + if (!await Task.Run(() => extractedMod.IsOnWorkshop())) continue; ModsCollection.AddSteamMod(extractedMod); @@ -223,7 +259,7 @@ public void OpenModFolder(ArmaMod mod) ProcessStartInfo startInfo = new() { Arguments = mod.Path, - FileName = "explorer.exe" + FileName = "explorer.exe" }; Process.Start(startInfo); @@ -251,7 +287,7 @@ public async Task UpdateAll() MainWindow.Instance.NavigateToConsole(); var ans = await MainWindow.Instance.SteamUpdaterViewModel.RunModsUpdater(ModsCollection.ArmaMods); - if(ans == UpdateState.LoginFailed) + if (ans == UpdateState.LoginFailed) DisplayMessage("Steam Login Failed"); } } diff --git a/FASTER/Views/Mods.xaml b/FASTER/Views/Mods.xaml index ab18255..ab0fdc7 100644 --- a/FASTER/Views/Mods.xaml +++ b/FASTER/Views/Mods.xaml @@ -51,6 +51,9 @@