Looks like most of shuffle issues are resolved
This commit is contained in:
@ -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();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user