Made repository methods asynchronous. Simplified playlist repository. Use playlist manager in the app, and left playlist repository to only be used by the playlist manager.

This commit is contained in:
2026-07-24 09:49:58 -04:00
parent 0acbab1215
commit 63938b0139
14 changed files with 181 additions and 96 deletions

View File

@@ -8,10 +8,10 @@ public abstract class FileRepository<TObject> : IRepository<TObject> where TObje
protected abstract string Extension { get; }
protected abstract string GetNewFileName();
protected abstract string Serialize(TObject playlist);
protected abstract TObject Deserialize(Stream stream);
protected abstract Task<string> SerializeAsync(TObject playlist);
protected abstract Task<TObject> DeserializeAsync(Stream stream);
public FileRepository()
public async Task InitializeAsync()
{
if (string.IsNullOrWhiteSpace(DirectoryName))
return;
@@ -23,7 +23,7 @@ public abstract class FileRepository<TObject> : IRepository<TObject> where TObje
return;
List<string> fileNames = GetAllFileNames();
LoadFileNamesIntoMap(fileNames);
await LoadFileNamesIntoMapAsync(fileNames);
}
private List<string> GetAllFileNames()
@@ -36,7 +36,7 @@ public abstract class FileRepository<TObject> : IRepository<TObject> where TObje
return [.. fileInfoList.Select(fileInfo => fileInfo.FullName)];
}
private void LoadFileNamesIntoMap(List<string> fileNames)
private async Task LoadFileNamesIntoMapAsync(List<string> fileNames)
{
foreach (var fileName in fileNames)
{
@@ -44,7 +44,7 @@ public abstract class FileRepository<TObject> : IRepository<TObject> where TObje
try
{
TObject obj = Deserialize(textReader.BaseStream);
TObject obj = await DeserializeAsync(textReader.BaseStream);
_fileNameMap.Add(obj, fileName);
}
catch (Exception)
@@ -59,9 +59,9 @@ public abstract class FileRepository<TObject> : IRepository<TObject> where TObje
return [.. _fileNameMap.Keys];
}
public void Save(TObject obj)
public async Task SaveAsync(TObject obj)
{
string serializedObject = Serialize(obj);
string serializedObject = await SerializeAsync(obj);
string fileName = Path.Combine(DirectoryName, GetFileName(obj));
string? path = Path.GetDirectoryName(fileName);
@@ -72,8 +72,10 @@ public abstract class FileRepository<TObject> : IRepository<TObject> where TObje
if (Directory.Exists(path) == false)
Directory.CreateDirectory(path);
using TextWriter textWriter = new StreamWriter(fileName);
textWriter.Write(serializedObject);
//using TextWriter textWriter = new StreamWriter(fileName);
//await textWriter.WriteAsync(serializedObject);
await File.WriteAllTextAsync(fileName, serializedObject);
}
private string GetFileName(TObject obj)
@@ -91,6 +93,8 @@ public abstract class FileRepository<TObject> : IRepository<TObject> where TObje
{
string fileName = Path.Combine(DirectoryName, GetFileName(obj));
_fileNameMap.Remove(obj);
if (File.Exists(fileName))
File.Delete(fileName);
}

View File

@@ -2,7 +2,8 @@
public interface IRepository<TObject>
{
Task InitializeAsync();
List<TObject> Get();
void Save(TObject value);
Task SaveAsync(TObject value);
void Delete(TObject value);
}

View File

@@ -14,13 +14,19 @@ public abstract class JsonFileRepository<TObject> : FileRepository<TObject> wher
protected override string Extension => "json";
protected override TObject Deserialize(Stream stream)
protected override async Task<TObject> DeserializeAsync(Stream stream)
{
return JsonSerializer.Deserialize<TObject>(stream) ?? new();
return await JsonSerializer.DeserializeAsync<TObject>(stream) ?? new();
}
protected override string Serialize(TObject obj)
protected override async Task<string> SerializeAsync(TObject obj)
{
return JsonSerializer.Serialize(obj, _options);
using MemoryStream memoryStream = new();
await JsonSerializer.SerializeAsync(memoryStream, obj, _options);
memoryStream.Position = 0;
using StreamReader reader = new(memoryStream);
return await reader.ReadToEndAsync();
}
}

View File

@@ -2,20 +2,20 @@
namespace Harmonia.Core.Data;
public abstract class XMLFileRepository<TObject> : FileRepository<TObject> where TObject : notnull, new()
public abstract class XmlFileRepository<TObject> : FileRepository<TObject> where TObject : notnull, new()
{
private readonly XmlSerializer _serializer = new(typeof(TObject));
protected override string Extension => "xml";
protected override TObject Deserialize(Stream stream)
protected override async Task<TObject> DeserializeAsync(Stream stream)
{
using TextReader textReader = new StreamReader(stream);
return (TObject?)_serializer.Deserialize(textReader) ?? new();
}
protected override string Serialize(TObject obj)
protected override async Task<string> SerializeAsync(TObject obj)
{
using TextWriter textWriter = new StringWriter();