Browse Source

remove readalllines

pull/2655/head
Jason Dove 8 months ago
parent
commit
d49b40bf9f
No known key found for this signature in database
  1. 20
      ErsatzTV.Application/Streaming/HlsSessionWorker.cs
  2. 1
      ErsatzTV.Core/Interfaces/Metadata/ILocalFileSystem.cs
  3. 42
      ErsatzTV.Core/Metadata/LocalFileSystem.cs
  4. 4
      ErsatzTV.Infrastructure/Streaming/Graphics/GraphicsElementLoader.cs
  5. 1
      ErsatzTV.Scanner.Tests/Core/Fakes/FakeLocalFileSystem.cs

20
ErsatzTV.Application/Streaming/HlsSessionWorker.cs

@ -683,9 +683,9 @@ public class HlsSessionWorker : IHlsSessionWorker
var generatedAtHash = new System.Collections.Generic.HashSet<long>(); var generatedAtHash = new System.Collections.Generic.HashSet<long>();
// delete old segments // delete old segments
var allSegments = Directory.GetFiles(_workingDirectory, "live*.ts") var allSegments = _fileSystem.Directory.GetFiles(_workingDirectory, "live*.ts")
.Append(Directory.GetFiles(_workingDirectory, "live*.mp4")) .Append(_fileSystem.Directory.GetFiles(_workingDirectory, "live*.mp4"))
.Append(Directory.GetFiles(_workingDirectory, "live*.m4s")) .Append(_fileSystem.Directory.GetFiles(_workingDirectory, "live*.m4s"))
.Map(file => .Map(file =>
{ {
string fileName = Path.GetFileName(file); string fileName = Path.GetFileName(file);
@ -703,7 +703,7 @@ public class HlsSessionWorker : IHlsSessionWorker
}) })
.ToList(); .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) .Map(file => long.TryParse(Path.GetFileName(file).Split('_')[0], out long generatedAt) && !generatedAtHash.Contains(generatedAt)
? new Segment(file, 0, generatedAt) ? new Segment(file, 0, generatedAt)
: Option<Segment>.None) : Option<Segment>.None)
@ -743,7 +743,7 @@ public class HlsSessionWorker : IHlsSessionWorker
{ {
try try
{ {
File.Delete(segment.File); _fileSystem.File.Delete(segment.File);
} }
catch (IOException) catch (IOException)
{ {
@ -756,12 +756,12 @@ public class HlsSessionWorker : IHlsSessionWorker
private async Task RefreshInits() private async Task RefreshInits()
{ {
var allSegments = Directory.GetFiles(_workingDirectory, "live*.m4s") var allSegments = _fileSystem.Directory.GetFiles(_workingDirectory, "live*.m4s")
.Map(Path.GetFileName) .Map(Path.GetFileName)
.Map(s => s.Split("_")[1]) .Map(s => s.Split("_")[1])
.ToHashSet(); .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]; string key = Path.GetFileName(file).Split("_")[0];
if (allSegments.Contains(key)) if (allSegments.Contains(key))
@ -816,9 +816,9 @@ public class HlsSessionWorker : IHlsSessionWorker
private async Task<Option<string[]>> ReadPlaylistLines(CancellationToken cancellationToken) private async Task<Option<string[]>> ReadPlaylistLines(CancellationToken cancellationToken)
{ {
string fileName = PlaylistFileName(); 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); _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) private async Task WritePlaylist(string playlist, CancellationToken cancellationToken)
{ {
string fileName = PlaylistFileName(); string fileName = PlaylistFileName();
await File.WriteAllTextAsync(fileName, playlist, cancellationToken); await _fileSystem.File.WriteAllTextAsync(fileName, playlist, cancellationToken);
} }
private string PlaylistFileName() => Path.Combine(_workingDirectory, "live.m3u8"); private string PlaylistFileName() => Path.Combine(_workingDirectory, "live.m3u8");

1
ErsatzTV.Core/Interfaces/Metadata/ILocalFileSystem.cs

@ -10,7 +10,6 @@ public interface ILocalFileSystem
IEnumerable<string> ListFiles(string folder, params string[] searchPatterns); IEnumerable<string> ListFiles(string folder, params string[] searchPatterns);
Task<Either<BaseError, Unit>> CopyFile(string source, string destination); Task<Either<BaseError, Unit>> CopyFile(string source, string destination);
Unit EmptyFolder(string folder); Unit EmptyFolder(string folder);
Task<string[]> ReadAllLines(string path);
Task<byte[]> GetHash(string path); Task<byte[]> GetHash(string path);
string GetCustomOrDefaultFile(string folder, string file); string GetCustomOrDefaultFile(string folder, string file);
} }

42
ErsatzTV.Core/Metadata/LocalFileSystem.cs

@ -13,9 +13,9 @@ public class LocalFileSystem(IFileSystem fileSystem, IClient client, ILogger<Loc
{ {
try try
{ {
if (folder != null && !Directory.Exists(folder)) if (folder != null && !fileSystem.Directory.Exists(folder))
{ {
Directory.CreateDirectory(folder); fileSystem.Directory.CreateDirectory(folder);
} }
} }
catch (Exception ex) catch (Exception ex)
@ -30,7 +30,7 @@ public class LocalFileSystem(IFileSystem fileSystem, IClient client, ILogger<Loc
{ {
try try
{ {
return File.GetLastWriteTimeUtc(path); return fileSystem.File.GetLastWriteTimeUtc(path);
} }
catch catch
{ {
@ -40,11 +40,11 @@ public class LocalFileSystem(IFileSystem fileSystem, IClient client, ILogger<Loc
public IEnumerable<string> ListSubdirectories(string folder) public IEnumerable<string> ListSubdirectories(string folder)
{ {
if (Directory.Exists(folder)) if (fileSystem.Directory.Exists(folder))
{ {
try try
{ {
return Directory.EnumerateDirectories(folder); return fileSystem.Directory.EnumerateDirectories(folder);
} }
catch (UnauthorizedAccessException) catch (UnauthorizedAccessException)
{ {
@ -62,11 +62,11 @@ public class LocalFileSystem(IFileSystem fileSystem, IClient client, ILogger<Loc
public IEnumerable<string> ListFiles(string folder) public IEnumerable<string> ListFiles(string folder)
{ {
if (Directory.Exists(folder)) if (fileSystem.Directory.Exists(folder))
{ {
try try
{ {
return Directory.EnumerateFiles(folder, "*", SearchOption.TopDirectoryOnly) return fileSystem.Directory.EnumerateFiles(folder, "*", SearchOption.TopDirectoryOnly)
.Where(path => !Path.GetFileName(path).StartsWith("._", StringComparison.OrdinalIgnoreCase)); .Where(path => !Path.GetFileName(path).StartsWith("._", StringComparison.OrdinalIgnoreCase));
} }
catch (UnauthorizedAccessException) catch (UnauthorizedAccessException)
@ -85,11 +85,11 @@ public class LocalFileSystem(IFileSystem fileSystem, IClient client, ILogger<Loc
public IEnumerable<string> ListFiles(string folder, string searchPattern) public IEnumerable<string> ListFiles(string folder, string searchPattern)
{ {
if (folder is not null && Directory.Exists(folder)) if (folder is not null && fileSystem.Directory.Exists(folder))
{ {
try try
{ {
return Directory.EnumerateFiles(folder, searchPattern, SearchOption.TopDirectoryOnly) return fileSystem.Directory.EnumerateFiles(folder, searchPattern, SearchOption.TopDirectoryOnly)
.Where(path => !Path.GetFileName(path).StartsWith("._", StringComparison.OrdinalIgnoreCase)); .Where(path => !Path.GetFileName(path).StartsWith("._", StringComparison.OrdinalIgnoreCase));
} }
catch (UnauthorizedAccessException) catch (UnauthorizedAccessException)
@ -108,13 +108,13 @@ public class LocalFileSystem(IFileSystem fileSystem, IClient client, ILogger<Loc
public IEnumerable<string> ListFiles(string folder, params string[] searchPatterns) public IEnumerable<string> ListFiles(string folder, params string[] searchPatterns)
{ {
if (folder is not null && Directory.Exists(folder)) if (folder is not null && fileSystem.Directory.Exists(folder))
{ {
try try
{ {
return searchPatterns return searchPatterns
.SelectMany(searchPattern => .SelectMany(searchPattern =>
Directory.EnumerateFiles(folder, searchPattern, SearchOption.TopDirectoryOnly) fileSystem.Directory.EnumerateFiles(folder, searchPattern, SearchOption.TopDirectoryOnly)
.Where(path => .Where(path =>
!Path.GetFileName(path).StartsWith("._", StringComparison.OrdinalIgnoreCase))) !Path.GetFileName(path).StartsWith("._", StringComparison.OrdinalIgnoreCase)))
.Distinct(); .Distinct();
@ -138,13 +138,13 @@ public class LocalFileSystem(IFileSystem fileSystem, IClient client, ILogger<Loc
try try
{ {
string directory = Path.GetDirectoryName(destination) ?? string.Empty; string directory = Path.GetDirectoryName(destination) ?? string.Empty;
if (!Directory.Exists(directory)) if (!fileSystem.Directory.Exists(directory))
{ {
Directory.CreateDirectory(directory); fileSystem.Directory.CreateDirectory(directory);
} }
await using FileStream sourceStream = File.OpenRead(source); await using FileSystemStream sourceStream = fileSystem.File.OpenRead(source);
await using FileStream destinationStream = File.Create(destination); await using FileSystemStream destinationStream = fileSystem.File.Create(destination);
await sourceStream.CopyToAsync(destinationStream); await sourceStream.CopyToAsync(destinationStream);
return Unit.Default; return Unit.Default;
@ -160,14 +160,14 @@ public class LocalFileSystem(IFileSystem fileSystem, IClient client, ILogger<Loc
{ {
try try
{ {
foreach (string file in Directory.GetFiles(folder)) foreach (string file in fileSystem.Directory.GetFiles(folder))
{ {
File.Delete(file); fileSystem.File.Delete(file);
} }
foreach (string directory in Directory.GetDirectories(folder)) foreach (string directory in fileSystem.Directory.GetDirectories(folder))
{ {
Directory.Delete(directory, true); fileSystem.Directory.Delete(directory, true);
} }
} }
catch (Exception ex) catch (Exception ex)
@ -178,13 +178,11 @@ public class LocalFileSystem(IFileSystem fileSystem, IClient client, ILogger<Loc
return Unit.Default; return Unit.Default;
} }
public Task<string[]> ReadAllLines(string path) => File.ReadAllLinesAsync(path);
[SuppressMessage("Security", "CA5351:Do Not Use Broken Cryptographic Algorithms")] [SuppressMessage("Security", "CA5351:Do Not Use Broken Cryptographic Algorithms")]
public async Task<byte[]> GetHash(string path) public async Task<byte[]> GetHash(string path)
{ {
using var md5 = MD5.Create(); 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); return await md5.ComputeHashAsync(stream);
} }

4
ErsatzTV.Infrastructure/Streaming/Graphics/GraphicsElementLoader.cs

@ -3,7 +3,6 @@ using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using ErsatzTV.Core.Domain; using ErsatzTV.Core.Domain;
using ErsatzTV.Core.Graphics; using ErsatzTV.Core.Graphics;
using ErsatzTV.Core.Interfaces.Metadata;
using ErsatzTV.Core.Interfaces.Repositories; using ErsatzTV.Core.Interfaces.Repositories;
using ErsatzTV.Core.Interfaces.Streaming; using ErsatzTV.Core.Interfaces.Streaming;
using ErsatzTV.Core.Metadata; using ErsatzTV.Core.Metadata;
@ -20,7 +19,6 @@ namespace ErsatzTV.Infrastructure.Streaming.Graphics;
public partial class GraphicsElementLoader( public partial class GraphicsElementLoader(
TemplateFunctions templateFunctions, TemplateFunctions templateFunctions,
IFileSystem fileSystem, IFileSystem fileSystem,
ILocalFileSystem localFileSystem,
ITemplateDataRepository templateDataRepository, ITemplateDataRepository templateDataRepository,
ILogger<GraphicsElementLoader> logger) ILogger<GraphicsElementLoader> logger)
: IGraphicsElementLoader : IGraphicsElementLoader
@ -189,7 +187,7 @@ public partial class GraphicsElementLoader(
foreach (var reference in elementsWithEpg) 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); Match match = EpgEntriesRegex().Match(line);
if (!match.Success || !int.TryParse(match.Groups[1].Value, out int value)) if (!match.Success || !int.TryParse(match.Groups[1].Value, out int value))

1
ErsatzTV.Scanner.Tests/Core/Fakes/FakeLocalFileSystem.cs

@ -53,7 +53,6 @@ public class FakeLocalFileSystem : ILocalFileSystem
Task.FromResult(Right<BaseError, Unit>(Unit.Default)); Task.FromResult(Right<BaseError, Unit>(Unit.Default));
public Unit EmptyFolder(string folder) => Unit.Default; public Unit EmptyFolder(string folder) => Unit.Default;
public Task<string[]> ReadAllLines(string path) => throw new NotImplementedException();
public Task<byte[]> GetHash(string path) => throw new NotImplementedException(); public Task<byte[]> GetHash(string path) => throw new NotImplementedException();
public string GetCustomOrDefaultFile(string folder, string file) public string GetCustomOrDefaultFile(string folder, string file)

Loading…
Cancel
Save