/// <summary> /// Parse the current pp data file. /// Public so controllers can decide when to update it. /// </summary> public void UpdateScoreSaberDataMapping() { Logger.Trace("UpdateScoreSaberDataMapping()"); ScoreSaberDataFile scoreSaberDataFile = ScoreSaberDatabaseDownloader.ScoreSaberDataFile; // bail if (scoreSaberDataFile == null) { Logger.Warning("Score saber data is not ready yet..."); return; } foreach (var level in SongLoader.CustomLevels) { // Skip if (_levelIdToScoreSaberData.ContainsKey(level.levelID)) { continue; } ScoreSaberData scoreSaberData = null; // try to version match first if (_levelIdToSongVersion.ContainsKey(level.levelID)) { String version = _levelIdToSongVersion[level.levelID]; if (scoreSaberDataFile.SongVersionToScoreSaberData.ContainsKey(version)) { scoreSaberData = scoreSaberDataFile.SongVersionToScoreSaberData[version]; } } if (scoreSaberData != null) { //Logger.Debug("{0} = {1}pp", level.songName, pp); _levelIdToScoreSaberData.Add(level.levelID, scoreSaberData); } } }
/// <summary> /// Wait for score saber related files to download. /// </summary> /// <returns></returns> private IEnumerator WaitForDownload() { if (ScoreSaberDatabaseDownloader.ScoreSaberDataFile != null) { Logger.Info("Using cached copy of ScoreSaberData..."); } else { SongBrowserApplication.MainProgressBar.ShowMessage("Downloading BeatStar data..."); Logger.Info("Attempting to download: {0}", ScoreSaberDatabaseDownloader.SCRAPED_SCORE_SABER_JSON_URL); using (UnityWebRequest www = UnityWebRequest.Get(ScoreSaberDatabaseDownloader.SCRAPED_SCORE_SABER_JSON_URL)) { // Use 4MB cache, large enough for this file to grow for awhile. www.SetCacheable(new CacheableDownloadHandlerScoreSaberData(www, _buffer)); yield return(www.SendWebRequest()); Logger.Debug("Returned from web request!..."); try { ScoreSaberDatabaseDownloader.ScoreSaberDataFile = (www.downloadHandler as CacheableDownloadHandlerScoreSaberData).ScoreSaberDataFile; Logger.Info("Success downloading ScoreSaber data!"); SongBrowserApplication.MainProgressBar.ShowMessage("Success downloading BeatStar data...", 10.0f); onScoreSaberDataDownloaded?.Invoke(); } catch (System.InvalidOperationException) { Logger.Error("Failed to download ScoreSaber data file..."); } catch (Exception e) { Logger.Exception("Exception trying to download ScoreSaber data file...", e); } } } }