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
|
#region Fields
|
||||||
private static string _apiUrl = @"https://www..com/";
|
private static string _apiUrl = @"https://www..com/";
|
||||||
private string _apiVersion;
|
private static string _apiVersion = "";
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
@@ -17,6 +17,10 @@ namespace Mear.Constants.API
|
|||||||
{
|
{
|
||||||
get => _apiUrl;
|
get => _apiUrl;
|
||||||
}
|
}
|
||||||
|
public static string APIVersion
|
||||||
|
{
|
||||||
|
get => _apiVersion;
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,8 @@ namespace Mear.Managers
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var client = new RestClient(API.ApiUrl);
|
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);
|
var userJson = JsonConvert.SerializeObject(_user);
|
||||||
|
|
||||||
request.AddParameter("application/json; charset=utf-8", userJson, ParameterType.RequestBody);
|
request.AddParameter("application/json; charset=utf-8", userJson, ParameterType.RequestBody);
|
||||||
|
|||||||
@@ -36,7 +36,8 @@ namespace Mear.Managers
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var client = new RestClient(API.ApiUrl);
|
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);
|
var userJson = JsonConvert.SerializeObject(_user);
|
||||||
request.AddParameter("application/json; charset=utf-8", userJson, ParameterType.RequestBody);
|
request.AddParameter("application/json; charset=utf-8", userJson, ParameterType.RequestBody);
|
||||||
request.RequestFormat = DataFormat.Json;
|
request.RequestFormat = DataFormat.Json;
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ using RestSharp;
|
|||||||
using Mear.Constants.API;
|
using Mear.Constants.API;
|
||||||
using Mear.Models;
|
using Mear.Models;
|
||||||
using Mear.Models.Authentication;
|
using Mear.Models.Authentication;
|
||||||
|
using Mear.Repositories.Database;
|
||||||
|
|
||||||
namespace Mear.Playback
|
namespace Mear.Playback
|
||||||
{
|
{
|
||||||
@@ -43,13 +44,18 @@ namespace Mear.Playback
|
|||||||
using (var writer = File.OpenWrite(tmpFile))
|
using (var writer = File.OpenWrite(tmpFile))
|
||||||
{
|
{
|
||||||
var client = new RestClient(API.ApiUrl);
|
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) =>
|
request.ResponseWriter = (responseStream) =>
|
||||||
responseStream.CopyTo(writer);
|
responseStream.CopyTo(writer);
|
||||||
|
|
||||||
var response = client.DownloadData(request);
|
var response = client.DownloadData(request);
|
||||||
|
|
||||||
await CrossMediaManager.Current.Play(tmpFile);
|
await CrossMediaManager.Current.Play(tmpFile);
|
||||||
|
var title = CrossMediaManager.Current.MediaQueue.Title;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|||||||
@@ -31,7 +31,8 @@ namespace Mear.Repositories.Remote
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
var client = new RestClient(API.ApiUrl);
|
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();
|
DBTokenRepository tkRepo = new DBTokenRepository();
|
||||||
var token = tkRepo.RetrieveToken();
|
var token = tkRepo.RetrieveToken();
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
using Xamarin.Forms;
|
using Xamarin.Forms;
|
||||||
|
|
||||||
@@ -15,6 +16,7 @@ namespace Mear.ViewModels
|
|||||||
{
|
{
|
||||||
#region Fields
|
#region Fields
|
||||||
private ObservableCollection<Song> _songItems;
|
private ObservableCollection<Song> _songItems;
|
||||||
|
private Command _refreshSongs;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
@@ -24,6 +26,12 @@ namespace Mear.ViewModels
|
|||||||
get => _songItems;
|
get => _songItems;
|
||||||
set => _songItems = value;
|
set => _songItems = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Command RefreshSongs
|
||||||
|
{
|
||||||
|
get => _refreshSongs;
|
||||||
|
set => _refreshSongs = value;
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
@@ -31,6 +39,7 @@ namespace Mear.ViewModels
|
|||||||
public SongViewModel()
|
public SongViewModel()
|
||||||
{
|
{
|
||||||
_songItems = new ObservableCollection<Song>();
|
_songItems = new ObservableCollection<Song>();
|
||||||
|
_refreshSongs = new Command(async () => await PopulateSongsAsync());
|
||||||
|
|
||||||
PopulateSongs();
|
PopulateSongs();
|
||||||
}
|
}
|
||||||
@@ -48,6 +57,26 @@ namespace Mear.ViewModels
|
|||||||
_songItems.Add(song);
|
_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
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,11 +17,13 @@
|
|||||||
ItemsSource="{Binding SongItems}"
|
ItemsSource="{Binding SongItems}"
|
||||||
VerticalOptions="FillAndExpand"
|
VerticalOptions="FillAndExpand"
|
||||||
HasUnevenRows="False"
|
HasUnevenRows="False"
|
||||||
|
IsPullToRefreshEnabled="True"
|
||||||
|
RefreshCommand="{Binding RefreshSongs}"
|
||||||
ItemSelected="SongListView_ItemSelected" >
|
ItemSelected="SongListView_ItemSelected" >
|
||||||
<ListView.ItemTemplate>
|
<ListView.ItemTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
<ViewCell Height="100">
|
<ViewCell Height="150">
|
||||||
<Grid Padding="5">
|
<Grid MinimumHeightRequest="100" Padding="5">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="Auto" />
|
<RowDefinition Height="Auto" />
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
|
|||||||
Reference in New Issue
Block a user