From 4de95c1ef6f42d3416ada3b8b08a16dc21355605 Mon Sep 17 00:00:00 2001 From: amazing-username Date: Sun, 30 Jun 2019 19:55:08 -0700 Subject: [PATCH] Working on refinining the streaming aspect to be more smooth, especially with large files... That 2112 Rush song is ridiculous --- Mear/Mear/Managers/SongManager.cs | 16 ++++++++--- Mear/Mear/Playback/MearPlayer.cs | 27 +++++++++++++------ .../Remote/RemoteAlbumRepository.cs | 1 + .../Remote/RemoteArtistRepository.cs | 1 + .../Remote/RemoteSongRepository.cs | 1 + Mear/Mear/Views/MearPlayerView.xaml.cs | 3 +-- 6 files changed, 36 insertions(+), 13 deletions(-) diff --git a/Mear/Mear/Managers/SongManager.cs b/Mear/Mear/Managers/SongManager.cs index 44ce21b..f617d81 100644 --- a/Mear/Mear/Managers/SongManager.cs +++ b/Mear/Mear/Managers/SongManager.cs @@ -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) { diff --git a/Mear/Mear/Playback/MearPlayer.cs b/Mear/Mear/Playback/MearPlayer.cs index 7e14702..d64cd43 100644 --- a/Mear/Mear/Playback/MearPlayer.cs +++ b/Mear/Mear/Playback/MearPlayer.cs @@ -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(); diff --git a/Mear/Mear/Repositories/Remote/RemoteAlbumRepository.cs b/Mear/Mear/Repositories/Remote/RemoteAlbumRepository.cs index 16c610b..9fca6cf 100644 --- a/Mear/Mear/Repositories/Remote/RemoteAlbumRepository.cs +++ b/Mear/Mear/Repositories/Remote/RemoteAlbumRepository.cs @@ -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); diff --git a/Mear/Mear/Repositories/Remote/RemoteArtistRepository.cs b/Mear/Mear/Repositories/Remote/RemoteArtistRepository.cs index d1c702b..251106b 100644 --- a/Mear/Mear/Repositories/Remote/RemoteArtistRepository.cs +++ b/Mear/Mear/Repositories/Remote/RemoteArtistRepository.cs @@ -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); diff --git a/Mear/Mear/Repositories/Remote/RemoteSongRepository.cs b/Mear/Mear/Repositories/Remote/RemoteSongRepository.cs index 30982ba..ec2cc95 100644 --- a/Mear/Mear/Repositories/Remote/RemoteSongRepository.cs +++ b/Mear/Mear/Repositories/Remote/RemoteSongRepository.cs @@ -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); diff --git a/Mear/Mear/Views/MearPlayerView.xaml.cs b/Mear/Mear/Views/MearPlayerView.xaml.cs index 74c59b5..53a212a 100644 --- a/Mear/Mear/Views/MearPlayerView.xaml.cs +++ b/Mear/Mear/Views/MearPlayerView.xaml.cs @@ -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(); }