Browse Source

Sort by BeatSaver heat. (#84)

Halsafar 5 years ago
parent
commit
cdcc357025

+ 35 - 2
SongBrowserPlugin/DataAccess/SongBrowserModel.cs

@@ -529,6 +529,9 @@ namespace SongBrowser
                 case SongSortMode.Rating:
                     sortedSongs = SortBeatSaverRating(filteredSongs);
                     break;
+                case SongSortMode.Heat:
+                    sortedSongs = SortBeatSaverHeat(filteredSongs);
+                    break;
                 case SongSortMode.YourPlayCount:
                     sortedSongs = SortPlayCount(filteredSongs);
                     break;
@@ -957,9 +960,9 @@ namespace SongBrowser
         /// <returns></returns>
         private List<IPreviewBeatmapLevel> SortBeatSaverRating(List<IPreviewBeatmapLevel> levelIds)
         {
-            Logger.Info("Sorting song list by BeatSaver Rating");
+            Logger.Info("Sorting song list by BeatSaver Rating!");
 
-            // Do not always have data when trying to sort by UpVotes
+            // Do not always have data when trying to sort by rating
             if (_levelHashToDownloaderData == null)
             {
                 return levelIds;
@@ -979,5 +982,35 @@ namespace SongBrowser
                 })
                 .ToList();
         }
+
+        /// <summary>
+        /// Sorting by BeatSaver heat stat.
+        /// </summary>
+        /// <param name="levelIds"></param>
+        /// <returns></returns>
+        private List<IPreviewBeatmapLevel> SortBeatSaverHeat(List<IPreviewBeatmapLevel> levelIds)
+        {
+            Logger.Info("Sorting song list by BeatSaver Heat!");
+
+            // Do not always have data when trying to sort by heat
+            if (_levelHashToDownloaderData == null)
+            {
+                return levelIds;
+            }
+
+            return levelIds
+                .OrderByDescending(x => {
+                    var hash = CustomHelpers.GetSongHash(x.levelID);
+                    if (_levelHashToDownloaderData.ContainsKey(hash))
+                    {
+                        return _levelHashToDownloaderData[hash].Heat;
+                    }
+                    else
+                    {
+                        return int.MinValue;
+                    }
+                })
+                .ToList();
+        }
     }
 }

+ 1 - 0
SongBrowserPlugin/DataAccess/SongBrowserSettings.cs

@@ -24,6 +24,7 @@ namespace SongBrowser.DataAccess
         PP,
         UpVotes,
         Rating,
+        Heat,
         PlayCount,
         Stars,
 

+ 2 - 2
SongBrowserPlugin/UI/Browser/SongBrowserUI.cs

@@ -283,12 +283,12 @@ namespace SongBrowser.UI
 
             string[] sortButtonNames = new string[]
             {
-                    "Title", "Author", "Newest", "YourPlays", "PP", "Stars", "UpVotes", "PlayCount", "Rating"
+                    "Title", "Author", "Newest", "YourPlays", "PP", "Stars", "UpVotes", "PlayCount", "Rating", "Heat"
             };
 
             SongSortMode[] sortModes = new SongSortMode[]
             {
-                    SongSortMode.Default, SongSortMode.Author, SongSortMode.Newest, SongSortMode.YourPlayCount, SongSortMode.PP, SongSortMode.Stars,  SongSortMode.UpVotes, SongSortMode.PlayCount, SongSortMode.Rating
+                    SongSortMode.Default, SongSortMode.Author, SongSortMode.Newest, SongSortMode.YourPlayCount, SongSortMode.PP, SongSortMode.Stars,  SongSortMode.UpVotes, SongSortMode.PlayCount, SongSortMode.Rating, SongSortMode.Heat
             };
 
             _sortButtonGroup = new List<SongSortButton>();