You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.5 KiB
55 lines
1.5 KiB
using Recyclarr.TrashLib.Config.Services;
|
|
using Spectre.Console;
|
|
|
|
namespace Recyclarr.TrashLib.Config.Listers;
|
|
|
|
public class ConfigTemplateLister : IConfigLister
|
|
{
|
|
private readonly IAnsiConsole _console;
|
|
private readonly IConfigTemplateGuideService _guideService;
|
|
|
|
public ConfigTemplateLister(
|
|
IAnsiConsole console,
|
|
IConfigTemplateGuideService guideService)
|
|
{
|
|
_console = console;
|
|
_guideService = guideService;
|
|
}
|
|
|
|
public Task List()
|
|
{
|
|
var data = _guideService.LoadTemplateData();
|
|
|
|
var table = new Table();
|
|
var empty = new Markup("");
|
|
|
|
var sonarrRowItems = RenderTemplates(table, data, SupportedServices.Sonarr);
|
|
var radarrRowItems = RenderTemplates(table, data, SupportedServices.Radarr);
|
|
var items = sonarrRowItems
|
|
.ZipLongest(radarrRowItems, (s, r) => (s ?? empty, r ?? empty));
|
|
|
|
foreach (var (s, r) in items)
|
|
{
|
|
table.AddRow(s, r);
|
|
}
|
|
|
|
_console.Write(table);
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
private static IEnumerable<Markup> RenderTemplates(
|
|
Table table,
|
|
IEnumerable<TemplatePath> templatePaths,
|
|
SupportedServices service)
|
|
{
|
|
var paths = templatePaths
|
|
.Where(x => x.Service == service && !x.Hidden)
|
|
.Select(x => Markup.FromInterpolated($"[blue]{x.Id}[/]"))
|
|
.ToList();
|
|
|
|
table.AddColumn(service.ToString());
|
|
|
|
return paths;
|
|
}
|
|
}
|