From d49b40bf9f6d177f5d187d2bd1ff6bf2a1db99d1 Mon Sep 17 00:00:00 2001 From: Jason Dove <1695733+jasongdove@users.noreply.github.com> Date: Mon, 24 Nov 2025 10:21:21 -0600 Subject: [PATCH] remove readalllines --- .../Streaming/HlsSessionWorker.cs | 20 ++++----- .../Interfaces/Metadata/ILocalFileSystem.cs | 1 - ErsatzTV.Core/Metadata/LocalFileSystem.cs | 42 +++++++++---------- .../Graphics/GraphicsElementLoader.cs | 4 +- .../Core/Fakes/FakeLocalFileSystem.cs | 1 - 5 files changed, 31 insertions(+), 37 deletions(-) diff --git a/ErsatzTV.Application/Streaming/HlsSessionWorker.cs b/ErsatzTV.Application/Streaming/HlsSessionWorker.cs index da98adfd7..ea943a9f3 100644 --- a/ErsatzTV.Application/Streaming/HlsSessionWorker.cs +++ b/ErsatzTV.Application/Streaming/HlsSessionWorker.cs @@ -683,9 +683,9 @@ public class HlsSessionWorker : IHlsSessionWorker var generatedAtHash = new System.Collections.Generic.HashSet(); // delete old segments - var allSegments = Directory.GetFiles(_workingDirectory, "live*.ts") - .Append(Directory.GetFiles(_workingDirectory, "live*.mp4")) - .Append(Directory.GetFiles(_workingDirectory, "live*.m4s")) + var allSegments = _fileSystem.Directory.GetFiles(_workingDirectory, "live*.ts") + .Append(_fileSystem.Directory.GetFiles(_workingDirectory, "live*.mp4")) + .Append(_fileSystem.Directory.GetFiles(_workingDirectory, "live*.m4s")) .Map(file => { string fileName = Path.GetFileName(file); @@ -703,7 +703,7 @@ public class HlsSessionWorker : IHlsSessionWorker }) .ToList(); - var allInits = Directory.GetFiles(_workingDirectory, "*init.mp4") + var allInits = _fileSystem.Directory.GetFiles(_workingDirectory, "*init.mp4") .Map(file => long.TryParse(Path.GetFileName(file).Split('_')[0], out long generatedAt) && !generatedAtHash.Contains(generatedAt) ? new Segment(file, 0, generatedAt) : Option.None) @@ -743,7 +743,7 @@ public class HlsSessionWorker : IHlsSessionWorker { try { - File.Delete(segment.File); + _fileSystem.File.Delete(segment.File); } catch (IOException) { @@ -756,12 +756,12 @@ public class HlsSessionWorker : IHlsSessionWorker private async Task RefreshInits() { - var allSegments = Directory.GetFiles(_workingDirectory, "live*.m4s") + var allSegments = _fileSystem.Directory.GetFiles(_workingDirectory, "live*.m4s") .Map(Path.GetFileName) .Map(s => s.Split("_")[1]) .ToHashSet(); - foreach (string file in Directory.GetFiles(_workingDirectory, "*init.mp4")) + foreach (string file in _fileSystem.Directory.GetFiles(_workingDirectory, "*init.mp4")) { string key = Path.GetFileName(file).Split("_")[0]; if (allSegments.Contains(key)) @@ -816,9 +816,9 @@ public class HlsSessionWorker : IHlsSessionWorker private async Task> ReadPlaylistLines(CancellationToken cancellationToken) { string fileName = PlaylistFileName(); - if (File.Exists(fileName)) + if (_fileSystem.File.Exists(fileName)) { - return await File.ReadAllLinesAsync(fileName, cancellationToken); + return await _fileSystem.File.ReadAllLinesAsync(fileName, cancellationToken); } _logger.LogDebug("Playlist does not exist at expected location {File}", fileName); @@ -828,7 +828,7 @@ public class HlsSessionWorker : IHlsSessionWorker private async Task WritePlaylist(string playlist, CancellationToken cancellationToken) { string fileName = PlaylistFileName(); - await File.WriteAllTextAsync(fileName, playlist, cancellationToken); + await _fileSystem.File.WriteAllTextAsync(fileName, playlist, cancellationToken); } private string PlaylistFileName() => Path.Combine(_workingDirectory, "live.m3u8"); diff --git a/ErsatzTV.Core/Interfaces/Metadata/ILocalFileSystem.cs b/ErsatzTV.Core/Interfaces/Metadata/ILocalFileSystem.cs index 82a2c1821..ef566f6e5 100644 --- a/ErsatzTV.Core/Interfaces/Metadata/ILocalFileSystem.cs +++ b/ErsatzTV.Core/Interfaces/Metadata/ILocalFileSystem.cs @@ -10,7 +10,6 @@ public interface ILocalFileSystem IEnumerable ListFiles(string folder, params string[] searchPatterns); Task> CopyFile(string source, string destination); Unit EmptyFolder(string folder); - Task ReadAllLines(string path); Task GetHash(string path); string GetCustomOrDefaultFile(string folder, string file); } diff --git a/ErsatzTV.Core/Metadata/LocalFileSystem.cs b/ErsatzTV.Core/Metadata/LocalFileSystem.cs index 040da855c..c81a02ab8 100644 --- a/ErsatzTV.Core/Metadata/LocalFileSystem.cs +++ b/ErsatzTV.Core/Metadata/LocalFileSystem.cs @@ -13,9 +13,9 @@ public class LocalFileSystem(IFileSystem fileSystem, IClient client, ILogger ListSubdirectories(string folder) { - if (Directory.Exists(folder)) + if (fileSystem.Directory.Exists(folder)) { try { - return Directory.EnumerateDirectories(folder); + return fileSystem.Directory.EnumerateDirectories(folder); } catch (UnauthorizedAccessException) { @@ -62,11 +62,11 @@ public class LocalFileSystem(IFileSystem fileSystem, IClient client, ILogger ListFiles(string folder) { - if (Directory.Exists(folder)) + if (fileSystem.Directory.Exists(folder)) { try { - return Directory.EnumerateFiles(folder, "*", SearchOption.TopDirectoryOnly) + return fileSystem.Directory.EnumerateFiles(folder, "*", SearchOption.TopDirectoryOnly) .Where(path => !Path.GetFileName(path).StartsWith("._", StringComparison.OrdinalIgnoreCase)); } catch (UnauthorizedAccessException) @@ -85,11 +85,11 @@ public class LocalFileSystem(IFileSystem fileSystem, IClient client, ILogger ListFiles(string folder, string searchPattern) { - if (folder is not null && Directory.Exists(folder)) + if (folder is not null && fileSystem.Directory.Exists(folder)) { try { - return Directory.EnumerateFiles(folder, searchPattern, SearchOption.TopDirectoryOnly) + return fileSystem.Directory.EnumerateFiles(folder, searchPattern, SearchOption.TopDirectoryOnly) .Where(path => !Path.GetFileName(path).StartsWith("._", StringComparison.OrdinalIgnoreCase)); } catch (UnauthorizedAccessException) @@ -108,13 +108,13 @@ public class LocalFileSystem(IFileSystem fileSystem, IClient client, ILogger ListFiles(string folder, params string[] searchPatterns) { - if (folder is not null && Directory.Exists(folder)) + if (folder is not null && fileSystem.Directory.Exists(folder)) { try { return searchPatterns .SelectMany(searchPattern => - Directory.EnumerateFiles(folder, searchPattern, SearchOption.TopDirectoryOnly) + fileSystem.Directory.EnumerateFiles(folder, searchPattern, SearchOption.TopDirectoryOnly) .Where(path => !Path.GetFileName(path).StartsWith("._", StringComparison.OrdinalIgnoreCase))) .Distinct(); @@ -138,13 +138,13 @@ public class LocalFileSystem(IFileSystem fileSystem, IClient client, ILogger ReadAllLines(string path) => File.ReadAllLinesAsync(path); - [SuppressMessage("Security", "CA5351:Do Not Use Broken Cryptographic Algorithms")] public async Task GetHash(string path) { using var md5 = MD5.Create(); - await using var stream = File.OpenRead(path); + await using var stream = fileSystem.File.OpenRead(path); return await md5.ComputeHashAsync(stream); } diff --git a/ErsatzTV.Infrastructure/Streaming/Graphics/GraphicsElementLoader.cs b/ErsatzTV.Infrastructure/Streaming/Graphics/GraphicsElementLoader.cs index 2a1b57167..d9572f9b3 100644 --- a/ErsatzTV.Infrastructure/Streaming/Graphics/GraphicsElementLoader.cs +++ b/ErsatzTV.Infrastructure/Streaming/Graphics/GraphicsElementLoader.cs @@ -3,7 +3,6 @@ using System.Text; using System.Text.RegularExpressions; using ErsatzTV.Core.Domain; using ErsatzTV.Core.Graphics; -using ErsatzTV.Core.Interfaces.Metadata; using ErsatzTV.Core.Interfaces.Repositories; using ErsatzTV.Core.Interfaces.Streaming; using ErsatzTV.Core.Metadata; @@ -20,7 +19,6 @@ namespace ErsatzTV.Infrastructure.Streaming.Graphics; public partial class GraphicsElementLoader( TemplateFunctions templateFunctions, IFileSystem fileSystem, - ILocalFileSystem localFileSystem, ITemplateDataRepository templateDataRepository, ILogger logger) : IGraphicsElementLoader @@ -189,7 +187,7 @@ public partial class GraphicsElementLoader( foreach (var reference in elementsWithEpg) { - foreach (string line in await localFileSystem.ReadAllLines(reference.GraphicsElement.Path)) + foreach (string line in await fileSystem.File.ReadAllLinesAsync(reference.GraphicsElement.Path)) { Match match = EpgEntriesRegex().Match(line); if (!match.Success || !int.TryParse(match.Groups[1].Value, out int value)) diff --git a/ErsatzTV.Scanner.Tests/Core/Fakes/FakeLocalFileSystem.cs b/ErsatzTV.Scanner.Tests/Core/Fakes/FakeLocalFileSystem.cs index 281cc5a3a..176ba0ecb 100644 --- a/ErsatzTV.Scanner.Tests/Core/Fakes/FakeLocalFileSystem.cs +++ b/ErsatzTV.Scanner.Tests/Core/Fakes/FakeLocalFileSystem.cs @@ -53,7 +53,6 @@ public class FakeLocalFileSystem : ILocalFileSystem Task.FromResult(Right(Unit.Default)); public Unit EmptyFolder(string folder) => Unit.Default; - public Task ReadAllLines(string path) => throw new NotImplementedException(); public Task GetHash(string path) => throw new NotImplementedException(); public string GetCustomOrDefaultFile(string folder, string file)