浏览代码

adding endpoint for getting the current playback state

tags/v1.1.0^2
anastasijasavov 3 年前
父节点
当前提交
bcd02acb3d

+ 7
- 1
GrpcShared/DTO/TokenMessage.cs 查看文件



namespace GrpcShared.DTO namespace GrpcShared.DTO
{ {
[ProtoContract]
[ProtoContract(SkipConstructor = true)]
public class TokenMessage public class TokenMessage
{ {
public TokenMessage(string? token)
{
Token = token;
}

[ProtoMember(1)] [ProtoMember(1)]
public string? Token { get; set; } public string? Token { get; set; }
} }

+ 3
- 2
GrpcShared/Interfaces/IStatsService.cs 查看文件

using GrpcShared.DTO.Track;
using GrpcShared.DTO;
using GrpcShared.DTO.Track;
using ProtoBuf.Grpc.Configuration; using ProtoBuf.Grpc.Configuration;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
[Service] [Service]
public interface IStatsService public interface IStatsService
{ {
Task<TrackResponse> GetCurrentlyPlayingTrack(string token);
Task<TrackResponse> GetCurrentlyPlayingTrack(TokenMessage token);
} }
} }

+ 13
- 1
NemAnCore/Pages/Home.razor 查看文件

@page "/home" @page "/home"
@attribute [Authorize]
@using GrpcShared.DTO
@using GrpcShared.DTO.Track
@using NemAnBlazor.Services.Interfaces
@inject Blazored.SessionStorage.ISessionStorageService sessionStorage
@inject IStatsClientService spotifyService

<h3>Home</h3> <h3>Home</h3>


<p>login radi</p> <p>login radi</p>
<AuthorizeView> <AuthorizeView>
<Authorized> <Authorized>
<p>autorizovan si</p> <p>autorizovan si</p>
</Authorized> </Authorized>
<NotAuthorized> <NotAuthorized>
<LoginRedirect/> <LoginRedirect/>
</NotAuthorized> </NotAuthorized>
</AuthorizeView> </AuthorizeView>
@code { @code {
protected override async Task OnInitializedAsync()
{
//string tokenS = await sessionStorage.GetItemAsync<string>("token");
//TokenMessage token = new TokenMessage(tokenS);


//TrackResponse response = await spotifyService.GetCurrentlyPlayingTrack(token);
}
} }

+ 1
- 0
NemAnCore/Program.cs 查看文件



builder.Services.AddScoped<ITrackClientService, TrackClientService>(); builder.Services.AddScoped<ITrackClientService, TrackClientService>();
builder.Services.AddScoped<IAuthClientService, AuthClientService>(); builder.Services.AddScoped<IAuthClientService, AuthClientService>();
builder.Services.AddScoped<IStatsClientService, StatsClientService>();
builder.Services.AddBlazoredSessionStorage(); builder.Services.AddBlazoredSessionStorage();
builder.Services.AddScoped<AuthenticationStateProvider, AuthClientService>(); builder.Services.AddScoped<AuthenticationStateProvider, AuthClientService>();
builder.Services.AddAuthorizationCore(); builder.Services.AddAuthorizationCore();

+ 1
- 1
NemAnCore/Services/AuthClientService.cs 查看文件

//token = "BQBMgFm6jnFNWWeZEMGIRP_f-ENPid7Kw8JubAyuWAe4JK0S1DPFGlaAdZ_Fey6ePkCnz8-cqC0oyRmrciWUy5ISUTQKDe8PTQn4iBRMYCgM0n4GnS1xAErHJcm4Vpu2TAngk-4vQUOfTQRcedNTfCaHKP4uFJgTlTI7JHGrtB-_EZLnFcZ2OQe31oFQIJ1wM3ZtvwnN"; //token = "BQBMgFm6jnFNWWeZEMGIRP_f-ENPid7Kw8JubAyuWAe4JK0S1DPFGlaAdZ_Fey6ePkCnz8-cqC0oyRmrciWUy5ISUTQKDe8PTQn4iBRMYCgM0n4GnS1xAErHJcm4Vpu2TAngk-4vQUOfTQRcedNTfCaHKP4uFJgTlTI7JHGrtB-_EZLnFcZ2OQe31oFQIJ1wM3ZtvwnN";
if (token == null) return new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity())); if (token == null) return new AuthenticationState(new ClaimsPrincipal(new ClaimsIdentity()));
var userInfo = await _serviceClient.GetUserInfo(new TokenMessage { Token = token });
var userInfo = await _serviceClient.GetUserInfo(new TokenMessage ( token ));


List<Claim> claims = new(); List<Claim> claims = new();



+ 5
- 1
NemAnCore/Services/Interfaces/IStatsClientService.cs 查看文件

namespace NemAnBlazor.Services.Interfaces
using GrpcShared.DTO;
using GrpcShared.DTO.Track;

namespace NemAnBlazor.Services.Interfaces
{ {
public interface IStatsClientService public interface IStatsClientService
{ {
Task<TrackResponse> GetCurrentlyPlayingTrack(TokenMessage token);
} }
} }

+ 16
- 2
NemAnCore/Services/StatsClientService.cs 查看文件

using NemAnBlazor.Services.Interfaces;
using Grpc.Net.Client;
using GrpcShared.DTO;
using GrpcShared.DTO.Track;
using GrpcShared.Interfaces;
using NemAnBlazor.Services.Interfaces;
using ProtoBuf.Grpc.Client;


namespace NemAnBlazor.Services namespace NemAnBlazor.Services
{ {
public class StatsClientService :IStatsClientService
public class StatsClientService : IStatsClientService
{ {
private IStatsService _serviceClient;
public StatsClientService(GrpcChannel channel)
{
_serviceClient = channel.CreateGrpcService<IStatsService>();
}
public async Task<TrackResponse> GetCurrentlyPlayingTrack(TokenMessage token)
{
return await _serviceClient.GetCurrentlyPlayingTrack(token);
}
} }
} }

+ 15
- 3
gRPCServer/Services/StatsService.cs 查看文件

 
using GrpcShared.DTO;
using GrpcShared.DTO.Track; using GrpcShared.DTO.Track;
using GrpcShared.Interfaces; using GrpcShared.Interfaces;
using Microsoft.Net.Http.Headers;
using Newtonsoft.Json;


namespace SpotifyService.Services namespace SpotifyService.Services
{ {
public StatsService(IHttpClientFactory httpClientFactory) public StatsService(IHttpClientFactory httpClientFactory)
{ {
_httpClientFactory = httpClientFactory; _httpClientFactory = httpClientFactory;
}
public Task<TrackResponse> GetCurrentlyPlayingTrack(string token)
}

public async Task<TrackResponse> GetCurrentlyPlayingTrack(TokenMessage token)
{ {
return null;
var client = _httpClientFactory.CreateClient();
client.DefaultRequestHeaders.Add(HeaderNames.Authorization, "Bearer " + token);

var searchResult = await client.GetAsync($"player/currently-playing");

var responses = JsonConvert.DeserializeObject<TrackResponse>(await searchResult.Content.ReadAsStringAsync())!;

return responses;

} }
} }
} }

正在加载...
取消
保存