refactor: Replace SubDir with SubDirectory from IFileSystem

Multiple path fragments are now supported in the built-in
`SubDirectory()` extension method, so there's no longer a need for the
custom `SubDir()` version.
master
Robert Dailey 2 weeks ago
parent b93abe8874
commit b77f2a5919

@ -17,7 +17,7 @@ public class DeleteRepoDirMigrationStep(IAppPaths paths) : IMigrationStep
};
public bool Required => false;
private IDirectoryInfo RepoDir => paths.AppDataDirectory.SubDir("repo");
private IDirectoryInfo RepoDir => paths.AppDataDirectory.SubDirectory("repo");
public bool CheckIfNeeded()
{

@ -1,6 +1,5 @@
using System.IO.Abstractions;
using JetBrains.Annotations;
using Recyclarr.Common.Extensions;
using Recyclarr.Platform;
using Spectre.Console;
@ -25,7 +24,7 @@ public class MoveOsxAppDataDotnet8(
private IDirectoryInfo OldAppDataDir => fs.DirectoryInfo
.New(env.GetFolderPath(Environment.SpecialFolder.UserProfile))
.SubDir(".config", AppPaths.DefaultAppDataDirectoryName);
.SubDirectory(".config", AppPaths.DefaultAppDataDirectoryName);
private IDirectoryInfo NewAppDataDir => paths.AppDataDirectory;

@ -74,12 +74,6 @@ public static class FileSystemExtensions
return Regex.Replace(path, $"^{Regex.Escape(oldDir)}", newDir);
}
public static IDirectoryInfo SubDir(this IDirectoryInfo dir, params string[] subdirectories)
{
return subdirectories.Aggregate(dir,
(d, s) => d.FileSystem.DirectoryInfo.New(d.FileSystem.Path.Combine(d.FullName, s)));
}
public static IFileInfo? YamlFile(this IDirectoryInfo dir, string yamlFilenameNoExtension)
{
var supportedFiles = new[] {$"{yamlFilenameNoExtension}.yml", $"{yamlFilenameNoExtension}.yaml"};

@ -1,5 +1,4 @@
using System.IO.Abstractions;
using Recyclarr.Common.Extensions;
namespace Recyclarr.Platform;
@ -8,8 +7,8 @@ public class AppPaths(IDirectoryInfo appDataPath) : IAppPaths
public static string DefaultAppDataDirectoryName => "recyclarr";
public IDirectoryInfo AppDataDirectory { get; } = appDataPath;
public IDirectoryInfo LogDirectory => AppDataDirectory.SubDir("logs", "cli");
public IDirectoryInfo ReposDirectory => AppDataDirectory.SubDir("repositories");
public IDirectoryInfo CacheDirectory => AppDataDirectory.SubDir("cache");
public IDirectoryInfo ConfigsDirectory => AppDataDirectory.SubDir("configs");
public IDirectoryInfo LogDirectory => AppDataDirectory.SubDirectory("logs", "cli");
public IDirectoryInfo ReposDirectory => AppDataDirectory.SubDirectory("repositories");
public IDirectoryInfo CacheDirectory => AppDataDirectory.SubDirectory("cache");
public IDirectoryInfo ConfigsDirectory => AppDataDirectory.SubDirectory("configs");
}

@ -1,5 +1,4 @@
using System.IO.Abstractions;
using Recyclarr.Common.Extensions;
using Recyclarr.Platform;
using Recyclarr.Settings;
using Serilog.Context;
@ -9,7 +8,7 @@ namespace Recyclarr.Repo;
public class ConfigTemplatesRepo(IRepoUpdater repoUpdater, IAppPaths paths, ISettingsProvider settings)
: IConfigTemplatesRepo, IUpdateableRepo
{
public IDirectoryInfo Path { get; } = paths.ReposDirectory.SubDir("config-templates");
public IDirectoryInfo Path { get; } = paths.ReposDirectory.SubDirectory("config-templates");
public Task Update(CancellationToken token)
{

@ -1,5 +1,4 @@
using System.IO.Abstractions;
using Recyclarr.Common.Extensions;
using Recyclarr.Platform;
using Recyclarr.Settings;
using Serilog.Context;
@ -9,7 +8,7 @@ namespace Recyclarr.Repo;
public class TrashGuidesRepo(IRepoUpdater repoUpdater, IAppPaths paths, ISettingsProvider settings)
: ITrashGuidesRepo, IUpdateableRepo
{
public IDirectoryInfo Path { get; } = paths.ReposDirectory.SubDir("trash-guides");
public IDirectoryInfo Path { get; } = paths.ReposDirectory.SubDirectory("trash-guides");
public Task Update(CancellationToken token)
{

@ -1,6 +1,5 @@
using System.IO.Abstractions;
using Recyclarr.Cli.Processors.Config;
using Recyclarr.Common.Extensions;
namespace Recyclarr.Cli.IntegrationTests;
@ -12,7 +11,7 @@ internal class ConfigManipulatorTest : CliIntegrationFixture
{
var sut = Resolve<ConfigManipulator>();
var src = Fs.CurrentDirectory().File("template.yml");
var dst = Fs.CurrentDirectory().SubDir("one", "two", "three").File("config.yml");
var dst = Fs.CurrentDirectory().SubDirectory("one", "two", "three").File("config.yml");
const string yamlData =
"""

@ -1,5 +1,4 @@
using System.IO.Abstractions;
using Recyclarr.Common.Extensions;
using Recyclarr.Config.Parsing;
namespace Recyclarr.IntegrationTests;
@ -51,7 +50,7 @@ public class ConfigSaverTest : IntegrationTestFixture
}
};
var destFile = Fs.CurrentDirectory().SubDir("one", "two", "three").File("config.yml");
var destFile = Fs.CurrentDirectory().SubDirectory("one", "two", "three").File("config.yml");
sut.Save(config, destFile);

@ -1,5 +1,4 @@
using System.IO.Abstractions;
using Recyclarr.Common.Extensions;
using Recyclarr.TestLibrary;
using Recyclarr.TrashGuide.QualitySize;
@ -11,7 +10,7 @@ public class QualitySizeGuideParserTest : IntegrationTestFixture
[Test]
public void Get_valid_data()
{
var qualityDir = Fs.CurrentDirectory().SubDir("json");
var qualityDir = Fs.CurrentDirectory().SubDirectory("json");
Fs.AddSameFileFromEmbeddedResource(qualityDir.File("quality_size.json"), GetType());
qualityDir.Refresh();
@ -36,7 +35,7 @@ public class QualitySizeGuideParserTest : IntegrationTestFixture
[Test]
public void Invalid_data_gets_skipped()
{
var qualityDir = Fs.CurrentDirectory().SubDir("json");
var qualityDir = Fs.CurrentDirectory().SubDirectory("json");
Fs.AddSameFileFromEmbeddedResource(qualityDir.File("invalid_quality_size.json"), GetType());
qualityDir.Refresh();

@ -1,5 +1,4 @@
using System.IO.Abstractions;
using Recyclarr.Common.Extensions;
using Recyclarr.Repo;
using Recyclarr.TestLibrary;
using Recyclarr.TrashGuide;
@ -32,7 +31,7 @@ public class QualitySizeGuideServiceTest : IntegrationTestFixture
Fs.AddFile(repo.Path.File("metadata.json"), new MockFileData(metadataJson));
Fs.AddFileFromEmbeddedResource(
repo.Path.SubDir("docs", "json", serviceDir, "quality-size").File("some-quality-size.json"),
repo.Path.SubDirectory("docs", "json", serviceDir, "quality-size").File("some-quality-size.json"),
GetType(),
"Data.quality_size.json");

@ -1,5 +1,4 @@
using System.IO.Abstractions;
using Recyclarr.Common.Extensions;
using Recyclarr.Repo;
using Recyclarr.TestLibrary;
using Recyclarr.TrashGuide.MediaNaming;
@ -35,9 +34,9 @@ public class MediaNamingGuideServiceTest : IntegrationTestFixture
SetupMetadata();
var repo = Resolve<ITrashGuidesRepo>();
var jsonPath = repo.Path.SubDir("radarr");
Fs.AddSameFileFromEmbeddedResource(jsonPath.SubDir("naming1").File("radarr_naming1.json"), GetType());
Fs.AddSameFileFromEmbeddedResource(jsonPath.SubDir("naming2").File("radarr_naming2.json"), GetType());
var jsonPath = repo.Path.SubDirectory("radarr");
Fs.AddSameFileFromEmbeddedResource(jsonPath.SubDirectory("naming1").File("radarr_naming1.json"), GetType());
Fs.AddSameFileFromEmbeddedResource(jsonPath.SubDirectory("naming2").File("radarr_naming2.json"), GetType());
var sut = Resolve<MediaNamingGuideService>();
@ -65,9 +64,9 @@ public class MediaNamingGuideServiceTest : IntegrationTestFixture
SetupMetadata();
var repo = Resolve<ITrashGuidesRepo>();
var jsonPath = repo.Path.SubDir("sonarr");
Fs.AddSameFileFromEmbeddedResource(jsonPath.SubDir("naming1").File("sonarr_naming1.json"), GetType());
Fs.AddSameFileFromEmbeddedResource(jsonPath.SubDir("naming2").File("sonarr_naming2.json"), GetType());
var jsonPath = repo.Path.SubDirectory("sonarr");
Fs.AddSameFileFromEmbeddedResource(jsonPath.SubDirectory("naming1").File("sonarr_naming1.json"), GetType());
Fs.AddSameFileFromEmbeddedResource(jsonPath.SubDirectory("naming2").File("sonarr_naming2.json"), GetType());
var sut = Resolve<MediaNamingGuideService>();

Loading…
Cancel
Save