Add version verb with option to check for upgrade Add Search verb to search the library Add export file type inference Add more set-status options Add console progress bar and ETA Add processable option to liberate specific book IDs Scan accounts by nickname or account ID Improve startup performance for halp and on parsing error More useful error messages
51 lines
1.1 KiB
C#
51 lines
1.1 KiB
C#
using CommandLine;
|
|
using System;
|
|
using System.IO;
|
|
using System.Reflection;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace LibationCli
|
|
{
|
|
public abstract class OptionsBase
|
|
{
|
|
public async Task Run()
|
|
{
|
|
try
|
|
{
|
|
await ProcessAsync();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Environment.ExitCode = (int)ExitCode.RunTimeError;
|
|
PrintVerbUsage(new string[]
|
|
{
|
|
"ERROR",
|
|
"=====",
|
|
ex.Message,
|
|
"",
|
|
ex.StackTrace
|
|
});
|
|
}
|
|
}
|
|
|
|
protected void PrintVerbUsage(params string[] linesBeforeUsage)
|
|
{
|
|
var verb = GetType().GetCustomAttribute<VerbAttribute>().Name;
|
|
var helpText = new HelpVerb { HelpType = verb }.GetHelpText();
|
|
helpText.AddPreOptionsLines(linesBeforeUsage);
|
|
helpText.AddPreOptionsLine("");
|
|
helpText.AddPreOptionsLine($"{verb} Usage:");
|
|
Console.Error.WriteLine(helpText);
|
|
}
|
|
|
|
protected static void ReplaceConsoleText(TextWriter writer, int previousLength, string newText)
|
|
{
|
|
writer.Write(new string('\b', previousLength));
|
|
writer.Write(newText);
|
|
writer.Write(new string(' ', int.Max(0, previousLength - newText.Length)));
|
|
}
|
|
|
|
protected abstract Task ProcessAsync();
|
|
}
|
|
}
|