private void SaveConfigBtn_Click(object sender, EventArgs e) { if (combinationsConfiguration == null) { throw new NullReferenceException(nameof(combinationsConfiguration)); } if (string.IsNullOrEmpty(newConfigName)) { logger.Error(nameof(newConfigName)); MessageBox.Show(Globals.GlobalResources.GetString("ConfigNameEmpty")); } else { UpdateMouseActionsOutputs(newCombinations.Where(x => x.Action.IsMouseAction())); combinationsConfiguration.Combinations = newCombinations; try { var newConfigFileName = newConfigName; var configSource = new JsonConfigSource(logger); configSource.WriteConfigToFile(combinationsConfiguration, newConfigFileName); mainWindow.ReloadConfig(configSource); this.Close(); } catch (Exception ex) { logger.Error(ex.StackTrace); } } }
/// <inheritdoc /> protected override int Execute(IInput input, IOutput output) { string[] packages = input.GetArgument("packages"); packages = Arr.Map(packages, (package) => package.ToLower()); var file = Factory.GetBucketFile(); var filePath = Path.Combine(Environment.CurrentDirectory, file); var jsonFile = new JsonFile(filePath); var configBucket = jsonFile.Read <ConfigBucket>(); var backup = File.ReadAllText(filePath); var source = new JsonConfigSource(jsonFile); var io = GetIO(); var requireKey = input.GetOption("dev") ? LinkType.RequireDev : LinkType.Require; var alternativeRequireKey = input.GetOption("dev") ? LinkType.Require : LinkType.RequireDev; var requireMapping = new Dictionary <string, string>(); var alternativeRequireMapping = new Dictionary <string, string>(); void EstablishCaseMapping(IDictionary <string, string> mapping, LinkType type) { var collection = type == LinkType.Require ? configBucket.Requires : configBucket.RequiresDev; if (collection == null) { return; } foreach (var item in collection) { mapping[item.Key.ToLower()] = item.Key; } } EstablishCaseMapping(requireMapping, requireKey); EstablishCaseMapping(alternativeRequireMapping, alternativeRequireKey); bool TryGetMatchPackages(IDictionary <string, string> mapping, string package, out IEnumerable <string> matches) { var result = new List <string>(); var regexPackage = BasePackage.PackageNameToRegexPattern(package); foreach (var item in mapping) { if (Regex.IsMatch(item.Key, regexPackage, RegexOptions.IgnoreCase)) { result.Add(item.Value); } } matches = result; return(result.Count > 0); } foreach (var package in packages) { if (requireMapping.TryGetValue(package, out string originalName)) { source.RemoveLink(requireKey, originalName); } else if (alternativeRequireMapping.TryGetValue(package, out originalName)) { io.WriteError($"<warning>{originalName} could not be found in {Str.LowerDashes(requireKey.ToString())} but it is present in {Str.LowerDashes(alternativeRequireKey.ToString())}</warning>"); if (io.IsInteractive && io.AskConfirmation($"Do you want to remove it from {Str.LowerDashes(alternativeRequireKey.ToString())} [<comment>yes</comment>]? ", true)) { source.RemoveLink(alternativeRequireKey, originalName); } } else if (TryGetMatchPackages(requireMapping, package, out IEnumerable <string> matches)) { foreach (var match in matches) { source.RemoveLink(requireKey, match); } } else if (TryGetMatchPackages(alternativeRequireMapping, package, out matches)) { foreach (var match in matches) { io.WriteError($"<warning>{match} could not be found in {Str.LowerDashes(requireKey.ToString())} but it is present in {Str.LowerDashes(alternativeRequireKey.ToString())}</warning>"); if (io.IsInteractive && io.AskConfirmation($"Do you want to remove it from {Str.LowerDashes(alternativeRequireKey.ToString())} [<comment>yes</comment>]? ", true)) { source.RemoveLink(alternativeRequireKey, match); } } } else { io.WriteError($"<warning>{package} is not required in your bucket.json and has not been removed</warning>"); } } if (input.GetOption("no-update")) { return(ExitCodes.Normal); } // todo: implement installer uninstall. ResetBucket(); var bucket = GetBucket(true, input.GetOption("no-plugins")); // todo: set no-progress. var commandEvent = new CommandEventArgs(PluginEvents.Command, "remove", input, output); bucket.GetEventDispatcher().Dispatch(this, commandEvent); ISet <string> GetRemoveWhitlist() { Guard.Requires <UnexpectedException>(packages.Length > 0); return(new HashSet <string>(packages)); } var installer = new BucketInstaller(io, bucket); var status = installer .SetVerbose(input.GetOption("verbose")) .SetDevMode(!input.GetOption("update-no-dev")) .SetRunScripts(!input.GetOption("no-scripts")) .SetUpdate(true) .SetUpdateWhitelist(GetRemoveWhitlist()) .SetWhitelistTransitiveDependencies(!input.GetOption("no-update-with-dependencies")) .SetIgnorePlatformRequirements(input.GetOption("ignore-platform-reqs")) .Run(); if (status != 0) { io.WriteError($"{Environment.NewLine}<error>Removal failed, reverting {file} to its original content.</error>"); File.WriteAllText(filePath, backup); } return(status); }