| namespace GrpcShared.DTO.Track | namespace GrpcShared.DTO.Track | ||||
| { | { | ||||
| [ProtoContract] | [ProtoContract] | ||||
| public class TrackResponse | |||||
| public class CurrentTrackResponse | |||||
| { | { | ||||
| [ProtoMember(1)] | [ProtoMember(1)] | ||||
| public string? timestamp{ get; set; } | public string? timestamp{ get; set; } |
| using Newtonsoft.Json; | |||||
| using ProtoBuf; | |||||
| using System; | |||||
| using System.Collections.Generic; | |||||
| using System.Linq; | |||||
| using System.Text; | |||||
| using System.Threading.Tasks; | |||||
| namespace GrpcShared.DTO.TrackByID | |||||
| { | |||||
| [ProtoContract] | |||||
| public class TrackRequest | |||||
| { | |||||
| [ProtoMember(1)] | |||||
| [JsonProperty("id")] | |||||
| public string? TrackID { get; set; } | |||||
| [ProtoMember(2)] | |||||
| [JsonProperty("token")] | |||||
| public string? Token { get; set; } | |||||
| } | |||||
| } |
| using GrpcShared.DTO.Track; | |||||
| using Newtonsoft.Json; | |||||
| using ProtoBuf; | |||||
| using System; | |||||
| using System.Collections.Generic; | |||||
| using System.Linq; | |||||
| using System.Text; | |||||
| using System.Threading.Tasks; | |||||
| namespace GrpcShared.DTO.TrackByID | |||||
| { | |||||
| [ProtoContract] | |||||
| public class TrackResponse | |||||
| { | |||||
| [ProtoMember(1)] | |||||
| [JsonProperty("album")] | |||||
| public Album Album { get; set; } | |||||
| [ProtoMember(2)] | |||||
| [JsonProperty("artists")] | |||||
| public Artist[] Artists { get; set; } | |||||
| [ProtoMember(3)] | |||||
| [JsonProperty("duration_ms")] | |||||
| public long DurationMs { get; set; } | |||||
| [ProtoMember(4)] | |||||
| [JsonProperty("href")] | |||||
| public Uri Href { get; set; } | |||||
| [ProtoMember(5)] | |||||
| [JsonProperty("id")] | |||||
| public string Id { get; set; } | |||||
| [ProtoMember(6)] | |||||
| [JsonProperty("name")] | |||||
| public string Name { get; set; } | |||||
| } | |||||
| } |
| [Service] | [Service] | ||||
| public interface IStatsService | public interface IStatsService | ||||
| { | { | ||||
| Task<TrackResponse> GetCurrentlyPlayingTrack(TokenMessage token); | |||||
| Task<CurrentTrackResponse> GetCurrentlyPlayingTrack(TokenMessage token); | |||||
| } | } | ||||
| } | } |
| using GrpcShared.DTO.Track.MultipleTrack; | using GrpcShared.DTO.Track.MultipleTrack; | ||||
| using GrpcShared.DTO.Track.SaveTracks; | using GrpcShared.DTO.Track.SaveTracks; | ||||
| using GrpcShared.DTO.Track.SingleTrack; | using GrpcShared.DTO.Track.SingleTrack; | ||||
| using GrpcShared.DTO.TrackByID; | |||||
| using ProtoBuf.Grpc.Configuration; | using ProtoBuf.Grpc.Configuration; | ||||
| using System; | using System; | ||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| Task<SingleTrackResponse> ListSingleTrackAsync(SingleTrackRequest request); | Task<SingleTrackResponse> ListSingleTrackAsync(SingleTrackRequest request); | ||||
| Task<MultipleTrackResponse> ListMultipleTrackAsync(MultipleTrackRequest request); | Task<MultipleTrackResponse> ListMultipleTrackAsync(MultipleTrackRequest request); | ||||
| Task SaveTracks(SaveTracksRequest request); | Task SaveTracks(SaveTracksRequest request); | ||||
| Task<TrackResponse> GetById(TrackRequest request); | |||||
| } | } | ||||
| } | } |
| @using NemAnBlazor.Services.Interfaces | @using NemAnBlazor.Services.Interfaces | ||||
| @inject Blazored.SessionStorage.ISessionStorageService sessionStorage | @inject Blazored.SessionStorage.ISessionStorageService sessionStorage | ||||
| @inject IStatsClientService spotifyService | @inject IStatsClientService spotifyService | ||||
| @inject ITrackClientService trackService | |||||
| <h3>Home</h3> | <h3>Home</h3> | ||||
| string tokenS = await sessionStorage.GetItemAsync<string>("token"); | string tokenS = await sessionStorage.GetItemAsync<string>("token"); | ||||
| TokenMessage token = new TokenMessage(tokenS); | TokenMessage token = new TokenMessage(tokenS); | ||||
| TrackResponse response = await spotifyService.GetCurrentlyPlayingTrack(token); | |||||
| // CurrentTrackResponse response = await spotifyService.GetCurrentlyPlayingTrack(token); | |||||
| //napravi komponentu koja ce da prikazuje sta trenutno slusas i passuj joj parametre | |||||
| //4fy1A2WBTPX55mUI16TQXa | |||||
| var trackById = await trackService.GetById(new GrpcShared.DTO.TrackByID.TrackRequest { TrackID = "4fy1A2WBTPX55mUI16TQXa", Token = tokenS }); | |||||
| } | } | ||||
| } | } |
| { | { | ||||
| public interface IStatsClientService | public interface IStatsClientService | ||||
| { | { | ||||
| Task<TrackResponse> GetCurrentlyPlayingTrack(TokenMessage token); | |||||
| Task<CurrentTrackResponse> GetCurrentlyPlayingTrack(TokenMessage token); | |||||
| } | } | ||||
| } | } |
| using GrpcShared.DTO.Track.MultipleTrack; | using GrpcShared.DTO.Track.MultipleTrack; | ||||
| using GrpcShared.DTO.Track.SaveTracks; | using GrpcShared.DTO.Track.SaveTracks; | ||||
| using GrpcShared.DTO.Track.SingleTrack; | using GrpcShared.DTO.Track.SingleTrack; | ||||
| using GrpcShared.DTO.TrackByID; | |||||
| namespace NemAnBlazor.Services.Interfaces | namespace NemAnBlazor.Services.Interfaces | ||||
| { | { | ||||
| Task<SingleTrackResponse> GetListSingleTrackAsync(SingleTrackRequest request); | Task<SingleTrackResponse> GetListSingleTrackAsync(SingleTrackRequest request); | ||||
| Task<MultipleTrackResponse> GetListMultipleTrackAsync(MultipleTrackRequest request); | Task<MultipleTrackResponse> GetListMultipleTrackAsync(MultipleTrackRequest request); | ||||
| Task PutSaveTracks(SaveTracksRequest request); | Task PutSaveTracks(SaveTracksRequest request); | ||||
| Task<TrackResponse> GetById(TrackRequest request); | |||||
| } | } | ||||
| } | } |
| { | { | ||||
| _serviceClient = channel.CreateGrpcService<IStatsService>(); | _serviceClient = channel.CreateGrpcService<IStatsService>(); | ||||
| } | } | ||||
| public async Task<TrackResponse> GetCurrentlyPlayingTrack(TokenMessage token) | |||||
| public async Task<CurrentTrackResponse> GetCurrentlyPlayingTrack(TokenMessage token) | |||||
| { | { | ||||
| return await _serviceClient.GetCurrentlyPlayingTrack(token); | return await _serviceClient.GetCurrentlyPlayingTrack(token); | ||||
| } | } |
| using GrpcShared.DTO.Track.MultipleTrack; | using GrpcShared.DTO.Track.MultipleTrack; | ||||
| using GrpcShared.DTO.Track.SaveTracks; | using GrpcShared.DTO.Track.SaveTracks; | ||||
| using GrpcShared.DTO.Track.SingleTrack; | using GrpcShared.DTO.Track.SingleTrack; | ||||
| using GrpcShared.DTO.TrackByID; | |||||
| using GrpcShared.Interfaces; | using GrpcShared.Interfaces; | ||||
| using NemAnBlazor.Services.Interfaces; | using NemAnBlazor.Services.Interfaces; | ||||
| using ProtoBuf.Grpc.Client; | using ProtoBuf.Grpc.Client; | ||||
| { | { | ||||
| await _serviceClient.SaveTracks(request); | await _serviceClient.SaveTracks(request); | ||||
| } | } | ||||
| public async Task<TrackResponse> GetById(TrackRequest request) | |||||
| { | |||||
| return await _serviceClient.GetById(request); | |||||
| } | |||||
| } | } | ||||
| } | } |
| _httpClientFactory = httpClientFactory; | _httpClientFactory = httpClientFactory; | ||||
| } | } | ||||
| public async Task<TrackResponse> GetCurrentlyPlayingTrack(TokenMessage token) | |||||
| public async Task<CurrentTrackResponse> GetCurrentlyPlayingTrack(TokenMessage token) | |||||
| { | { | ||||
| var client = _httpClientFactory.CreateClient("HttpClient"); | var client = _httpClientFactory.CreateClient("HttpClient"); | ||||
| client.DefaultRequestHeaders.Add(HeaderNames.Authorization, "Bearer " + token.Token); | client.DefaultRequestHeaders.Add(HeaderNames.Authorization, "Bearer " + token.Token); | ||||
| var searchResult = await client.GetAsync($"me/player/currently-playing"); | var searchResult = await client.GetAsync($"me/player/currently-playing"); | ||||
| var responses = JsonConvert.DeserializeObject<TrackResponse>(await searchResult.Content.ReadAsStringAsync())!; | |||||
| var responses = JsonConvert.DeserializeObject<CurrentTrackResponse>(await searchResult.Content.ReadAsStringAsync())!; | |||||
| return responses; | return responses; | ||||
| using GrpcShared.DTO.Track.MultipleTrack; | using GrpcShared.DTO.Track.MultipleTrack; | ||||
| using GrpcShared.DTO.Track.SaveTracks; | using GrpcShared.DTO.Track.SaveTracks; | ||||
| using GrpcShared.DTO.Track.SingleTrack; | using GrpcShared.DTO.Track.SingleTrack; | ||||
| using GrpcShared.DTO.TrackByID; | |||||
| using GrpcShared.Interfaces; | using GrpcShared.Interfaces; | ||||
| using Microsoft.AspNetCore.Authorization; | using Microsoft.AspNetCore.Authorization; | ||||
| using Microsoft.Net.Http.Headers; | using Microsoft.Net.Http.Headers; | ||||
| sb.Length = sb.Length - 3; | sb.Length = sb.Length - 3; | ||||
| return sb.ToString(); | return sb.ToString(); | ||||
| } | } | ||||
| public async Task<TrackResponse> GetById(TrackRequest request) | |||||
| { | |||||
| var client = _httpClientFactory.CreateClient("HttpClient"); | |||||
| client.DefaultRequestHeaders.Add(HeaderNames.Authorization, "Bearer " + request.Token); | |||||
| var track = await client.GetAsync($"tracks/{request.TrackID}"); | |||||
| var response = JsonConvert.DeserializeObject<TrackResponse>(await track!.Content.ReadAsStringAsync())!; | |||||
| return response; | |||||
| } | |||||
| } | } | ||||
| } | } | ||||