Working on refinining the streaming aspect to be more smooth, especially with large files... That 2112 Rush song is ridiculous

This commit is contained in:
amazing-username
2019-06-30 19:55:08 -07:00
parent cdd1ee871d
commit 4de95c1ef6
6 changed files with 36 additions and 13 deletions
+13 -3
View File
@@ -2,6 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Text; using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json; using Newtonsoft.Json;
using RestSharp; using RestSharp;
@@ -19,7 +20,9 @@ namespace Mear.Managers
{ {
try try
{ {
using (var writer = File.OpenWrite(song.SongPath)) //using (var writer = File.OpenWrite(song.SongPath))
using (var writer = new FileStream(song.SongPath, FileMode.Create, FileAccess.Write,
FileShare.ReadWrite, bufferSize: 4096, useAsync: true))
{ {
var client = new RestClient(API.ApiUrl); var client = new RestClient(API.ApiUrl);
var apiEndpoint = $@"api/{API.APIVersion}/song/stream/{song.Id}"; var apiEndpoint = $@"api/{API.APIVersion}/song/stream/{song.Id}";
@@ -29,13 +32,20 @@ namespace Mear.Managers
var token = tokRepo.RetrieveToken(); var token = tokRepo.RetrieveToken();
request.AddHeader("Authorization", $"Bearer {token.AccessToken}"); request.AddHeader("Authorization", $"Bearer {token.AccessToken}");
request.AddHeader("Content-type", "application/octet-stream");
request.AddHeader("Connection", "Keep-Alive");
request.ResponseWriter = (responseStream) => request.ResponseWriter = (responseStream) =>
responseStream.CopyTo(writer); responseStream.CopyTo(writer);
/**
*/
//responseStream.CopyToAsync(writer);
var response = client.DownloadData(request); client.DownloadData(request);
//var response = client.Execute(request);
return true;
} }
return true;
} }
catch (Exception ex) catch (Exception ex)
{ {
+19 -8
View File
@@ -278,6 +278,7 @@ namespace Mear.Playback
var downloaded = songMgr.DownloadStream(ref _song); var downloaded = songMgr.DownloadStream(ref _song);
if (downloaded) if (downloaded)
{ {
PlaySong(); PlaySong();
@@ -433,20 +434,30 @@ namespace Mear.Playback
private static async Task PlaySong(string songPath) private static async Task PlaySong(string songPath)
{ {
await CrossMediaManager.Current.Play(songPath); await CrossMediaManager.Current.Play(songPath);
if (_initialized == null) InitializePlayer();
{
CrossMediaManager.Current.MediaItemFinished += Current_MediaItemFinished; SongChanged();
_initialized = true;
}
_songChanged[MusicViews.Song] = true;
_songChanged[MusicViews.Album] = true;
_songChanged[MusicViews.Artist] = true;
} }
private static async Task ResumeSong() private static async Task ResumeSong()
{ {
await CrossMediaManager.Current.PlayPause(); await CrossMediaManager.Current.PlayPause();
} }
private static void InitializePlayer()
{
if (_initialized == null)
{
CrossMediaManager.Current.MediaItemFinished += Current_MediaItemFinished;
CrossMediaManager.Current.VolumeManager.CurrentVolume = CrossMediaManager.Current.VolumeManager.MaxVolume;
_initialized = true;
}
}
private static void SongChanged()
{
_songChanged[MusicViews.Song] = true;
_songChanged[MusicViews.Album] = true;
_songChanged[MusicViews.Artist] = true;
}
private static void ToggleRepeat() private static void ToggleRepeat()
{ {
var musicCtrl = new DBMusicControlsRepository(); var musicCtrl = new DBMusicControlsRepository();
@@ -37,6 +37,7 @@ namespace Mear.Repositories.Remote
var tkRepo = new DBTokenRepository(); var tkRepo = new DBTokenRepository();
var token = tkRepo.RetrieveToken(); var token = tkRepo.RetrieveToken();
request.AddHeader("Authorization", $"Bearer {token.AccessToken}"); request.AddHeader("Authorization", $"Bearer {token.AccessToken}");
request.AddHeader("Connection", "Keep-Alive");
var reponse = client.Execute(request); var reponse = client.Execute(request);
@@ -37,6 +37,7 @@ namespace Mear.Repositories.Remote
var tkRepo = new DBTokenRepository(); var tkRepo = new DBTokenRepository();
var token = tkRepo.RetrieveToken(); var token = tkRepo.RetrieveToken();
request.AddHeader("Authorization", $"Bearer {token.AccessToken}"); request.AddHeader("Authorization", $"Bearer {token.AccessToken}");
request.AddHeader("Connection", "Keep-Alive");
var response = client.Execute(request); var response = client.Execute(request);
@@ -39,6 +39,7 @@ namespace Mear.Repositories.Remote
DBTokenRepository tkRepo = new DBTokenRepository(); DBTokenRepository tkRepo = new DBTokenRepository();
var token = tkRepo.RetrieveToken(); var token = tkRepo.RetrieveToken();
request.AddHeader("Authorization", $"Bearer {token.AccessToken}"); request.AddHeader("Authorization", $"Bearer {token.AccessToken}");
request.AddHeader("Connection", "Keep-Alive");
var response = client.Execute(request); var response = client.Execute(request);
+1 -2
View File
@@ -127,6 +127,7 @@ namespace Mear.Views
StartTime.Text = $"{curPos}"; StartTime.Text = $"{curPos}";
double? progVal = await MearPlayer.ProgressValue(); double? progVal = await MearPlayer.ProgressValue();
SongProgress.Value = progVal.Value; SongProgress.Value = progVal.Value;
EndTime.Text = TimeFormat.ConvertToSongTime(MearPlayer.OnSong.Duration.Value);
} }
}); });
@@ -250,8 +251,6 @@ namespace Mear.Views
} }
private void Shuffle_Clicked(object sender, EventArgs e) private void Shuffle_Clicked(object sender, EventArgs e)
{ {
//var musicCtrl = new DBMusicControlsRepository();
//musicCtrl.UpdateShuffle();
MearPlayer.ControlMusic(null, PlayControls.SHUFFLE); MearPlayer.ControlMusic(null, PlayControls.SHUFFLE);
Shuffle.Text = MearPlayer.RetrieveShuffleString(); Shuffle.Text = MearPlayer.RetrieveShuffleString();
} }