add /api/player/play endpoint

fix not being able to play track with a playlist reference ``&list=`` attached
This commit is contained in:
Tim Müller
2022-03-26 11:23:40 +01:00
parent 05d8af4d0e
commit ed33e5d76d
13 changed files with 145 additions and 20 deletions

View File

@@ -12,7 +12,7 @@ public class InProcessEventBus
public event AsyncEventHandler<InProcessEventBus, ChannelDisconnectArgs>? OnDisconnectRequest;
public event AsyncEventHandler<InProcessEventBus, TrackPlayArgs> OnPlayRequest;
public void OnConnectRequestEvent(ChannelConnectArgs e)
{
_ = OnConnectRequest?.Invoke(this, e);
@@ -22,5 +22,10 @@ public class InProcessEventBus
{
_ = OnDisconnectRequest?.Invoke(this, e);
}
public void OnPlayRequestEvent(TrackPlayArgs e)
{
_ = OnPlayRequest?.Invoke(this, e);
}
}

View File

@@ -11,12 +11,14 @@ namespace TomatenMusic_Api
public class TomatenMusicDataService : IHostedService
{
private ILogger<TomatenMusicDataService> _logger;
public IServiceProvider _serviceProvider { get; set; } = TomatenMusicBot.ServiceProvider;
private IServiceProvider _serviceProvider { get; set; } = TomatenMusicBot.ServiceProvider;
public IAudioService _audioService { get; set; }
public TrackProvider TrackProvider { get; set; }
public TomatenMusicDataService(ILogger<TomatenMusicDataService> logger)
{
_logger = logger;
_audioService = _serviceProvider.GetRequiredService<IAudioService>();
TrackProvider = _serviceProvider.GetRequiredService<TrackProvider>();
}
public async Task<PlayerConnectionInfo> GetConnectionInfoAsync(ulong guild_id)

View File

@@ -26,9 +26,40 @@ namespace TomatenMusic_Api
{
_inProcessEventBus.OnConnectRequest += _inProcessEventBus_OnConnectRequest;
_inProcessEventBus.OnDisconnectRequest += _inProcessEventBus_OnDisconnectRequest;
_inProcessEventBus.OnPlayRequest += _inProcessEventBus_OnPlayRequest;
}
private async Task _inProcessEventBus_OnDisconnectRequest(InProcessEventBus sender, ChannelDisconnectArgs e)
private async Task _inProcessEventBus_OnPlayRequest(InProcessEventBus sender, TrackPlayArgs e)
{
GuildPlayer player = _audioService.GetPlayer<GuildPlayer>(e.GuildId);
if (e.Response.Tracks != null && e.Response.Tracks.Any())
{
if (e.Now)
await player.PlayTracksNowAsync(e.Response.Tracks);
else
await player.PlayTracksAsync(e.Response.Tracks);
return;
}
if (e.Response.IsPlaylist)
{
if (e.Now)
await player.PlayPlaylistNowAsync(e.Response.Playlist);
else
await player.PlayPlaylistAsync(e.Response.Playlist);
}else
{
if (e.Now)
await player.PlayNowAsync(e.Response.Track, e.StartTime);
else
await player.PlayAsync(e.Response.Track, e.StartTime);
}
}
private async Task _inProcessEventBus_OnDisconnectRequest(InProcessEventBus sender, ChannelDisconnectArgs e)
{
GuildPlayer player = _audioService.GetPlayer<GuildPlayer>(e.GuildId);
player.DisconnectAsync();