From 82bacc9efabda4e217e21e4256b640d94e433fe6 Mon Sep 17 00:00:00 2001 From: Angelo Breuer Date: Tue, 15 Aug 2023 20:05:45 +0200 Subject: [PATCH] feat: Implement TrackManager#SearchAsync for lavasrc --- .../Extensions/TrackManagerExtensions.cs | 64 +++++++++++++++++++ ...avalink4NET.Integrations.Lavasearch.csproj | 5 +- 2 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 src/Lavalink4NET.Integrations.Lavasearch/Extensions/TrackManagerExtensions.cs diff --git a/src/Lavalink4NET.Integrations.Lavasearch/Extensions/TrackManagerExtensions.cs b/src/Lavalink4NET.Integrations.Lavasearch/Extensions/TrackManagerExtensions.cs new file mode 100644 index 00000000..049d756d --- /dev/null +++ b/src/Lavalink4NET.Integrations.Lavasearch/Extensions/TrackManagerExtensions.cs @@ -0,0 +1,64 @@ +namespace Lavalink4NET.Integrations.Lavasearch.Extensions; + +using System.Collections.Immutable; +using System.Threading.Tasks; +using Lavalink4NET.Protocol.Models; +using Lavalink4NET.Rest; +using Lavalink4NET.Rest.Entities.Tracks; +using Lavalink4NET.Tracks; + +public static class TrackManagerExtensions +{ + public static async ValueTask SearchAsync( + this ITrackManager trackManager, + string query, + ImmutableArray? categories = null, + TrackLoadOptions loadOptions = default, + LavalinkApiResolutionScope resolutionScope = default, + CancellationToken cancellationToken = default) + { + ArgumentNullException.ThrowIfNull(trackManager); + ArgumentNullException.ThrowIfNull(query); + + var apiClient = await resolutionScope + .GetClientAsync(trackManager.ApiClientProvider, cancellationToken) + .ConfigureAwait(false); + + var searchResult = await apiClient + .SearchAsync(query, categories, loadOptions, cancellationToken) + .ConfigureAwait(false); + + if (searchResult is null) + { + return null; + } + + static PlaylistInformation CreatePlaylist(PlaylistInformationModel playlistInformationModel) + { + var playlistName = playlistInformationModel.Name; + return new PlaylistInformation(playlistName, null); + } + + var tracks = searchResult.Tracks is null + ? ImmutableArray.Empty + : searchResult.Tracks.Value.Select(LavalinkApiClient.CreateTrack).ToImmutableArray(); + + var albums = searchResult.Albums is null + ? ImmutableArray.Empty + : searchResult.Albums.Value.Select(CreatePlaylist).ToImmutableArray(); + + var artists = searchResult.Artists is null + ? ImmutableArray.Empty + : searchResult.Artists.Value.Select(CreatePlaylist).ToImmutableArray(); + + var playlists = searchResult.Playlists is null + ? ImmutableArray.Empty + : searchResult.Playlists.Value.Select(CreatePlaylist).ToImmutableArray(); + + var texts = searchResult.Texts is null + ? ImmutableArray.Empty + : searchResult.Texts.Value.Select(x => new TextResult(x.Text)).ToImmutableArray(); + + return new SearchResult(tracks, albums, artists, playlists, texts); + } +} diff --git a/src/Lavalink4NET.Integrations.Lavasearch/Lavalink4NET.Integrations.Lavasearch.csproj b/src/Lavalink4NET.Integrations.Lavasearch/Lavalink4NET.Integrations.Lavasearch.csproj index 7f11adea..c4427b54 100644 --- a/src/Lavalink4NET.Integrations.Lavasearch/Lavalink4NET.Integrations.Lavasearch.csproj +++ b/src/Lavalink4NET.Integrations.Lavasearch/Lavalink4NET.Integrations.Lavasearch.csproj @@ -7,12 +7,11 @@ - - + - +