diff --git a/Opus/Code/Api/LocalManager.cs b/Opus/Code/Api/LocalManager.cs index 1501fcd..da47b7c 100644 --- a/Opus/Code/Api/LocalManager.cs +++ b/Opus/Code/Api/LocalManager.cs @@ -79,7 +79,9 @@ namespace Opus.Api await Task.Run(() => { - Looper.Prepare(); + if (Looper.MyLooper() == null) + Looper.Prepare(); + CursorLoader cursorLoader = new CursorLoader(Application.Context, musicUri, null, null, null, null); ICursor musicCursor = (ICursor)cursorLoader.LoadInBackground(); if (musicCursor != null && musicCursor.MoveToFirst()) @@ -166,6 +168,9 @@ namespace Opus.Api Uri uri = MediaStore.Audio.Playlists.Members.GetContentUri("external", playlistID); return await Task.Run(() => { + if (Looper.MyLooper() == null) + Looper.Prepare(); + CursorLoader loader = new CursorLoader(Application.Context, uri, null, null, null, null); ICursor cursor = (ICursor)loader.LoadInBackground(); diff --git a/Opus/Code/Api/PlaylistManager.cs b/Opus/Code/Api/PlaylistManager.cs index 4c26517..08e3061 100644 --- a/Opus/Code/Api/PlaylistManager.cs +++ b/Opus/Code/Api/PlaylistManager.cs @@ -2,7 +2,6 @@ using Android.Content; using Android.Database; using Android.Graphics; -using Android.Net; using Android.OS; using Android.Provider; using Android.Support.Design.Widget; @@ -14,7 +13,6 @@ using Google.Apis.YouTube.v3.Data; using Opus.Adapter; using Opus.Api.Services; using Opus.DataStructure; -using Opus.Fragments; using Opus.Others; using SQLite; using System; @@ -56,15 +54,22 @@ namespace Opus.Api { List tracks = await GetTracksFromLocalPlaylist(LocalID); - MusicPlayer.queue.Clear(); + if (tracks.Count == 0) + return; + SongManager.Play(tracks[startingPosition]); tracks.RemoveAt(startingPosition); + await Task.Delay(1000); + while (MusicPlayer.instance == null) await Task.Delay(10); - MusicPlayer.instance.AddToQueue(tracks.GetRange(startingPosition, tracks.Count - startingPosition).ToArray()); MusicPlayer.instance.InsertToQueue(0, tracks.GetRange(0, startingPosition).ToArray()); + MusicPlayer.currentID = startingPosition; + Queue.instance?.RefreshCurrent(); + Player.instance?.RefreshPlayer(); + MusicPlayer.instance.AddToQueue(tracks.GetRange(startingPosition, tracks.Count - startingPosition).ToArray()); } /// @@ -76,7 +81,6 @@ namespace Opus.Api { List tracks = await GetTracksFromYoutubePlaylist(YoutubeID, (song) => { - MusicPlayer.queue?.Clear(); SongManager.Play(song); }, startingPosition); @@ -85,11 +89,15 @@ namespace Opus.Api tracks.RemoveAt(startingPosition); + await Task.Delay(1000); while (MusicPlayer.instance == null) await Task.Delay(10); - MusicPlayer.instance.AddToQueue(tracks.GetRange(startingPosition, tracks.Count - startingPosition).ToArray()); MusicPlayer.instance.InsertToQueue(0, tracks.GetRange(0, startingPosition).ToArray()); + MusicPlayer.currentID = startingPosition; + Queue.instance?.RefreshCurrent(); + Player.instance?.RefreshPlayer(); + MusicPlayer.instance.AddToQueue(tracks.GetRange(startingPosition, tracks.Count - startingPosition).ToArray()); } #endregion @@ -119,10 +127,10 @@ namespace Opus.Api Random r = new Random(); tracks = tracks.OrderBy(x => r.Next()).ToList(); - MusicPlayer.queue.Clear(); SongManager.Play(tracks[0]); tracks.RemoveAt(0); + await Task.Delay(1000); while (MusicPlayer.instance == null) await Task.Delay(10); @@ -139,7 +147,6 @@ namespace Opus.Api int playPos = r.Next(50); List tracks = await GetTracksFromYoutubePlaylist(YoutubeID, (song) => { - MusicPlayer.queue.Clear(); MusicPlayer.currentID = -1; SongManager.Play(song); }, playPos); @@ -559,7 +566,9 @@ namespace Opus.Api Uri uri = Playlists.ExternalContentUri; await Task.Run(() => { - Looper.Prepare(); + if (Looper.MyLooper() == null) + Looper.Prepare(); + CursorLoader loader = new CursorLoader(Application.Context, uri, null, null, null, null); ICursor cursor = (ICursor)loader.LoadInBackground(); @@ -778,10 +787,16 @@ namespace Opus.Api /// public async static Task> GetTracksFromLocalPlaylist(long LocalID) { + if (Looper.MyLooper() == null) + Looper.Prepare(); + List songs = new List(); Uri musicUri = Playlists.Members.GetContentUri("external", LocalID); await Task.Run(() => { + if (Looper.MyLooper() == null) + Looper.Prepare(); + CursorLoader cursorLoader = new CursorLoader(Application.Context, musicUri, null, null, null, null); ICursor musicCursor = (ICursor)cursorLoader.LoadInBackground(); @@ -815,7 +830,6 @@ namespace Opus.Api } }); - songs.Reverse(); return songs; } @@ -866,6 +880,9 @@ namespace Opus.Api Uri uri = MediaStore.Audio.Playlists.ExternalContentUri; return await Task.Run(() => { + if (Looper.MyLooper() == null) + Looper.Prepare(); + CursorLoader loader = new CursorLoader(Application.Context, uri, null, null, null, null); ICursor cursor = (ICursor)loader.LoadInBackground(); @@ -950,7 +967,6 @@ namespace Opus.Api nextPageToken = ytPlaylist.NextPageToken; } - tracks.Reverse(); return tracks; } catch (System.Net.Http.HttpRequestException) diff --git a/Opus/Code/Api/Services/MusicPlayer.cs b/Opus/Code/Api/Services/MusicPlayer.cs index 6ee34d9..2dd038f 100644 --- a/Opus/Code/Api/Services/MusicPlayer.cs +++ b/Opus/Code/Api/Services/MusicPlayer.cs @@ -257,7 +257,7 @@ namespace Opus.Api.Services queue?.Clear(); currentID = -1; Queue.instance?.Refresh(); - Home.instance?.RefreshQueue(); + Home.instance?.RefreshQueue(false); Song song = null; if (title == null) @@ -530,6 +530,7 @@ namespace Opus.Api.Services song.Title = video.Title; song.Artist = video.Author; song.Album = await MainActivity.GetBestThumb(new string[] { video.Thumbnails.MaxResUrl, video.Thumbnails.StandardResUrl, video.Thumbnails.HighResUrl }); + Player.instance?.RefreshPlayer(); if (startPlaybackWhenPosible) { diff --git a/Opus/Code/Api/YoutubeManager.cs b/Opus/Code/Api/YoutubeManager.cs index 97b7726..64d1d57 100644 --- a/Opus/Code/Api/YoutubeManager.cs +++ b/Opus/Code/Api/YoutubeManager.cs @@ -3,7 +3,6 @@ using Android.Database; using Android.Graphics; using Android.Provider; using Android.Support.Design.Widget; -using Android.Support.V4.Content; using Android.Support.V7.Preferences; using Android.Views; using Android.Widget; @@ -12,7 +11,6 @@ using Google.Apis.YouTube.v3.Data; using Opus.Api.Services; using Opus.DataStructure; using Opus.Fragments; -using Opus.Resources.Portable_Class; using System; using System.Collections.Generic; using System.IO; @@ -48,7 +46,7 @@ namespace Opus.Api intent.PutExtra("file", item.YoutubeID); intent.PutExtra("title", item.Title); intent.PutExtra("artist", item.Artist); - intent.PutExtra("thumbnailURI", item.Path); + intent.PutExtra("thumbnailURI", item.Album); intent.PutExtra("addToQueue", true); intent.PutExtra("showPlayer", true); Android.App.Application.Context.StartService(intent); @@ -66,7 +64,7 @@ namespace Opus.Api intent.PutExtra("file", item.YoutubeID); intent.PutExtra("title", item.Title); intent.PutExtra("artist", item.Artist); - intent.PutExtra("thumbnailURI", item.Path); + intent.PutExtra("thumbnailURI", item.Album); Android.App.Application.Context.StartService(intent); } @@ -82,7 +80,7 @@ namespace Opus.Api intent.PutExtra("file", item.YoutubeID); intent.PutExtra("title", item.Title); intent.PutExtra("artist", item.Artist); - intent.PutExtra("thumbnailURI", item.Path); + intent.PutExtra("thumbnailURI", item.Album); Android.App.Application.Context.StartService(intent); } #endregion diff --git a/Opus/Code/UI/Fragments/Home.cs b/Opus/Code/UI/Fragments/Home.cs index 80bcdc2..ba6c764 100644 --- a/Opus/Code/UI/Fragments/Home.cs +++ b/Opus/Code/UI/Fragments/Home.cs @@ -187,7 +187,12 @@ namespace Opus.Fragments public void NotifyQueueInserted(int position) { if (adapterItems.Count > 0) - QueueAdapter?.NotifyItemInserted(position); + { + if (MusicPlayer.queue.Count == 1) + QueueAdapter?.NotifyItemChanged(0); + else + QueueAdapter?.NotifyItemInserted(position); + } } public void NotifyQueueRangeInserted(int position, int count)