Esempio n. 1
0
        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();
        }