diff options
author | Wouter Tinus <win.acme.simple@gmail.com> | 2020-02-14 08:12:43 +0100 |
---|---|---|
committer | Wouter Tinus <win.acme.simple@gmail.com> | 2020-02-14 08:12:43 +0100 |
commit | 599f8c7850cb7b376ecff73b3ab6a2826b82fb5e (patch) | |
tree | adba0e8618602736c9a8abb2abc3cb7188988b4f /src | |
parent | 1ff397bbc044e8f01a2ff0a19ccf154f2d2b7f09 (diff) | |
download | letsencrypt-win-simple-599f8c7850cb7b376ecff73b3ab6a2826b82fb5e.zip letsencrypt-win-simple-599f8c7850cb7b376ecff73b3ab6a2826b82fb5e.tar.gz letsencrypt-win-simple-599f8c7850cb7b376ecff73b3ab6a2826b82fb5e.tar.bz2 |
quick select in renewal manager
Diffstat (limited to 'src')
-rw-r--r-- | src/main.lib/RenewalManager.cs | 29 | ||||
-rw-r--r-- | src/main.lib/Services/InputService.cs | 7 | ||||
-rw-r--r-- | src/main.lib/Services/Interfaces/IInputService.cs | 2 |
3 files changed, 25 insertions, 13 deletions
diff --git a/src/main.lib/RenewalManager.cs b/src/main.lib/RenewalManager.cs index 1267e34..3cc5c91 100644 --- a/src/main.lib/RenewalManager.cs +++ b/src/main.lib/RenewalManager.cs @@ -108,6 +108,7 @@ namespace PKISharp.WACS () => { displayAll = true; return Task.CompletedTask; }, "List all selected renewals", "A")); } + if (selectedRenewals.Count() > 1) { options.Add( @@ -177,8 +178,8 @@ namespace PKISharp.WACS disabledReason: "No renewals selected.")); options.Add( Choice.Create<Func<Task>>( - async () => selectedRenewals = await Analyse(selectedRenewals), - $"Analyse duplicates for {selectionLabel}", "A", + async () => selectedRenewals = await Analyze(selectedRenewals), + $"Analyze duplicates for {selectionLabel}", "A", @disabled: none, disabledReason: "No renewals selected.")); options.Add( @@ -233,7 +234,12 @@ namespace PKISharp.WACS { _input.Show(null, $"Currently selected {selectedRenewals.Count()} of {originalSelection.Count()} {totalLabel}", true); } - var chosen = await _input.ChooseFromMenu("Please choose from the menu", options); + var chosen = await _input.ChooseFromMenu( + "Choose an action or type numbers to select renewals", + options, + (string unexpected) => + Choice.Create<Func<Task>>( + async () => selectedRenewals = await FilterRenewalsById(selectedRenewals, unexpected))); await chosen.Invoke(); } while (!quit); @@ -245,7 +251,7 @@ namespace PKISharp.WACS /// </summary> /// <param name="selectedRenewals"></param> /// <returns></returns> - private async Task<IEnumerable<Renewal>> Analyse(IEnumerable<Renewal> selectedRenewals) + private async Task<IEnumerable<Renewal>> Analyze(IEnumerable<Renewal> selectedRenewals) { var foundHosts = new Dictionary<string, List<Renewal>>(); var foundSites = new Dictionary<long, List<Renewal>>(); @@ -352,10 +358,6 @@ namespace PKISharp.WACS var options = new List<Choice<Func<Task<IEnumerable<Renewal>>>>> { Choice.Create<Func<Task<IEnumerable<Renewal>>>>( - () => FilterRenewalsById(current), - "Pick from displayed list", - @default: true), - Choice.Create<Func<Task<IEnumerable<Renewal>>>>( () => FilterRenewalsByFriendlyName(current), "Filter by friendly name"), Choice.Create<Func<Task<IEnumerable<Renewal>>>>( @@ -386,7 +388,12 @@ namespace PKISharp.WACS private async Task<IEnumerable<Renewal>> FilterRenewalsById(IEnumerable<Renewal> current) { var rawInput = await _input.RequestString("Please input the list index of the renewal(s) you'd like to select"); - var parts = rawInput.ParseCsv(); + return await FilterRenewalsById(current, rawInput); + } + + private async Task<IEnumerable<Renewal>> FilterRenewalsById(IEnumerable<Renewal> current, string input) + { + var parts = input.ParseCsv(); if (parts == null) { return current; @@ -399,12 +406,12 @@ namespace PKISharp.WACS if (index > 0 && index <= current.Count()) { ret.Add(current.ElementAt(index - 1)); - } + } else { _log.Warning("Input out of range: {part}", part); } - } + } else { _log.Warning("Invalid input: {part}", part); diff --git a/src/main.lib/Services/InputService.cs b/src/main.lib/Services/InputService.cs index 0dd4ed2..06416d3 100644 --- a/src/main.lib/Services/InputService.cs +++ b/src/main.lib/Services/InputService.cs @@ -339,7 +339,7 @@ namespace PKISharp.WACS.Services /// Print a (paged) list of choices for the user to choose from /// </summary> /// <param name="choices"></param> - public async Task<T> ChooseFromMenu<T>(string what, List<Choice<T>> choices) + public async Task<T> ChooseFromMenu<T>(string what, List<Choice<T>> choices, Func<string, Choice<T>>? unexpected = null) { if (!choices.Any()) { @@ -379,6 +379,11 @@ namespace PKISharp.WACS.Services _log.Warning($"The option you have chosen is currently disabled. {disabledReason}"); selected = null; } + + if (selected == null && unexpected != null) + { + selected = unexpected(choice); + } } } while (selected == null); return selected.Item; diff --git a/src/main.lib/Services/Interfaces/IInputService.cs b/src/main.lib/Services/Interfaces/IInputService.cs index 78d155c..b92a1ab 100644 --- a/src/main.lib/Services/Interfaces/IInputService.cs +++ b/src/main.lib/Services/Interfaces/IInputService.cs @@ -8,7 +8,7 @@ namespace PKISharp.WACS.Services { Task<TResult?> ChooseOptional<TSource, TResult>(string what, IEnumerable<TSource> options, Func<TSource, Choice<TResult?>> creator, string nullChoiceLabel) where TResult : class; Task<TResult> ChooseRequired<TSource, TResult>(string what, IEnumerable<TSource> options, Func<TSource, Choice<TResult>> creator); - Task<TResult> ChooseFromMenu<TResult>(string what, List<Choice<TResult>> choices); + Task<TResult> ChooseFromMenu<TResult>(string what, List<Choice<TResult>> choices, Func<string, Choice<TResult>>? unexpected = null); Task<bool> PromptYesNo(string message, bool defaultOption); Task<string?> ReadPassword(string what); Task<string> RequestString(string what); |