From 2d2953340b1c939eff9b3428785368d7bee77462 Mon Sep 17 00:00:00 2001 From: Abitofevrything Date: Sat, 9 Dec 2023 11:46:07 +0100 Subject: [PATCH] Add methods to LavalinkPlugin for loading tracks --- packages/lavalink/lib/src/client.dart | 4 +-- packages/nyxx_lavalink/lib/src/plugin.dart | 34 +++++++++++++++++++--- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/packages/lavalink/lib/src/client.dart b/packages/lavalink/lib/src/client.dart index 76862ae..da83895 100644 --- a/packages/lavalink/lib/src/client.dart +++ b/packages/lavalink/lib/src/client.dart @@ -124,11 +124,11 @@ class HttpLavalinkClient { /// Unmark a failed address in the RoutePlanner extension. Future unmarkFailedAddress(String address) async { - jsonDecode(await _executeSafe( + await _executeSafe( 'POST', '/v4/routeplanner/free/address', body: {'address': address}, - )); + ); } /// Unmark all failed addresses in the RoutePlanner extension. diff --git a/packages/nyxx_lavalink/lib/src/plugin.dart b/packages/nyxx_lavalink/lib/src/plugin.dart index 7f477fa..81ad141 100644 --- a/packages/nyxx_lavalink/lib/src/plugin.dart +++ b/packages/nyxx_lavalink/lib/src/plugin.dart @@ -18,7 +18,7 @@ class LavalinkPlugin extends NyxxPlugin { final Uri base; final String password; - final LavalinkClient? innerClient; + final LavalinkClient? _innerClient; final StreamController _messagesController = StreamController.broadcast(); Stream get onMessage => _messagesController.stream; @@ -40,11 +40,37 @@ class LavalinkPlugin extends NyxxPlugin { LavalinkPlugin({ required this.base, required this.password, - this.innerClient, - }); + LavalinkClient? innerClient, + }) : _innerClient = innerClient; @override NyxxPluginState createState() => _LavalinkPluginState(this); + + Future _withClient(Future Function(HttpLavalinkClient client) f) async { + if (_innerClient case final innerClient?) { + return f(innerClient); + } else { + final client = HttpLavalinkClient(base: base, password: password); + final result = await f(client); + await client.close(); + return result; + } + } + + Future loadTrack(String identifier) => + _withClient((client) => client.loadTrack(identifier)); + + Future decodeTrack(String encodedTrack) => + _withClient((client) => client.decodeTrack(encodedTrack)); + + Future> decodeTracks(List encodedTracks) => + _withClient((client) => client.decodeTracks(encodedTracks)); + + Future getInfo() => _withClient((client) => client.getInfo()); + + Future getStats() => _withClient((client) => client.getStats()); + + Future getVersion() => _withClient((client) => client.getVersion()); } class _LavalinkPluginState extends NyxxPluginState { @@ -59,7 +85,7 @@ class _LavalinkPluginState extends NyxxPluginState Future afterConnect(NyxxGateway client) async { await super.afterConnect(client); - lavalinkClient = plugin.innerClient ?? + lavalinkClient = plugin._innerClient ?? await LavalinkClient.connect( plugin.base, password: plugin.password,