parent
ce481e0d1f
commit
e54cef0859
@ -0,0 +1,20 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="config list local" type="DotNetProject" factoryName=".NET Project">
|
||||
<option name="EXE_PATH" value="$PROJECT_DIR$/Recyclarr.Cli/bin/Debug/net7.0/recyclarr" />
|
||||
<option name="PROGRAM_PARAMETERS" value="config list local" />
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/Recyclarr.Cli/bin/Debug/net7.0" />
|
||||
<option name="PASS_PARENT_ENVS" value="1" />
|
||||
<option name="USE_EXTERNAL_CONSOLE" value="0" />
|
||||
<option name="USE_MONO" value="0" />
|
||||
<option name="RUNTIME_ARGUMENTS" value="" />
|
||||
<option name="PROJECT_PATH" value="$PROJECT_DIR$/Recyclarr.Cli/Recyclarr.Cli.csproj" />
|
||||
<option name="PROJECT_EXE_PATH_TRACKING" value="1" />
|
||||
<option name="PROJECT_ARGUMENTS_TRACKING" value="1" />
|
||||
<option name="PROJECT_WORKING_DIRECTORY_TRACKING" value="1" />
|
||||
<option name="PROJECT_KIND" value="DotNetCore" />
|
||||
<option name="PROJECT_TFM" value="net7.0" />
|
||||
<method v="2">
|
||||
<option name="Build" />
|
||||
</method>
|
||||
</configuration>
|
||||
</component>
|
@ -1,18 +1,83 @@
|
||||
using System.IO.Abstractions;
|
||||
using Recyclarr.TrashLib.Config.Parsing;
|
||||
using Recyclarr.TrashLib.Startup;
|
||||
using Spectre.Console;
|
||||
using Spectre.Console.Rendering;
|
||||
|
||||
namespace Recyclarr.TrashLib.Config.Listers;
|
||||
|
||||
public class ConfigLocalLister : IConfigLister
|
||||
{
|
||||
private readonly IAnsiConsole _console;
|
||||
private readonly IConfigurationFinder _configFinder;
|
||||
private readonly IConfigurationLoader _configLoader;
|
||||
private readonly IAppPaths _paths;
|
||||
|
||||
public ConfigLocalLister(IAnsiConsole console)
|
||||
public ConfigLocalLister(
|
||||
IAnsiConsole console,
|
||||
IConfigurationFinder configFinder,
|
||||
IConfigurationLoader configLoader,
|
||||
IAppPaths paths)
|
||||
{
|
||||
_console = console;
|
||||
_configFinder = configFinder;
|
||||
_configLoader = configLoader;
|
||||
_paths = paths;
|
||||
}
|
||||
|
||||
public void List()
|
||||
public Task List()
|
||||
{
|
||||
_console.Write("Local listing is not supported yet, but coming soon.");
|
||||
var tree = new Tree(_paths.AppDataDirectory.ToString()!);
|
||||
|
||||
foreach (var configPath in _configFinder.GetConfigFiles())
|
||||
{
|
||||
var configs = _configLoader.Load(configPath);
|
||||
|
||||
var rows = new List<IRenderable>();
|
||||
BuildInstanceTree(rows, configs, SupportedServices.Radarr);
|
||||
BuildInstanceTree(rows, configs, SupportedServices.Sonarr);
|
||||
|
||||
if (!rows.Any())
|
||||
{
|
||||
rows.Add(new Markup("([red]Empty[/])"));
|
||||
}
|
||||
|
||||
var configTree = new Tree(Markup.FromInterpolated($"[b]{MakeRelative(configPath)}[/]"));
|
||||
foreach (var r in rows)
|
||||
{
|
||||
configTree.AddNode(r);
|
||||
}
|
||||
|
||||
tree.AddNode(configTree);
|
||||
}
|
||||
|
||||
_console.WriteLine();
|
||||
_console.Write(tree);
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
private string MakeRelative(IFileInfo path)
|
||||
{
|
||||
var configPath = new Uri(path.FullName, UriKind.Absolute);
|
||||
var configDir = new Uri(_paths.ConfigsDirectory.FullName, UriKind.Absolute);
|
||||
return configDir.MakeRelativeUri(configPath).ToString();
|
||||
}
|
||||
|
||||
private static void BuildInstanceTree(
|
||||
ICollection<IRenderable> rows,
|
||||
IConfigRegistry registry,
|
||||
SupportedServices service)
|
||||
{
|
||||
var configs = registry.GetConfigsOfType(service).ToList();
|
||||
if (!configs.Any())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var tree = new Tree(Markup.FromInterpolated($"[red]{service}[/]"));
|
||||
tree.AddNodes(configs.Select(c =>
|
||||
Markup.FromInterpolated($"[blue]{c.InstanceName ?? c.BaseUrl.ToString()}[/]")));
|
||||
|
||||
rows.Add(tree);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in new issue