diff --git a/src/Lavalink4NET.Integrations.Lavasrc/ExtendedPlaylistInformation.cs b/src/Lavalink4NET.Integrations.Lavasrc/ExtendedPlaylistInformation.cs new file mode 100644 index 00000000..3be38539 --- /dev/null +++ b/src/Lavalink4NET.Integrations.Lavasrc/ExtendedPlaylistInformation.cs @@ -0,0 +1,61 @@ +namespace Lavalink4NET.Integrations.Lavasrc; + +using System.Collections.Immutable; +using System.Text.Json.Nodes; +using Lavalink4NET.Rest.Entities.Tracks; + +public readonly record struct ExtendedPlaylistInformation(PlaylistInformation Playlist) +{ + public string Name => Playlist.Name; + + public ExtendedLavalinkTrack? SelectedTrack + { + get + { + return Playlist.SelectedTrack is null + ? null + : new ExtendedLavalinkTrack(Playlist.SelectedTrack); + } + } + + public IImmutableDictionary AdditionalInformation => Playlist.AdditionalInformation; + + public PlaylistType? Type + { + get + { + var playlistType = AdditionalInformation["type"]?.ToString(); + + return playlistType switch + { + "album" => PlaylistType.Album, + "playlist" => PlaylistType.Playlist, + "artist" => PlaylistType.Artist, + "recommendations" => PlaylistType.Recommendations, + _ => null + }; + } + } + + public Uri? Uri + { + get + { + var uri = AdditionalInformation["url"]?.ToString(); + return uri is null ? null : new Uri(uri); + } + } + + public Uri? ArtworkUri + { + get + { + var artworkUri = AdditionalInformation["artworkUrl"]?.ToString(); + return artworkUri is null ? null : new Uri(artworkUri); + } + } + + public string? Author => AdditionalInformation["author"]?.ToString(); + + public int? TotalTracks => AdditionalInformation["totalTracks"]?.GetValue(); +} diff --git a/src/Lavalink4NET.Integrations.Lavasrc/Lavalink4NET.Integrations.Lavasrc.csproj b/src/Lavalink4NET.Integrations.Lavasrc/Lavalink4NET.Integrations.Lavasrc.csproj index 15971e17..bfe2f327 100644 --- a/src/Lavalink4NET.Integrations.Lavasrc/Lavalink4NET.Integrations.Lavasrc.csproj +++ b/src/Lavalink4NET.Integrations.Lavasrc/Lavalink4NET.Integrations.Lavasrc.csproj @@ -7,7 +7,7 @@ - + diff --git a/src/Lavalink4NET.Integrations.Lavasrc/PlaylistType.cs b/src/Lavalink4NET.Integrations.Lavasrc/PlaylistType.cs new file mode 100644 index 00000000..cd52a4de --- /dev/null +++ b/src/Lavalink4NET.Integrations.Lavasrc/PlaylistType.cs @@ -0,0 +1,9 @@ +namespace Lavalink4NET.Integrations.Lavasrc; + +public enum PlaylistType : byte +{ + Album, + Playlist, + Artist, + Recommendations, +}