summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorWouter Tinus <win.acme.simple@gmail.com>2020-02-14 08:12:43 +0100
committerWouter Tinus <win.acme.simple@gmail.com>2020-02-14 08:12:43 +0100
commit599f8c7850cb7b376ecff73b3ab6a2826b82fb5e (patch)
treeadba0e8618602736c9a8abb2abc3cb7188988b4f /src
parent1ff397bbc044e8f01a2ff0a19ccf154f2d2b7f09 (diff)
downloadletsencrypt-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.cs29
-rw-r--r--src/main.lib/Services/InputService.cs7
-rw-r--r--src/main.lib/Services/Interfaces/IInputService.cs2
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);