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:
@@ -2,6 +2,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
using RestSharp;
|
||||
@@ -19,7 +20,9 @@ namespace Mear.Managers
|
||||
{
|
||||
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 apiEndpoint = $@"api/{API.APIVersion}/song/stream/{song.Id}";
|
||||
@@ -29,13 +32,20 @@ namespace Mear.Managers
|
||||
var token = tokRepo.RetrieveToken();
|
||||
|
||||
request.AddHeader("Authorization", $"Bearer {token.AccessToken}");
|
||||
request.AddHeader("Content-type", "application/octet-stream");
|
||||
request.AddHeader("Connection", "Keep-Alive");
|
||||
request.ResponseWriter = (responseStream) =>
|
||||
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)
|
||||
{
|
||||
|
||||
@@ -278,6 +278,7 @@ namespace Mear.Playback
|
||||
|
||||
var downloaded = songMgr.DownloadStream(ref _song);
|
||||
|
||||
|
||||
if (downloaded)
|
||||
{
|
||||
PlaySong();
|
||||
@@ -433,20 +434,30 @@ namespace Mear.Playback
|
||||
private static async Task PlaySong(string songPath)
|
||||
{
|
||||
await CrossMediaManager.Current.Play(songPath);
|
||||
if (_initialized == null)
|
||||
{
|
||||
CrossMediaManager.Current.MediaItemFinished += Current_MediaItemFinished;
|
||||
_initialized = true;
|
||||
}
|
||||
_songChanged[MusicViews.Song] = true;
|
||||
_songChanged[MusicViews.Album] = true;
|
||||
_songChanged[MusicViews.Artist] = true;
|
||||
InitializePlayer();
|
||||
|
||||
SongChanged();
|
||||
}
|
||||
private static async Task ResumeSong()
|
||||
{
|
||||
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()
|
||||
{
|
||||
var musicCtrl = new DBMusicControlsRepository();
|
||||
|
||||
@@ -37,6 +37,7 @@ namespace Mear.Repositories.Remote
|
||||
var tkRepo = new DBTokenRepository();
|
||||
var token = tkRepo.RetrieveToken();
|
||||
request.AddHeader("Authorization", $"Bearer {token.AccessToken}");
|
||||
request.AddHeader("Connection", "Keep-Alive");
|
||||
|
||||
var reponse = client.Execute(request);
|
||||
|
||||
|
||||
@@ -37,6 +37,7 @@ namespace Mear.Repositories.Remote
|
||||
var tkRepo = new DBTokenRepository();
|
||||
var token = tkRepo.RetrieveToken();
|
||||
request.AddHeader("Authorization", $"Bearer {token.AccessToken}");
|
||||
request.AddHeader("Connection", "Keep-Alive");
|
||||
|
||||
var response = client.Execute(request);
|
||||
|
||||
|
||||
@@ -39,6 +39,7 @@ namespace Mear.Repositories.Remote
|
||||
DBTokenRepository tkRepo = new DBTokenRepository();
|
||||
var token = tkRepo.RetrieveToken();
|
||||
request.AddHeader("Authorization", $"Bearer {token.AccessToken}");
|
||||
request.AddHeader("Connection", "Keep-Alive");
|
||||
|
||||
var response = client.Execute(request);
|
||||
|
||||
|
||||
@@ -127,6 +127,7 @@ namespace Mear.Views
|
||||
StartTime.Text = $"{curPos}";
|
||||
double? progVal = await MearPlayer.ProgressValue();
|
||||
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)
|
||||
{
|
||||
//var musicCtrl = new DBMusicControlsRepository();
|
||||
//musicCtrl.UpdateShuffle();
|
||||
MearPlayer.ControlMusic(null, PlayControls.SHUFFLE);
|
||||
Shuffle.Text = MearPlayer.RetrieveShuffleString();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user