Working on the streamig component of Icarus. Enforcing grant permissions for streaming songs. #39
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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<Song> _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<Song>();
|
||||
_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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,11 +17,13 @@
|
||||
ItemsSource="{Binding SongItems}"
|
||||
VerticalOptions="FillAndExpand"
|
||||
HasUnevenRows="False"
|
||||
IsPullToRefreshEnabled="True"
|
||||
RefreshCommand="{Binding RefreshSongs}"
|
||||
ItemSelected="SongListView_ItemSelected" >
|
||||
<ListView.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<ViewCell Height="100">
|
||||
<Grid Padding="5">
|
||||
<ViewCell Height="150">
|
||||
<Grid MinimumHeightRequest="100" Padding="5">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
Reference in New Issue
Block a user