Solving a bug with queue switch position.

This commit is contained in:
Tristan Roux
2019-04-28 14:37:11 +02:00
parent 47386b52e7
commit b0c3849d6b
2 changed files with 29 additions and 21 deletions

View File

@@ -63,6 +63,7 @@ namespace Opus.Api.Services
public static bool isRunning = false;
private bool generating = false;
public static int currentID = 0;
public static int switchPosition;
public static bool autoUpdateSeekBar = true;
public static bool repeat = false;
public static bool useAutoPlay = true;
@@ -491,6 +492,8 @@ namespace Opus.Api.Services
return song; //Song is a class, the youtube id will be updated with another method
}
switchPosition = position;
try
{
YoutubeClient client = new YoutubeClient();
@@ -516,12 +519,19 @@ namespace Opus.Api.Services
}
song.IsParsed = true;
if (position != -1)
Queue.instance?.NotifyItemChanged(position, Resource.Drawable.PublicIcon);
if (switchPosition != -1)
Queue.instance?.NotifyItemChanged(switchPosition, Resource.Drawable.PublicIcon);
if (startPlaybackWhenPosible && song.Album != null)
{
instance.Play(song, -1, position == -1);
if(switchPosition != -1)
{
currentID = switchPosition;
Queue.instance?.RefreshCurrent();
Player.instance?.RefreshPlayer();
}
instance.Play(song, -1, switchPosition == -1);
startPlaybackWhenPosible = false;
}
@@ -533,20 +543,20 @@ namespace Opus.Api.Services
if (startPlaybackWhenPosible)
{
instance.Play(song, -1, position == -1);
instance.Play(song, -1, switchPosition == -1);
if (position != -1)
if (switchPosition != -1)
{
Queue.instance?.NotifyItemChanged(position, song.Artist);
Home.instance?.NotifyQueueChanged(position, song.Artist);
Queue.instance?.NotifyItemChanged(switchPosition, song.Artist);
Home.instance?.NotifyQueueChanged(switchPosition, song.Artist);
}
}
if (!song.IsLiveStream)
song.ExpireDate = mediaStreamInfo.ValidUntil;
if(position != -1)
UpdateQueueItemDB(song, position);
if(switchPosition != -1)
UpdateQueueItemDB(song, switchPosition);
}
catch (System.Net.Http.HttpRequestException)
{
@@ -568,8 +578,8 @@ namespace Opus.Api.Services
MainActivity.instance.FindViewById<ProgressBar>(Resource.Id.ytProgress).Visibility = ViewStates.Gone;
song.IsParsed = false;
if (position != -1)
RemoveFromQueue(position); //Remove the song from the queue since it can't be played.
if (switchPosition != -1)
RemoveFromQueue(switchPosition); //Remove the song from the queue since it can't be played.
if(startPlaybackWhenPosible)
Player.instance?.Ready();
@@ -582,8 +592,8 @@ namespace Opus.Api.Services
MainActivity.instance.FindViewById<ProgressBar>(Resource.Id.ytProgress).Visibility = ViewStates.Gone;
song.IsParsed = false;
if (position != -1)
RemoveFromQueue(position); //Remove the song from the queue since it can't be played.
if (switchPosition != -1)
RemoveFromQueue(switchPosition); //Remove the song from the queue since it can't be played.
if (startPlaybackWhenPosible)
Player.instance?.Ready();
@@ -924,6 +934,10 @@ namespace Opus.Api.Services
Queue.instance?.RefreshCurrent();
}
//Switch position is the position of the song that will be played just after the parsing.
if (switchPosition > position)
switchPosition--;
SaveQueueSlot();
queue.RemoveAt(position);
@@ -1107,13 +1121,7 @@ namespace Opus.Api.Services
}
await ParseSong(song, position, !UseCastPlayer, true);
if (song != null) //Check if the parse has succeed, the song is set to null if there is an error
{
currentID = position;
Queue.instance?.RefreshCurrent();
Player.instance?.RefreshPlayer();
}
else
if (song == null) //Check if the parse has succeed, the song is set to null if there is an error
Player.instance?.Ready(); //Remove player's loading bar since we'll not load this song
if (MainActivity.instance != null && showPlayer)

View File

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