From 96c5594193e43368cacf6bfb6e650149dca7a4c9 Mon Sep 17 00:00:00 2001 From: amazing-username Date: Tue, 28 May 2019 20:30:21 -0400 Subject: [PATCH] Working on the streamig component of Icarus. Enforcing grant permissions for streaming songs. #39 --- Mear/Mear/Constants/API/API.cs | 6 +++- Mear/Mear/Managers/LoginManager.cs | 3 +- Mear/Mear/Managers/RegisterManager.cs | 3 +- Mear/Mear/Playback/MearPlayer.cs | 8 ++++- .../Remote/RemoteSongRepository.cs | 3 +- Mear/Mear/ViewModels/SongViewModel.cs | 29 +++++++++++++++++++ Mear/Mear/Views/SongView.xaml | 6 ++-- 7 files changed, 51 insertions(+), 7 deletions(-) diff --git a/Mear/Mear/Constants/API/API.cs b/Mear/Mear/Constants/API/API.cs index b18eef2..98cc473 100644 --- a/Mear/Mear/Constants/API/API.cs +++ b/Mear/Mear/Constants/API/API.cs @@ -8,7 +8,7 @@ namespace Mear.Constants.API { #region Fields private static string _apiUrl = @"https://www..com/"; - private string _apiVersion; + private static string _apiVersion = ""; #endregion @@ -17,6 +17,10 @@ namespace Mear.Constants.API { get => _apiUrl; } + public static string APIVersion + { + get => _apiVersion; + } #endregion diff --git a/Mear/Mear/Managers/LoginManager.cs b/Mear/Mear/Managers/LoginManager.cs index e2a01b6..981ce7b 100644 --- a/Mear/Mear/Managers/LoginManager.cs +++ b/Mear/Mear/Managers/LoginManager.cs @@ -35,7 +35,8 @@ namespace Mear.Managers try { var client = new RestClient(API.ApiUrl); - var request = new RestRequest(@"api/login", Method.POST); + var apiEndpoint = $@"api/{API.APIVersion}/login"; + var request = new RestRequest(apiEndpoint, Method.POST); var userJson = JsonConvert.SerializeObject(_user); request.AddParameter("application/json; charset=utf-8", userJson, ParameterType.RequestBody); diff --git a/Mear/Mear/Managers/RegisterManager.cs b/Mear/Mear/Managers/RegisterManager.cs index a7393d2..314f0e5 100644 --- a/Mear/Mear/Managers/RegisterManager.cs +++ b/Mear/Mear/Managers/RegisterManager.cs @@ -36,7 +36,8 @@ namespace Mear.Managers try { var client = new RestClient(API.ApiUrl); - var request = new RestRequest(@"api/register", Method.POST); + var apiEndpoint = $@"api/{API.APIVersion}/register"; + var request = new RestRequest(apiEndpoint, Method.POST); var userJson = JsonConvert.SerializeObject(_user); request.AddParameter("application/json; charset=utf-8", userJson, ParameterType.RequestBody); request.RequestFormat = DataFormat.Json; diff --git a/Mear/Mear/Playback/MearPlayer.cs b/Mear/Mear/Playback/MearPlayer.cs index ea1c42b..6507ca3 100644 --- a/Mear/Mear/Playback/MearPlayer.cs +++ b/Mear/Mear/Playback/MearPlayer.cs @@ -11,6 +11,7 @@ using RestSharp; using Mear.Constants.API; using Mear.Models; using Mear.Models.Authentication; +using Mear.Repositories.Database; namespace Mear.Playback { @@ -43,13 +44,18 @@ namespace Mear.Playback using (var writer = File.OpenWrite(tmpFile)) { var client = new RestClient(API.ApiUrl); - var request = new RestRequest($@"api/song/stream/{song.Id}", Method.GET); + var apiEndpoint = $@"api/{API.APIVersion}/song/stream/{song.Id}"; ; + var request = new RestRequest(apiEndpoint, Method.GET); + var tokRepo = new DBTokenRepository(); + var token = tokRepo.RetrieveToken(); + request.AddHeader("Authorization", $"Bearer {token.AccessToken}"); request.ResponseWriter = (responseStream) => responseStream.CopyTo(writer); var response = client.DownloadData(request); await CrossMediaManager.Current.Play(tmpFile); + var title = CrossMediaManager.Current.MediaQueue.Title; } } catch (Exception ex) diff --git a/Mear/Mear/Repositories/Remote/RemoteSongRepository.cs b/Mear/Mear/Repositories/Remote/RemoteSongRepository.cs index c256ee2..6cff226 100644 --- a/Mear/Mear/Repositories/Remote/RemoteSongRepository.cs +++ b/Mear/Mear/Repositories/Remote/RemoteSongRepository.cs @@ -31,7 +31,8 @@ namespace Mear.Repositories.Remote try { var client = new RestClient(API.ApiUrl); - var request = new RestRequest(@"api/song", Method.GET); + var apiEndpoint = $@"api/{API.APIVersion}/song"; + var request = new RestRequest(apiEndpoint, Method.GET); DBTokenRepository tkRepo = new DBTokenRepository(); var token = tkRepo.RetrieveToken(); diff --git a/Mear/Mear/ViewModels/SongViewModel.cs b/Mear/Mear/ViewModels/SongViewModel.cs index 72a1c93..0d5bc97 100644 --- a/Mear/Mear/ViewModels/SongViewModel.cs +++ b/Mear/Mear/ViewModels/SongViewModel.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; +using System.Threading.Tasks; using Xamarin.Forms; @@ -15,6 +16,7 @@ namespace Mear.ViewModels { #region Fields private ObservableCollection _songItems; + private Command _refreshSongs; #endregion @@ -24,6 +26,12 @@ namespace Mear.ViewModels get => _songItems; set => _songItems = value; } + + public Command RefreshSongs + { + get => _refreshSongs; + set => _refreshSongs = value; + } #endregion @@ -31,6 +39,7 @@ namespace Mear.ViewModels public SongViewModel() { _songItems = new ObservableCollection(); + _refreshSongs = new Command(async () => await PopulateSongsAsync()); PopulateSongs(); } @@ -48,6 +57,26 @@ namespace Mear.ViewModels _songItems.Add(song); } } + + private async Task PopulateSongsAsync() + { + try + { + var songRepo = new RemoteSongRepository(); + var songs = songRepo.RetrieveSongs().OrderBy(s => s.Title).ToList(); + + _songItems.Clear(); + + foreach (var song in songs) + { + _songItems.Add(song); + } + } + catch (Exception ex) + { + var msg = ex.Message; + } + } #endregion } } diff --git a/Mear/Mear/Views/SongView.xaml b/Mear/Mear/Views/SongView.xaml index b4066eb..9c139d0 100644 --- a/Mear/Mear/Views/SongView.xaml +++ b/Mear/Mear/Views/SongView.xaml @@ -17,11 +17,13 @@ ItemsSource="{Binding SongItems}" VerticalOptions="FillAndExpand" HasUnevenRows="False" + IsPullToRefreshEnabled="True" + RefreshCommand="{Binding RefreshSongs}" ItemSelected="SongListView_ItemSelected" > - - + +