Reworking queue refresh.

This commit is contained in:
Tristan Roux
2019-02-26 20:43:38 +01:00
parent a4d9244682
commit 09dc540629
5 changed files with 41 additions and 13 deletions

View File

@@ -456,6 +456,18 @@ namespace Opus.Resources.Portable_Class
}
}
public void NotifyQueueInserted(int position)
{
if (adapterItems.Count > 0)
QueueAdapter?.NotifyItemInserted(position);
}
public void NotifyQueueRemoved(int position)
{
if (adapterItems.Count > 0)
QueueAdapter?.NotifyItemRemoved(position);
}
private void ListView_ItemClick(object sender, int position)
{
if(adapterItems[position].contentType == SectionType.Shuffle)

View File

@@ -51,7 +51,7 @@ namespace Opus.Resources.Portable_Class
if (alwaysAllowSwap && (viewHolder.AdapterPosition + 1 == ((QueueAdapter)adapter).ItemCount || viewHolder.AdapterPosition == 0))
return MakeFlag(0, 0);
if (alwaysAllowSwap && MusicPlayer.CurrentID() == viewHolder.AdapterPosition)
if (alwaysAllowSwap && MusicPlayer.CurrentID() + 1 == viewHolder.AdapterPosition)
return MakeMovementFlags(dragFlag, 0);
return MakeMovementFlags(dragFlag, swipeFlag);

View File

@@ -773,7 +773,8 @@ namespace Opus.Resources.Portable_Class
song.IsLiveStream = isLive;
queue.Insert(CurrentID() + 1, song);
Home.instance?.RefreshQueue();
Home.instance?.NotifyQueueInserted(CurrentID() + 1);
Queue.instance?.NotifyItemInserted(CurrentID() + 1);
UpdateQueueDataBase();
if (UseCastPlayer)
@@ -794,7 +795,8 @@ namespace Opus.Resources.Portable_Class
public void AddToQueue(Song song)
{
queue.Insert(CurrentID() + 1, song);
Home.instance?.RefreshQueue();
Home.instance?.NotifyQueueInserted(CurrentID() + 1);
Queue.instance?.NotifyItemInserted(CurrentID() + 1);
UpdateQueueDataBase();
if(UseCastPlayer)
@@ -815,6 +817,8 @@ namespace Opus.Resources.Portable_Class
public async void AddToQueue(Song[] songs)
{
queue.AddRange(songs);
Home.instance?.RefreshQueue();
Queue.instance?.Refresh();
UpdateQueueDataBase();
if (UseCastPlayer)
@@ -827,8 +831,10 @@ namespace Opus.Resources.Portable_Class
public static void InsertToQueue(int position, Song song)
{
queue.Insert(position, song);
Home.instance?.NotifyQueueInserted(position);
Queue.instance?.NotifyItemInserted(position);
if(UseCastPlayer)
if (UseCastPlayer)
RemotePlayer.QueueInsertItems(new MediaQueueItem[] { GetQueueItem(song) }, RemotePlayer.MediaQueue.ItemIdAtIndex(position + 1), null);
UpdateQueueDataBase();
@@ -837,6 +843,8 @@ namespace Opus.Resources.Portable_Class
public static void RemoveFromQueue(int position)
{
queue.RemoveAt(position);
Home.instance?.NotifyQueueRemoved(position);
Queue.instance?.NotifyItemRemoved(position);
if (UseCastPlayer)
RemotePlayer.QueueRemoveItem(RemotePlayer.MediaQueue.ItemIdAtIndex(position), null);
@@ -854,9 +862,9 @@ namespace Opus.Resources.Portable_Class
{
queue.Add(song);
UpdateQueueItemDB(song, queue.Count - 1);
Home.instance?.RefreshQueue();
}
Home.instance?.NotifyQueueInserted(queue.Count - 1);
Queue.instance?.NotifyItemInserted(queue.Count - 1);
}
public void PlayLastInQueue(Song song)
@@ -867,8 +875,9 @@ namespace Opus.Resources.Portable_Class
{
queue.Add(song);
UpdateQueueItemDB(song, queue.Count - 1);
Home.instance?.RefreshQueue();
}
Home.instance?.NotifyQueueInserted(queue.Count - 1);
Queue.instance?.NotifyItemInserted(queue.Count - 1);
}
public void PlayLastInQueue(string filePath, string title, string artist, string youtubeID, string thumbnailURI, bool isLive = false)
@@ -885,8 +894,9 @@ namespace Opus.Resources.Portable_Class
{
queue.Add(song);
UpdateQueueItemDB(song, queue.Count - 1);
Home.instance?.RefreshQueue();
}
Home.instance?.NotifyQueueInserted(queue.Count - 1);
Queue.instance?.NotifyItemInserted(queue.Count - 1);
}
public void PlayPrevious()

View File

@@ -35,7 +35,7 @@ public class Queue : Fragment, RecyclerView.IOnItemTouchListener
instance = this;
ListView = view.FindViewById<RecyclerView>(Resource.Id.recycler);
ListView.SetLayoutManager(new LinearLayoutManager(Application.Context));
adapter = new QueueAdapter(MusicPlayer.queue);
adapter = new QueueAdapter();
ListView.SetAdapter(adapter);
adapter.ItemClick += ListView_ItemClick;
adapter.ItemLongCLick += ListView_ItemLongCLick;
@@ -74,6 +74,12 @@ public class Queue : Fragment, RecyclerView.IOnItemTouchListener
adapter.NotifyDataSetChanged();
}
public void NotifyItemInserted(int position)
{
position++;
adapter.NotifyItemInserted(position);
}
public void NotifyItemChanged(int position)
{
position++;
@@ -297,8 +303,8 @@ public class Queue : Fragment, RecyclerView.IOnItemTouchListener
MusicPlayer.RemoveFromQueue(position);
if (instance != null)
instance.adapter.NotifyItemRemoved(position + 1);
//if (instance != null)
// instance.adapter.NotifyItemRemoved(position + 1);
}
public override void OnResume()

View File

@@ -23,7 +23,7 @@ namespace Opus.Resources.Portable_Class
public bool IsSliding { get; set; }
public QueueAdapter(List<Song> songList) { }
public QueueAdapter() { }
public override int ItemCount => MusicPlayer.UseCastPlayer ? MusicPlayer.RemotePlayer.MediaQueue.ItemCount + 2 : MusicPlayer.queue.Count + 2;
@@ -410,7 +410,7 @@ namespace Opus.Resources.Portable_Class
.SetAction(Queue.instance.GetString(Resource.String.undo), (view) =>
{
Queue.InsertToQueue(position, song);
NotifyItemInserted(position);
//NotifyItemInserted(position);
});
snackbar.View.FindViewById<TextView>(Resource.Id.snackbar_text).SetTextColor(Color.White);
snackbar.Show();