Looks like most of shuffle issues are resolved

This commit is contained in:
2022-11-11 17:57:50 +01:00
parent 06207d9791
commit 5a43a1284e
5 changed files with 152 additions and 95 deletions

View File

@ -14,6 +14,7 @@ using System.Windows.Media;
using System.Linq;
using System.Windows.Input;
using System.Text.RegularExpressions;
using System.Threading;
namespace unison
{
@ -40,15 +41,18 @@ namespace unison
public void Initialize()
{
ListGenre();
ListFolder();
ListGenre(_mpd._cancelCommand.Token);
ListFolder(_mpd._cancelCommand.Token);
}
public async void ListGenre()
public async void ListGenre(CancellationToken token)
{
if (_genreList.Count != 0)
return;
if (token.IsCancellationRequested)
return;
List<string> Response = await _mpd.SafelySendCommandAsync(new ListCommand(MpdTags.Genre, null, null));
if (Response == null)
@ -58,11 +62,14 @@ namespace unison
_genreList.Add(genre);
}
public async void ListFolder()
public async void ListFolder(CancellationToken token)
{
if (_folderList.Count != 0)
return;
if (token.IsCancellationRequested)
return;
IEnumerable<IMpdFilePath> Response = await _mpd.SafelySendCommandAsync(new LsInfoCommand(""));
if (Response == null)
@ -92,10 +99,10 @@ namespace unison
helper.EnsureHandle();
}
private bool IsOnMainThread()
/*private bool IsOnMainThread()
{
return App.Current.Dispatcher.Thread == System.Threading.Thread.CurrentThread;
}
}*/
private T FindParent<T>(DependencyObject child) where T : DependencyObject
{
@ -170,7 +177,7 @@ namespace unison
_filters.Clear();
Debug.WriteLine("is on main thread => " + IsOnMainThread());
//Debug.WriteLine("is on main thread => " + IsOnMainThread());
foreach (ContentPresenter superChild in FilterPanel.Children)
{
@ -179,12 +186,17 @@ namespace unison
string value = "";
bool isDir = false;
Debug.WriteLine("update filter => part 1");
StackPanel stackPanel = VisualTreeHelper.GetChild(superChild, 0) as StackPanel;
foreach (TextBox child in stackPanel.Children.OfType<TextBox>())
{
if (child.Name == "FilterValue")
value = child.Text;
}
Debug.WriteLine("update filter => part 2");
foreach (ComboBox child in stackPanel.Children.OfType<ComboBox>())
{
if (child.Name == "FilterType")
@ -202,6 +214,8 @@ namespace unison
value = child.SelectedItem.ToString();
}
Debug.WriteLine("update filter => part 3");
if (value != "")
{
if (!isDir)
@ -209,10 +223,15 @@ namespace unison
else
_filters.Add(new FilterBase(value, FilterOperator.None));
await _shuffle.GetSongsFromFilter(_filters);
await Task.Run(async () =>
{
await _shuffle.GetSongsFromFilter(_filters, _mpd._cancelCommand.Token);
});
SongFilterPanel.Visibility = Visibility.Visible;
SongFilterNumber.Text = _shuffle._songList.Count.ToString();
}
Debug.WriteLine("update filter => part 4");
}
Debug.WriteLine("update filter => stop");
@ -309,6 +328,8 @@ namespace unison
// start dispatcher
// write _shuffle.AddedSongs in dispatcher
await UpdateFilter();
await AddToQueue(int.Parse(SongNumber.Text));
Debug.WriteLine("add to queue finished");
@ -318,16 +339,24 @@ namespace unison
private async Task AddToQueue(int NumberToAdd)
{
await UpdateFilter();
//await UpdateFilter();
Debug.WriteLine("check filters");
if (IsFilterEmpty())
await _shuffle.AddToQueueRandom(NumberToAdd);
{
await Task.Run(async () =>
{
await _shuffle.AddToQueueRandom(NumberToAdd, _mpd._cancelCommand.Token);
});
}
else
{
Debug.WriteLine("add to queue filter - before");
await _shuffle.AddToQueueFilter(NumberToAdd);
await Task.Run(async () =>
{
await _shuffle.AddToQueueFilter(NumberToAdd, _mpd._cancelCommand.Token);
});
Debug.WriteLine("add to queue filter - after");
}
@ -348,7 +377,11 @@ namespace unison
}
Debug.WriteLine("continuous __before__ add to queue");
await AddToQueue(5);
await UpdateFilter();
await Task.Run(async () =>
{
await AddToQueue(5);
});
Debug.WriteLine("continuous __after__ add to queue");
}
@ -359,7 +392,10 @@ namespace unison
else
_continuous = false;
if (_mpd.GetStatus().PlaylistLength < 5)
int Length = _mpd.GetStatus().PlaylistLength;
Trace.WriteLine("Length is " + Length);
if (/*_mpd.GetStatus().PlaylistLength*/Length < 5)
await HandleContinuous();
}
}