Ver código fonte

Fix a very common bug causing PP and STAR to not update or be from the
wrong difficulty. Binding to OnPresentContent gives us accurate up to
date info from Beat SAber.

Stephen Damm 5 anos atrás
pai
commit
e441d074fb
1 arquivos alterados com 37 adições e 9 exclusões
  1. 37 9
      SongBrowserPlugin/UI/Browser/SongBrowserUI.cs

+ 37 - 9
SongBrowserPlugin/UI/Browser/SongBrowserUI.cs

@@ -472,8 +472,11 @@ namespace SongBrowser.UI
             _beatUi.LevelPackLevelsViewController.didSelectLevelEvent -= OnDidSelectLevelEvent;
             _beatUi.LevelPackLevelsViewController.didSelectLevelEvent -= OnDidSelectLevelEvent;
             _beatUi.LevelPackLevelsViewController.didSelectLevelEvent += OnDidSelectLevelEvent;
             _beatUi.LevelPackLevelsViewController.didSelectLevelEvent += OnDidSelectLevelEvent;
 
 
-            _beatUi.LevelDifficultyViewController.didSelectDifficultyEvent -= OnDidSelectDifficultyEvent;
-            _beatUi.LevelDifficultyViewController.didSelectDifficultyEvent += OnDidSelectDifficultyEvent;
+            _beatUi.LevelDetailViewController.didPresentContentEvent -= OnDidPresentContentEvent;
+            _beatUi.LevelDetailViewController.didPresentContentEvent += OnDidPresentContentEvent;
+
+            _beatUi.LevelDetailViewController.didChangeDifficultyBeatmapEvent -= OnDidChangeDifficultyEvent;
+            _beatUi.LevelDetailViewController.didChangeDifficultyBeatmapEvent += OnDidChangeDifficultyEvent;
 
 
             _beatUi.LevelPacksTableView.didSelectPackEvent -= _levelPacksTableView_didSelectPackEvent;
             _beatUi.LevelPacksTableView.didSelectPackEvent -= _levelPacksTableView_didSelectPackEvent;
             _beatUi.LevelPacksTableView.didSelectPackEvent += _levelPacksTableView_didSelectPackEvent;
             _beatUi.LevelPacksTableView.didSelectPackEvent += _levelPacksTableView_didSelectPackEvent;
@@ -797,13 +800,39 @@ namespace SongBrowser.UI
         /// <summary>
         /// <summary>
         /// Handle difficulty level selection.
         /// Handle difficulty level selection.
         /// </summary>
         /// </summary>
-        private void OnDidSelectDifficultyEvent(BeatmapDifficultySegmentedControlController view, BeatmapDifficulty beatmap)
+        private void OnDidChangeDifficultyEvent(StandardLevelDetailViewController view, IDifficultyBeatmap beatmap)
+        {
+            Logger.Trace("OnDidChangeDifficultyEvent({0})", beatmap);
+
+            if (view.selectedDifficultyBeatmap == null)
+            {
+                return;
+            }
+
+            _deleteButton.interactable = (view.selectedDifficultyBeatmap.level.levelID.Length >= 32);
+
+            RefreshScoreSaberData(view.selectedDifficultyBeatmap.level, beatmap.difficulty);
+            RefreshNoteJumpSpeed(beatmap.difficulty);
+        }
+
+        /// <summary>
+        /// BeatSaber finished loading content.  This is when the difficulty is finally updated.
+        /// </summary>
+        /// <param name="view"></param>
+        /// <param name="type"></param>
+        private void OnDidPresentContentEvent(StandardLevelDetailViewController view, StandardLevelDetailViewController.ContentType type)
         {
         {
-            Logger.Trace("OnDidSelectDifficultyEvent({0})", beatmap);
+            Logger.Trace("OnDidPresentContentEvent()");
+
+            if (view.selectedDifficultyBeatmap == null)
+            {
+                return;
+            }
 
 
             _deleteButton.interactable = (_beatUi.LevelDetailViewController.selectedDifficultyBeatmap.level.levelID.Length >= 32);
             _deleteButton.interactable = (_beatUi.LevelDetailViewController.selectedDifficultyBeatmap.level.levelID.Length >= 32);
-            this.RefreshScoreSaberData(_beatUi.LevelDetailViewController.selectedDifficultyBeatmap.level);
-            this.RefreshNoteJumpSpeed(beatmap);
+
+            RefreshScoreSaberData(view.selectedDifficultyBeatmap.level, view.selectedDifficultyBeatmap.difficulty);
+            RefreshNoteJumpSpeed(view.selectedDifficultyBeatmap.difficulty);
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -816,7 +845,6 @@ namespace SongBrowser.UI
 
 
             _deleteButton.interactable = (level.levelID.Length >= 32);
             _deleteButton.interactable = (level.levelID.Length >= 32);
 
 
-            RefreshScoreSaberData(level);
             RefreshQuickScrollButtons();
             RefreshQuickScrollButtons();
             RefreshAddFavoriteButton(level.levelID);
             RefreshAddFavoriteButton(level.levelID);
         }
         }
@@ -1028,7 +1056,7 @@ namespace SongBrowser.UI
         /// <summary>
         /// <summary>
         /// Update GUI elements that show score saber data.
         /// Update GUI elements that show score saber data.
         /// </summary>
         /// </summary>
-        public void RefreshScoreSaberData(IPreviewBeatmapLevel level)
+        public void RefreshScoreSaberData(IPreviewBeatmapLevel level, BeatmapDifficulty vdifficulty)
         {
         {
             Logger.Trace("RefreshScoreSaberData({0})", level.levelID);
             Logger.Trace("RefreshScoreSaberData({0})", level.levelID);
 
 
@@ -1045,7 +1073,7 @@ namespace SongBrowser.UI
             }
             }
             Logger.Debug(difficultyString);
             Logger.Debug(difficultyString);
 
 
-            // Check for PP
+            // Check if we have data for this song
             Logger.Debug("Checking if have info for song {0}", level.songName);
             Logger.Debug("Checking if have info for song {0}", level.songName);
             var hash = CustomHelpers.GetSongHash(level.levelID);
             var hash = CustomHelpers.GetSongHash(level.levelID);
             if (ScoreSaberDatabaseDownloader.ScoreSaberDataFile.SongHashToScoreSaberData.ContainsKey(hash))
             if (ScoreSaberDatabaseDownloader.ScoreSaberDataFile.SongHashToScoreSaberData.ContainsKey(hash))