Files
harmonia/Harmonia.Core/Playlists/PlaylistRepository.cs

71 lines
1.9 KiB
C#

using Harmonia.Core.Data;
namespace Harmonia.Core.Playlists;
public class PlaylistRepository : JsonFileRepository<Playlist>, IPlaylistRepository
{
protected override string DirectoryName => Path.Combine("Playlists");
public PlaylistRepository()
{
List<Playlist> playlists = Get();
foreach (Playlist playlist in playlists)
{
playlist.PlaylistUpdated += OnPlaylistUpdated;
}
}
private void OnPlaylistUpdated(object? sender, PlaylistUpdatedEventArgs e)
{
if (sender is not Playlist playlist)
return;
Save(playlist);
//PlaylistUpdated?.Invoke(sender, e);
}
public Playlist? GetPlaylist(PlaylistSong playlistSong)
{
return Get().FirstOrDefault(playlist => playlist.Songs.Contains(playlistSong));
}
protected override string GetNewFileName()
{
for (int i = 0; i < 1000; i++)
{
string shortFileName = $"Playlist{i.ToString().PadLeft(3, '0')}.{Extension}";
string filePath = Path.Combine(DirectoryName, shortFileName);
if (File.Exists(filePath) == false)
return shortFileName;
}
throw new Exception("Unable to determine new fileName");
}
public event EventHandler<PlaylistAddedEventArgs>? PlaylistAdded;
//public event EventHandler<PlaylistUpdatedEventArgs>? PlaylistUpdated;
public event EventHandler<PlaylistRemovedEventArgs>? PlaylistRemoved;
public void AddPlaylist()
{
Playlist playlist = new()
{
Name = "New Playlist"
};
playlist.PlaylistUpdated += OnPlaylistUpdated;
Save(playlist);
PlaylistAdded?.Invoke(this, new(playlist));
}
public void RemovePlaylist(Playlist playlist)
{
playlist.PlaylistUpdated -= OnPlaylistUpdated;
Delete(playlist);
PlaylistRemoved?.Invoke(this, new(playlist));
}
}