Browse Source

Cli ListTemplatesCommand: Get templates from abp.io & list

resolves https://github.com/abpframework/abp/issues/13008
pull/13083/head
Yunus Emre Kalkan 4 years ago
parent
commit
6c3fa71787
  1. 79
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ListTemplatesCommand.cs
  2. 14
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/Templates/TemplateInfo.cs

79
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<ListTemplatesCommand> Logger { get; set; }
public ListTemplatesCommand(
CliHttpClientFactory cliHttpClientFactory,
IJsonSerializer jsonSerializer,
ICancellationTokenProvider cancellationTokenProvider,
IRemoteServiceExceptionHandler remoteServiceExceptionHandler)
{
_cliHttpClientFactory = cliHttpClientFactory;
_jsonSerializer = jsonSerializer;
_cancellationTokenProvider = cancellationTokenProvider;
_remoteServiceExceptionHandler = remoteServiceExceptionHandler;
Logger = NullLogger<ListTemplatesCommand>.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<List<TemplateInfo>> 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<List<TemplateInfo>>(result);
}
}
public string GetUsageInfo()
@ -36,4 +103,4 @@ public class ListTemplatesCommand : IConsoleCommand, ITransientDependency
{
return "Lists available templates to be created.";
}
}
}

14
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; }
}
Loading…
Cancel
Save