diff --git a/ErsatzTV.Scanner.Tests/Core/Metadata/LocalSubtitlesProviderTests.cs b/ErsatzTV.Scanner.Tests/Core/Metadata/LocalSubtitlesProviderTests.cs index cd7ff1ddd..f9b2dc7f6 100644 --- a/ErsatzTV.Scanner.Tests/Core/Metadata/LocalSubtitlesProviderTests.cs +++ b/ErsatzTV.Scanner.Tests/Core/Metadata/LocalSubtitlesProviderTests.cs @@ -60,6 +60,7 @@ public class LocalSubtitlesProviderTests var provider = new LocalSubtitlesProvider( Substitute.For(), Substitute.For(), + fileSystem, new LocalFileSystem(fileSystem, Substitute.For(), Substitute.For>()), Substitute.For>()); @@ -113,6 +114,7 @@ public class LocalSubtitlesProviderTests var provider = new LocalSubtitlesProvider( Substitute.For(), Substitute.For(), + fileSystem, new LocalFileSystem(fileSystem, Substitute.For(), Substitute.For>()), Substitute.For>()); diff --git a/ErsatzTV.Scanner/Core/Metadata/LocalSubtitlesProvider.cs b/ErsatzTV.Scanner/Core/Metadata/LocalSubtitlesProvider.cs index abbb8486c..bc123d36a 100644 --- a/ErsatzTV.Scanner/Core/Metadata/LocalSubtitlesProvider.cs +++ b/ErsatzTV.Scanner/Core/Metadata/LocalSubtitlesProvider.cs @@ -1,4 +1,5 @@ using System.Globalization; +using System.IO.Abstractions; using ErsatzTV.Core.Domain; using ErsatzTV.Core.Extensions; using ErsatzTV.Core.Interfaces.Metadata; @@ -15,6 +16,7 @@ public class LocalSubtitlesProvider : ILocalSubtitlesProvider private readonly ILogger _logger; private readonly IMediaItemRepository _mediaItemRepository; private readonly IMetadataRepository _metadataRepository; + private readonly IFileSystem _fileSystem; private readonly SemaphoreSlim _slim = new(1, 1); private bool _disposedValue; @@ -22,11 +24,13 @@ public class LocalSubtitlesProvider : ILocalSubtitlesProvider public LocalSubtitlesProvider( IMediaItemRepository mediaItemRepository, IMetadataRepository metadataRepository, + IFileSystem fileSystem, ILocalFileSystem localFileSystem, ILogger logger) { _mediaItemRepository = mediaItemRepository; _metadataRepository = metadataRepository; + _fileSystem = fileSystem; _localFileSystem = localFileSystem; _logger = logger; } @@ -108,19 +112,19 @@ public class LocalSubtitlesProvider : ILocalSubtitlesProvider { var result = new List(); - string? folder = Path.GetDirectoryName(mediaItemPath); - string withoutExtension = Path.GetFileNameWithoutExtension(mediaItemPath); + string? folder = _fileSystem.Path.GetDirectoryName(mediaItemPath); + string withoutExtension = _fileSystem.Path.GetFileNameWithoutExtension(mediaItemPath); foreach (string file in _localFileSystem.ListFiles(folder, $"{withoutExtension}*")) { string lowerFile = file.ToLowerInvariant(); - string fileName = Path.GetFileName(file); + string fileName = _fileSystem.Path.GetFileName(file); if (!fileName.StartsWith(withoutExtension, StringComparison.OrdinalIgnoreCase)) { continue; } - string extension = Path.GetExtension(lowerFile); + string extension = _fileSystem.Path.GetExtension(lowerFile); string codec = extension switch { ".ssa" or ".ass" => "ass", @@ -134,7 +138,7 @@ public class LocalSubtitlesProvider : ILocalSubtitlesProvider continue; } - string language = Path.GetFileName(lowerFile); + string language = _fileSystem.Path.GetFileName(lowerFile); var forced = false; var sdh = false; @@ -181,7 +185,7 @@ public class LocalSubtitlesProvider : ILocalSubtitlesProvider Forced = forced, SDH = sdh, Language = language, - Path = saveFullPath ? file : Path.GetFileName(file), + Path = saveFullPath ? file : _fileSystem.Path.GetFileName(file), DateAdded = DateTime.UtcNow, DateUpdated = _localFileSystem.GetLastWriteTime(file) }); @@ -200,7 +204,7 @@ public class LocalSubtitlesProvider : ILocalSubtitlesProvider Forced = forced, SDH = sdh, Language = culture.ThreeLetterISOLanguageName, - Path = saveFullPath ? file : Path.GetFileName(file), + Path = saveFullPath ? file : _fileSystem.Path.GetFileName(file), DateAdded = DateTime.UtcNow, DateUpdated = _localFileSystem.GetLastWriteTime(file) });