ContextWindow: Use Task.Run to load data outside main thread
All checks were successful
Test / Run tests (push) Successful in 2m29s
All checks were successful
Test / Run tests (push) Successful in 2m29s
This commit is contained in:
@@ -30,41 +30,49 @@ namespace Elwig.Windows {
|
||||
ControlUtils.InitializeDelayTimer(SearchInput, SearchInput_TextChanged);
|
||||
SearchInput.TextChanged -= SearchInput_TextChanged;
|
||||
ViewModel.FilterSeason = Utils.CurrentLastSeason;
|
||||
ViewModel.FilterOnlyUpcoming = true;
|
||||
}
|
||||
|
||||
private void Window_Loaded(object sender, RoutedEventArgs evt) {
|
||||
ViewModel.FilterOnlyUpcoming = true;
|
||||
protected override async Task OnInit(AppDbContext ctx) {
|
||||
LockInputs();
|
||||
}
|
||||
|
||||
private async Task RefreshList(bool updateSort = false) {
|
||||
using var ctx = new AppDbContext();
|
||||
var (_, deliveryScheduleQuery, filter) = await ViewModel.GetFilters(ctx);
|
||||
var deliverySchedules = await deliveryScheduleQuery
|
||||
.Include(s => s.Varieties)
|
||||
.Include(s => s.Branch)
|
||||
.AsSplitQuery()
|
||||
.ToListAsync();
|
||||
var vm = ViewModel;
|
||||
var cursor = Mouse.OverrideCursor != null;
|
||||
if (!cursor) Mouse.OverrideCursor = Cursors.Wait;
|
||||
var query = (vm.SearchQuery, vm.FilterSeason, vm.FilterOnlyUpcoming);
|
||||
var deliverySchedules = await Task.Run(async () => {
|
||||
using var ctx = new AppDbContext();
|
||||
var (_, deliveryScheduleQuery, filter) = await vm.GetFilters(ctx);
|
||||
var deliverySchedules = await deliveryScheduleQuery
|
||||
.Include(s => s.Varieties)
|
||||
.Include(s => s.Branch)
|
||||
.AsSplitQuery()
|
||||
.ToListAsync();
|
||||
|
||||
if (filter.Count > 0 && deliverySchedules.Count > 0) {
|
||||
var dict = deliverySchedules.AsParallel()
|
||||
.ToDictionary(s => s, s => s.SearchScore(filter))
|
||||
.OrderByDescending(a => a.Value)
|
||||
.ThenBy(a => a.Key.DateString)
|
||||
.ThenBy(a => a.Key.Branch.Name)
|
||||
.ThenBy(a => a.Key.Description);
|
||||
var threshold = dict.Select(a => a.Value).Max() * 3 / 4;
|
||||
deliverySchedules = dict
|
||||
.Where(a => a.Value > threshold)
|
||||
.Select(a => a.Key)
|
||||
.ToList();
|
||||
} else {
|
||||
deliverySchedules = deliverySchedules
|
||||
.OrderBy(s => s.DateString)
|
||||
.ThenBy(s => s.Branch.Name)
|
||||
.ThenBy(s => s.Description)
|
||||
.ToList();
|
||||
}
|
||||
if (filter.Count > 0 && deliverySchedules.Count > 0) {
|
||||
var dict = deliverySchedules.AsParallel()
|
||||
.ToDictionary(s => s, s => s.SearchScore(filter))
|
||||
.OrderByDescending(a => a.Value)
|
||||
.ThenBy(a => a.Key.DateString)
|
||||
.ThenBy(a => a.Key.Branch.Name)
|
||||
.ThenBy(a => a.Key.Description);
|
||||
var threshold = dict.Max(a => a.Value) * 3 / 4;
|
||||
deliverySchedules = [.. dict
|
||||
.Where(a => a.Value > threshold)
|
||||
.Select(a => a.Key)];
|
||||
} else {
|
||||
deliverySchedules = [.. deliverySchedules
|
||||
.OrderBy(s => s.DateString)
|
||||
.ThenBy(s => s.Branch.Name)
|
||||
.ThenBy(s => s.Description)];
|
||||
}
|
||||
|
||||
return deliverySchedules;
|
||||
});
|
||||
if (!cursor) Mouse.OverrideCursor = null;
|
||||
if (query != ((ViewModel.SearchQuery, ViewModel.FilterSeason, ViewModel.FilterOnlyUpcoming))) return;
|
||||
|
||||
ControlUtils.RenewItemsSource(DeliveryScheduleList, deliverySchedules,
|
||||
DeliveryScheduleList_SelectionChanged, ViewModel.TextFilter.Count > 0 ? ControlUtils.RenewSourceDefault.IfOnly : ControlUtils.RenewSourceDefault.None, !updateSort);
|
||||
|
||||
Reference in New Issue
Block a user