From 5ec9d206435968b409cfd0cc3c6f8ba174e06a18 Mon Sep 17 00:00:00 2001
From: Tristan Roux
Date: Sun, 21 Apr 2019 00:36:56 +0200
Subject: [PATCH] Solving some bugs.
---
Opus/Code/Api/LocalManager.cs | 7 ++++-
Opus/Code/Api/PlaylistManager.cs | 38 +++++++++++++++++++--------
Opus/Code/Api/Services/MusicPlayer.cs | 3 ++-
Opus/Code/Api/YoutubeManager.cs | 8 +++---
Opus/Code/UI/Fragments/Home.cs | 7 ++++-
5 files changed, 44 insertions(+), 19 deletions(-)
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)