private async Task <CustomBeatmapLevel> LoadCustomBeatmapLevelAsync(CustomPreviewBeatmapLevel level, CancellationToken token) { CustomBeatmapLevel customLevel = new CustomBeatmapLevel(level, null, null); BeatmapLevelData beatmapData = await _customLevelLoader.LoadBeatmapLevelDataAsync(level.customLevelPath, customLevel, level.standardLevelInfoSaveData, token).ConfigureAwait(false); customLevel.SetBeatmapLevelData(beatmapData); return(customLevel); }
/// <summary> /// Loads a single custom beatmap level. /// </summary> /// <param name="level">The custom preview beatmap for which you want to load the IBeatmapLevel for.</param> /// <param name="onFinish">The function that is called when the IBeatmapLevel is retrieved.</param> /// <returns>An awaitable Task.</returns> public async Task LoadSingleBeatmapAsync(CustomPreviewBeatmapLevel level, Action <IBeatmapLevel> onFinish) { CancellationTokenSource tokenSource = new CancellationTokenSource(TimeoutDelay); CustomBeatmapLevel customLevel = new CustomBeatmapLevel(CreateLevelCopyWithReplacedMediaLoader(level, MediaLoader), null, null); try { BeatmapLevelData beatmapData = await LevelLoader.LoadBeatmapLevelDataAsync(level.customLevelPath, customLevel, level.standardLevelInfoSaveData, tokenSource.Token); if (beatmapData != null) { customLevel.SetBeatmapLevelData(beatmapData); string levelID = GetSimplifiedLevelID(customLevel); if (!_cache.ContainsKey(levelID) && !IsCaching) { _cache[GetSimplifiedLevelID(customLevel)] = new BeatmapDetails(customLevel); } try { onFinish?.Invoke(customLevel); } catch (Exception e) { Logger.log.Warn("Unexpected exception occurred in delegate after loading beatmap"); Logger.log.Debug(e); } } else { Logger.log.Debug($"Unable to load beatmap level data for '{level.songName}' (no data returned)"); } } catch (OperationCanceledException) { Logger.log.Debug($"Unable to load beatmap level data for '{level.songName}' (load task timed out)"); } tokenSource.Dispose(); }