/// <summary> /// Deploy a single mod /// </summary> /// <param name="mod"></param> public void DeployMod(DeploymentMod mod) { Analytics.TrackEvent("Deployment - Clicked DeployMod", new Dictionary <string, string> { { "Name", Settings.Default.steamUserName }, { "Mod", mod.Name } }); if (!Directory.Exists(Deployment.InstallPath)) { DisplayMessage("Arma Install Path is empty.\nMake sure you have entered a valid path before deploying mods."); return; } mod.Marked = !mod.Marked; var linkPath = Path.Combine(Deployment.InstallPath, $"@{Functions.SafeName(mod.Name)}"); if (mod.Marked) { //LINK MOD LinkMod(mod, linkPath); } else { //UNLINK MOD var links = Directory.EnumerateDirectories(Deployment.InstallPath).Select(d => new DirectoryInfo(d)).Where(d => d.Attributes.HasFlag(FileAttributes.ReparsePoint)); if (links.Any(l => l.Name == $"@{Functions.SafeName(mod.Name)}")) { DeleteLink(linkPath); } } Settings.Default.Deployments = Deployment; Settings.Default.Save(); }
/// <summary> /// Open a steam mod's page /// </summary> /// <param name="mod"></param> public void OpenModPage(DeploymentMod mod) { if (mod == null) { return; } var url = "https://steamcommunity.com/workshop/filedetails/?id=" + mod.WorkshopId; try { Process.Start(url); } catch { try { url = url.Replace("&", "^&"); Process.Start(new ProcessStartInfo("cmd", $"/c start {url}") { CreateNoWindow = true }); } catch { DisplayMessage($"Could not open \"{url}\""); } } }
/// <summary> /// Create a specific Symlink /// </summary> /// <param name="mod"></param> /// <param name="linkPath"></param> private void LinkMod(DeploymentMod mod, string linkPath) { try { if (Directory.Exists(linkPath)) { Directory.Delete(linkPath, true); } Directory.CreateSymbolicLink(linkPath ?? throw new ArgumentNullException(nameof(linkPath)), mod.Path); } catch (Exception ex) { DisplayMessage("An exception occurred: \n\n" + ex.Message); } }
/// <summary> /// Open a mod's folder /// </summary> /// <param name="mod"></param> public void OpenModFolder(DeploymentMod mod) { if (mod == null || !Directory.Exists(mod.Path)) { DisplayMessage($"Could not open folder \"{mod?.Path}\""); return; } ProcessStartInfo startInfo = new() { Arguments = mod.Path, FileName = "explorer.exe" }; Process.Start(startInfo); }