Explorar o código

Fix switching filters with level packs enabled.
Disable levelPack change handler when forcing BeatSaber to select a level pack.
Do not always forcefully change the level pack when updating level
records.

Stephen Damm %!s(int64=5) %!d(string=hai) anos
pai
achega
6ba0a6bda5

+ 1 - 1
SongBrowserPlugin/DataAccess/SongBrowserModel.cs

@@ -375,7 +375,7 @@ namespace SongBrowser
             }
 
             // filter
-            Logger.Debug("Starting filtering songs...");
+            Logger.Debug($"Starting filtering songs by {_settings.filterMode}");
             Stopwatch stopwatch = Stopwatch.StartNew();
 
             switch (_settings.filterMode)

+ 1 - 0
SongBrowserPlugin/SongBrowserApplication.cs

@@ -224,6 +224,7 @@ namespace SongBrowser
             yield return new WaitForEndOfFrame();
 
             _songBrowserUI.UpdateLevelDataModel();
+            _songBrowserUI.UpdateLevelPackSelection();
             _songBrowserUI.RefreshSongList();
         }
 

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

@@ -568,7 +568,7 @@ namespace SongBrowser.UI
         /// </summary>
         public void CancelFilter()
         {
-            Logger.Debug("Cancelling filter.");
+            Logger.Debug($"Cancelling filter, levelPack {_lastLevelPack}");
             _model.Settings.filterMode = SongFilterMode.None;
             _beatUi.LevelPackLevelsViewController.SetData(_lastLevelPack);
         }
@@ -592,11 +592,7 @@ namespace SongBrowser.UI
 
             try
             {
-                bool didUpdateLevelPack = this.UpdateLevelPackSelection();
-                if (!didUpdateLevelPack)
-                {
-                    ProcessSongList();
-                }
+                UpdateLevelPackSelection();
                 _beatUi.SelectAndScrollToLevel(_beatUi.LevelPackLevelsTableView, _model.LastSelectedLevelId);
                 RefreshQuickScrollButtons();
             }
@@ -638,18 +634,16 @@ namespace SongBrowser.UI
 
             try
             {
+                // store the real level pack
                 if (levelPack.packID != SongBrowserModel.FilteredSongsPackId)
                 {
                     _lastLevelPack = levelPack;
                 }
 
-                // reset filter mode always here
-                /*if (this._model.Settings.currentLevelPackId != levelPack.packID)
-                {
-                    this._model.Settings.filterMode = SongFilterMode.None;
-                }*/
+                // reset level selection
+                _model.LastSelectedLevelId = null;
 
-                // save level pack
+                // save level packs
                 this._model.Settings.currentLevelPackId = levelPack.packID;
                 this._model.Settings.Save();
 
@@ -1414,12 +1408,6 @@ namespace SongBrowser.UI
                 }
 
                 _model.UpdateLevelRecords();
-
-                bool didUpdateLevelPack = UpdateLevelPackSelection();
-                if (didUpdateLevelPack)
-                {
-                    ProcessSongList();
-                }
             }
             catch (Exception e)
             {
@@ -1450,20 +1438,15 @@ namespace SongBrowser.UI
                 {
                     Logger.Debug("Automatically selecting level pack: {0}", _model.Settings.currentLevelPackId);
 
-                    // HACK - BeatSaber seems to always go back to OST1 internally.
-                    //      - Lets force it to the last pack id but not have SongBrowser functions fire.
-                    // Turn off our event processing
                     _beatUi.LevelPackViewController.didSelectPackEvent -= _levelPackViewController_didSelectPackEvent;
-                    _beatUi.LevelPacksTableView.didSelectPackEvent -= _levelPacksTableView_didSelectPackEvent;
 
-                    var levelPack = _beatUi.GetLevelPackByPackId(_model.Settings.currentLevelPackId);
+                    _lastLevelPack = _beatUi.GetLevelPackByPackId(_model.Settings.currentLevelPackId);
                     _beatUi.SelectLevelPack(_model.Settings.currentLevelPackId);
 
+                    _beatUi.LevelPackViewController.didSelectPackEvent += _levelPackViewController_didSelectPackEvent;
+
                     ProcessSongList();
 
-                    _beatUi.LevelPackViewController.didSelectPackEvent += _levelPackViewController_didSelectPackEvent;
-                    _beatUi.LevelPacksTableView.didSelectPackEvent += _levelPacksTableView_didSelectPackEvent;
-                    
                     return true;
                 }
             }