static void Main(string[] args) { _argumentGetter = new ArgumentGetter(args); _localManifest = LoadLocalManifest(); PrintWelcomeText(); CheckForUpdate(); var progressContext = new ProgressContext(new ConsoleProgressOutput(14)); var dialogManager = new ConsoleDialogManager(_argumentGetter, progressContext); var logger = new LoggerConfiguration().WriteTo.Console().CreateLogger(); var pluginManager = new PluginManager("plugins") { DialogManager = dialogManager, Progress = progressContext, Logger = logger }; pluginManager.OnManualSelection += PluginManager_OnManualSelection; PrintUnloadedPlugins(pluginManager.LoadErrors); IContext context = new MainContext(pluginManager, progressContext); while (context != null) { context.PrintCommands(); context = context.ExecuteNext(_argumentGetter).Result; } }
public ConsoleDialogManager(IArgumentGetter argumentGetter, IProgressContext progress) { ContractAssertions.IsNotNull(argumentGetter, nameof(argumentGetter)); ContractAssertions.IsNotNull(progress, nameof(progress)); _argumentGetter = argumentGetter; _progress = progress; }
public async Task <IContext> ExecuteNext(IArgumentGetter argumentGetter) { var commandName = argumentGetter.GetNextArgument(); // Check if command exists var command = Commands.FirstOrDefault(x => x.Name == commandName); if (command == null) { Console.WriteLine($"Command '{commandName}' is not supported."); return(this); } Console.Clear(); // Execute command var arguments = argumentGetter.GetNextArguments(command.Arguments.Length); return(await ExecuteNextInternal(command, arguments)); }