1
0
mirror of https://github.com/ppy/osu.git synced 2025-01-26 19:32:55 +08:00

Add back default timeout to GetPlayableBeatmap

This commit is contained in:
Dean Herbert 2021-11-17 10:48:33 +09:00
parent d2a7670494
commit 13f3e2eea9
3 changed files with 13 additions and 12 deletions

View File

@ -92,10 +92,10 @@ namespace osu.Game.Beatmaps
/// </summary> /// </summary>
/// <param name="ruleset">The <see cref="RulesetInfo"/> to create a playable <see cref="IBeatmap"/> for.</param> /// <param name="ruleset">The <see cref="RulesetInfo"/> to create a playable <see cref="IBeatmap"/> for.</param>
/// <param name="mods">The <see cref="Mod"/>s to apply to the <see cref="IBeatmap"/>.</param> /// <param name="mods">The <see cref="Mod"/>s to apply to the <see cref="IBeatmap"/>.</param>
/// <param name="cancellationToken">Cancellation token that cancels the beatmap loading process.</param> /// <param name="cancellationToken">Cancellation token that cancels the beatmap loading process. If not provided, a default timeout of 10,000ms will be applied to the load process.</param>
/// <returns>The converted <see cref="IBeatmap"/>.</returns> /// <returns>The converted <see cref="IBeatmap"/>.</returns>
/// <exception cref="BeatmapInvalidForRulesetException">If <see cref="Beatmap"/> could not be converted to <paramref name="ruleset"/>.</exception> /// <exception cref="BeatmapInvalidForRulesetException">If <see cref="Beatmap"/> could not be converted to <paramref name="ruleset"/>.</exception>
IBeatmap GetPlayableBeatmap(RulesetInfo ruleset, IReadOnlyList<Mod> mods = null, CancellationToken cancellationToken = default); IBeatmap GetPlayableBeatmap(RulesetInfo ruleset, IReadOnlyList<Mod> mods = null, CancellationToken? cancellationToken = null);
/// <summary> /// <summary>
/// Load a new audio track instance for this beatmap. This should be called once before accessing <see cref="Track"/>. /// Load a new audio track instance for this beatmap. This should be called once before accessing <see cref="Track"/>.

View File

@ -78,8 +78,9 @@ namespace osu.Game.Beatmaps
/// <returns>The applicable <see cref="IBeatmapConverter"/>.</returns> /// <returns>The applicable <see cref="IBeatmapConverter"/>.</returns>
protected virtual IBeatmapConverter CreateBeatmapConverter(IBeatmap beatmap, Ruleset ruleset) => ruleset.CreateBeatmapConverter(beatmap); protected virtual IBeatmapConverter CreateBeatmapConverter(IBeatmap beatmap, Ruleset ruleset) => ruleset.CreateBeatmapConverter(beatmap);
public virtual IBeatmap GetPlayableBeatmap(RulesetInfo ruleset, IReadOnlyList<Mod> mods = null, CancellationToken cancellationToken = default) public virtual IBeatmap GetPlayableBeatmap(RulesetInfo ruleset, IReadOnlyList<Mod> mods = null, CancellationToken? cancellationToken = null)
{ {
var token = cancellationToken ?? new CancellationTokenSource(10000).Token;
mods ??= Array.Empty<Mod>(); mods ??= Array.Empty<Mod>();
var rulesetInstance = ruleset.CreateInstance(); var rulesetInstance = ruleset.CreateInstance();
@ -96,19 +97,19 @@ namespace osu.Game.Beatmaps
// Apply conversion mods // Apply conversion mods
foreach (var mod in mods.OfType<IApplicableToBeatmapConverter>()) foreach (var mod in mods.OfType<IApplicableToBeatmapConverter>())
{ {
if (cancellationToken.IsCancellationRequested) if (token.IsCancellationRequested)
throw new BeatmapLoadTimeoutException(BeatmapInfo); throw new BeatmapLoadTimeoutException(BeatmapInfo);
mod.ApplyToBeatmapConverter(converter); mod.ApplyToBeatmapConverter(converter);
} }
// Convert // Convert
IBeatmap converted = converter.Convert(cancellationToken); IBeatmap converted = converter.Convert(token);
// Apply conversion mods to the result // Apply conversion mods to the result
foreach (var mod in mods.OfType<IApplicableAfterBeatmapConversion>()) foreach (var mod in mods.OfType<IApplicableAfterBeatmapConversion>())
{ {
if (cancellationToken.IsCancellationRequested) if (token.IsCancellationRequested)
throw new BeatmapLoadTimeoutException(BeatmapInfo); throw new BeatmapLoadTimeoutException(BeatmapInfo);
mod.ApplyToBeatmap(converted); mod.ApplyToBeatmap(converted);
@ -119,7 +120,7 @@ namespace osu.Game.Beatmaps
{ {
foreach (var mod in mods.OfType<IApplicableToDifficulty>()) foreach (var mod in mods.OfType<IApplicableToDifficulty>())
{ {
if (cancellationToken.IsCancellationRequested) if (token.IsCancellationRequested)
throw new BeatmapLoadTimeoutException(BeatmapInfo); throw new BeatmapLoadTimeoutException(BeatmapInfo);
mod.ApplyToDifficulty(converted.Difficulty); mod.ApplyToDifficulty(converted.Difficulty);
@ -138,10 +139,10 @@ namespace osu.Game.Beatmaps
{ {
foreach (var obj in converted.HitObjects) foreach (var obj in converted.HitObjects)
{ {
if (cancellationToken.IsCancellationRequested) if (token.IsCancellationRequested)
throw new BeatmapLoadTimeoutException(BeatmapInfo); throw new BeatmapLoadTimeoutException(BeatmapInfo);
obj.ApplyDefaults(converted.ControlPointInfo, converted.Difficulty, cancellationToken); obj.ApplyDefaults(converted.ControlPointInfo, converted.Difficulty, token);
} }
} }
catch (OperationCanceledException) catch (OperationCanceledException)
@ -153,7 +154,7 @@ namespace osu.Game.Beatmaps
{ {
foreach (var obj in converted.HitObjects) foreach (var obj in converted.HitObjects)
{ {
if (cancellationToken.IsCancellationRequested) if (token.IsCancellationRequested)
throw new BeatmapLoadTimeoutException(BeatmapInfo); throw new BeatmapLoadTimeoutException(BeatmapInfo);
mod.ApplyToHitObject(obj); mod.ApplyToHitObject(obj);
@ -164,7 +165,7 @@ namespace osu.Game.Beatmaps
foreach (var mod in mods.OfType<IApplicableToBeatmap>()) foreach (var mod in mods.OfType<IApplicableToBeatmap>())
{ {
cancellationToken.ThrowIfCancellationRequested(); token.ThrowIfCancellationRequested();
mod.ApplyToBeatmap(converted); mod.ApplyToBeatmap(converted);
} }

View File

@ -216,7 +216,7 @@ namespace osu.Game.Screens.Play.HUD
this.gameplayBeatmap = gameplayBeatmap; this.gameplayBeatmap = gameplayBeatmap;
} }
public override IBeatmap GetPlayableBeatmap(RulesetInfo ruleset, IReadOnlyList<Mod> mods = null, CancellationToken cancellationToken = default) public override IBeatmap GetPlayableBeatmap(RulesetInfo ruleset, IReadOnlyList<Mod> mods = null, CancellationToken? cancellationToken = null)
=> gameplayBeatmap; => gameplayBeatmap;
protected override IBeatmap GetBeatmap() => gameplayBeatmap; protected override IBeatmap GetBeatmap() => gameplayBeatmap;