diff --git a/PlaylistShared.Api/Controllers/AudioController.cs b/PlaylistShared.Api/Controllers/AudioController.cs index 8611e3a..0491a80 100644 --- a/PlaylistShared.Api/Controllers/AudioController.cs +++ b/PlaylistShared.Api/Controllers/AudioController.cs @@ -3,6 +3,8 @@ using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using PlaylistShared.Api.Entities; using PlaylistShared.Api.Services; +using PlaylistShared.Shared; +using PlaylistShared.Shared.DTO; using System.Security.Claims; namespace PlaylistShared.Api.Controllers; @@ -70,6 +72,24 @@ public class AudioController : ControllerBase return new EmptyResult(); } + [HttpGet("track-info/{trackId}")] + [AllowAnonymous] + public async Task>> GetTrackInfo(string trackId, [FromQuery] string? access_token = null, [FromQuery] string? shared_id = null) + { + var user = await GetUserFromToken(access_token); + if (user == null) user = await GetUserFromSharedPlaylistId(shared_id); + if (user == null) return Unauthorized(); + + var track = await _yandexService.GetYTrackAsync(user, trackId); + if (track == null) return NotFound(); + + return Ok(ApiResponse.Ok(new TrackInfoDto + { + Title = track.Title, + CoverUri = track.CoverUri, + })); + } + private async Task GetUserFromToken(string? token) { if (string.IsNullOrEmpty(token)) return null; diff --git a/PlaylistShared.Api/Services/YandexMusicService.cs b/PlaylistShared.Api/Services/YandexMusicService.cs index 19fef84..63c2ea6 100644 --- a/PlaylistShared.Api/Services/YandexMusicService.cs +++ b/PlaylistShared.Api/Services/YandexMusicService.cs @@ -4,6 +4,7 @@ using PlaylistShared.Shared.DTO; using YandexMusic; using YandexMusic.API.Extensions.API; using YandexMusic.API.Models.Playlist; +using YandexMusic.API.Models.Track; namespace PlaylistShared.Api.Services; @@ -74,12 +75,18 @@ public class YandexMusicService } public async Task GetTrackFileUrlAsync(ApplicationUser user, string trackId) + { + var track = await GetYTrackAsync(user, trackId); + if (track == null) return null; + return await track.GetLinkAsync(); + } + + public async Task GetYTrackAsync(ApplicationUser user, string trackId) { using var client = await CreateClientAsync(user); if (client == null) return null; var track = await client.GetTrackAsync(trackId); - if (track == null) return null; - return await track.GetLinkAsync(); + return track; } public string EncryptToken(string token) => _dataProtector.Protect(token); diff --git a/PlaylistShared.Pwa/Components/Global/AudioPlayer.razor b/PlaylistShared.Pwa/Components/Global/AudioPlayer.razor index 76cae8d..7276499 100644 --- a/PlaylistShared.Pwa/Components/Global/AudioPlayer.razor +++ b/PlaylistShared.Pwa/Components/Global/AudioPlayer.razor @@ -7,8 +7,16 @@ @inject ISnackbar Snackbar @inject HttpClient Http - +
+
+ @if (!string.IsNullOrEmpty(_currentTrackCoverUrl)) + { + + } + @_currentTrackTitle +
+