mirror of
https://github.com/osukey/osukey.git
synced 2025-06-24 12:47:56 +09:00
Simplify task logic in ModPresetColumn
This commit is contained in:
parent
c2b7598203
commit
070d156e89
@ -2,7 +2,6 @@
|
|||||||
// See the LICENCE file in the repository root for full licence text.
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
@ -53,16 +52,15 @@ namespace osu.Game.Overlays.Mods
|
|||||||
r.All<ModPreset>()
|
r.All<ModPreset>()
|
||||||
.Filter($"{nameof(ModPreset.Ruleset)}.{nameof(RulesetInfo.ShortName)} == $0"
|
.Filter($"{nameof(ModPreset.Ruleset)}.{nameof(RulesetInfo.ShortName)} == $0"
|
||||||
+ $" && {nameof(ModPreset.DeletePending)} == false", ruleset.Value.ShortName)
|
+ $" && {nameof(ModPreset.DeletePending)} == false", ruleset.Value.ShortName)
|
||||||
.OrderBy(preset => preset.Name),
|
.OrderBy(preset => preset.Name), asyncLoadPanels);
|
||||||
(presets, _, _) => asyncLoadPanels(presets));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private CancellationTokenSource? cancellationTokenSource;
|
private CancellationTokenSource? cancellationTokenSource;
|
||||||
|
|
||||||
private Task? latestLoadTask;
|
private Task? latestLoadTask;
|
||||||
internal bool ItemsLoaded => latestLoadTask == null;
|
internal bool ItemsLoaded => latestLoadTask?.IsCompleted ?? false;
|
||||||
|
|
||||||
private void asyncLoadPanels(IReadOnlyList<ModPreset> presets)
|
private void asyncLoadPanels(IRealmCollection<ModPreset> presets, ChangeSet changes, Exception error)
|
||||||
{
|
{
|
||||||
cancellationTokenSource?.Cancel();
|
cancellationTokenSource?.Cancel();
|
||||||
|
|
||||||
@ -72,23 +70,14 @@ namespace osu.Game.Overlays.Mods
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var panels = presets.Select(preset => new ModPresetPanel(preset.ToLive(realm))
|
latestLoadTask = LoadComponentsAsync(presets.Select(p => new ModPresetPanel(p.ToLive(realm))
|
||||||
{
|
{
|
||||||
Shear = Vector2.Zero
|
Shear = Vector2.Zero
|
||||||
});
|
}), loaded =>
|
||||||
|
|
||||||
Task? loadTask;
|
|
||||||
|
|
||||||
latestLoadTask = loadTask = LoadComponentsAsync(panels, loaded =>
|
|
||||||
{
|
{
|
||||||
ItemsFlow.RemoveAll(panel => panel is ModPresetPanel);
|
ItemsFlow.RemoveAll(panel => panel is ModPresetPanel);
|
||||||
ItemsFlow.AddRange(loaded);
|
ItemsFlow.AddRange(loaded);
|
||||||
}, (cancellationTokenSource = new CancellationTokenSource()).Token);
|
}, (cancellationTokenSource = new CancellationTokenSource()).Token);
|
||||||
loadTask.ContinueWith(_ =>
|
|
||||||
{
|
|
||||||
if (loadTask == latestLoadTask)
|
|
||||||
latestLoadTask = null;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Dispose(bool isDisposing)
|
protected override void Dispose(bool isDisposing)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user