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.
recyclarr/src/Recyclarr.Cli/Command/CreateConfigCommand.cs

48 lines
1.7 KiB

using System.IO.Abstractions;
using Autofac;
using CliFx.Attributes;
using CliFx.Exceptions;
using JetBrains.Annotations;
using Recyclarr.Common;
using Recyclarr.Common.Extensions;
using Recyclarr.TrashLib.Startup;
using Serilog;
namespace Recyclarr.Cli.Command;
[Command("create-config", Description = "Create a starter YAML configuration file")]
[UsedImplicitly]
public class CreateConfigCommand : BaseCommand
{
[CommandOption("path", 'p', Description =
"Path where the new YAML file should be created. Must include the filename (e.g. path/to/config.yml). " +
"File must not already exist. If not specified, uses the default path of `recyclarr.yml` in the app data " +
"directory")]
public override string? AppDataDirectory { get; set; }
public override async Task Process(ILifetimeScope container)
{
var fs = container.Resolve<IFileSystem>();
var paths = container.Resolve<IAppPaths>();
var log = container.Resolve<ILogger>();
var reader = new ResourceDataReader(typeof(Program));
var ymlData = reader.ReadData("config-template.yml");
var configFile = AppDataDirectory is not null
? fs.FileInfo.New(AppDataDirectory)
: paths.ConfigPath;
if (configFile.Exists)
{
throw new CommandException(
$"The file {configFile} already exists. Please choose another path or delete/move the existing " +
"file and run this command again.");
}
configFile.CreateParentDirectory();
await using var stream = configFile.CreateText();
await stream.WriteAsync(ymlData);
log.Information("Created configuration at: {Path}", configFile);
}
}