From 6c3fa717877abca5b97b99460a17019ad7ed610b Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Wed, 22 Jun 2022 11:10:50 +0300 Subject: [PATCH] Cli ListTemplatesCommand: Get templates from abp.io & list resolves https://github.com/abpframework/abp/issues/13008 --- .../Abp/Cli/Commands/ListTemplatesCommand.cs | 79 +++++++++++++++++-- .../Cli/Commands/Templates/TemplateInfo.cs | 14 ++++ 2 files changed, 87 insertions(+), 6 deletions(-) create mode 100644 framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/Templates/TemplateInfo.cs diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ListTemplatesCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ListTemplatesCommand.cs index c38f55a5b3..7274fb641d 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ListTemplatesCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ListTemplatesCommand.cs @@ -1,22 +1,89 @@ -using System.Text; +using System; +using System.Collections.Generic; +using System.Text; using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using Volo.Abp.Cli.Args; +using Volo.Abp.Cli.Commands.Templates; +using Volo.Abp.Cli.Http; +using Volo.Abp.Cli.ProjectBuilding; using Volo.Abp.DependencyInjection; +using Volo.Abp.Json; +using Volo.Abp.Threading; namespace Volo.Abp.Cli.Commands; public class ListTemplatesCommand : IConsoleCommand, ITransientDependency { public const string Name = "list-templates"; - - public ListTemplatesCommand() + + private readonly CliHttpClientFactory _cliHttpClientFactory; + private readonly IJsonSerializer _jsonSerializer; + private readonly ICancellationTokenProvider _cancellationTokenProvider; + private readonly IRemoteServiceExceptionHandler _remoteServiceExceptionHandler; + + public ILogger Logger { get; set; } + + public ListTemplatesCommand( + CliHttpClientFactory cliHttpClientFactory, + IJsonSerializer jsonSerializer, + ICancellationTokenProvider cancellationTokenProvider, + IRemoteServiceExceptionHandler remoteServiceExceptionHandler) { - + _cliHttpClientFactory = cliHttpClientFactory; + _jsonSerializer = jsonSerializer; + _cancellationTokenProvider = cancellationTokenProvider; + _remoteServiceExceptionHandler = remoteServiceExceptionHandler; + + Logger = NullLogger.Instance; } public async Task ExecuteAsync(CommandLineArgs commandLineArgs) { - + var templateNameSpaceLength = 26; + var templateDisplayNameSpaceLength = 32; + + var templates = await GetTemplatesAsync(); + + var output = new StringBuilder(Environment.NewLine + Environment.NewLine); + + output.AppendLine( + $"{"Template".PadRight(templateNameSpaceLength)}" + + $"{"Template Name".PadRight(templateDisplayNameSpaceLength)}" + + "Document Url"); + + output.AppendLine( + $"{"--------".PadRight(templateNameSpaceLength)}" + + $"{"-------------".PadRight(templateDisplayNameSpaceLength)}" + + "------------"); + + output.AppendLine(); + + foreach (var template in templates) + { + output.AppendLine( + $"{template.Name?.PadRight(templateNameSpaceLength)}" + + $"{template.DisplayName?.PadRight(templateDisplayNameSpaceLength)}" + + $"{template.DocumentUrl}"); + } + + Logger.LogInformation(output.ToString()); + } + + private async Task> GetTemplatesAsync() + { + var client = _cliHttpClientFactory.CreateClient(); + + using (var responseMessage = await client.GetAsync( + $"{CliUrls.WwwAbpIo}api/download/templates/", + _cancellationTokenProvider.Token + )) + { + await _remoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage); + var result = await responseMessage.Content.ReadAsStringAsync(); + return _jsonSerializer.Deserialize>(result); + } } public string GetUsageInfo() @@ -36,4 +103,4 @@ public class ListTemplatesCommand : IConsoleCommand, ITransientDependency { return "Lists available templates to be created."; } -} +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/Templates/TemplateInfo.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/Templates/TemplateInfo.cs new file mode 100644 index 0000000000..c0c269de5b --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/Templates/TemplateInfo.cs @@ -0,0 +1,14 @@ +namespace Volo.Abp.Cli.Commands.Templates; + +public class TemplateInfo +{ + public string Name { get; set; } + + public string DisplayName { get; set; } + + public string ShortDescription { get; set; } + + public string DocumentUrl { get; set; } + + public bool IsPro { get; set; } +} \ No newline at end of file