Преглед изворни кода

Address #74. (#77)

Sort newest by cover image dates or folder create date.
Halsafar пре 5 година
родитељ
комит
a83d7b7ac3
1 измењених фајлова са 27 додато и 5 уклоњено
  1. 27 5
      SongBrowserPlugin/DataAccess/SongBrowserModel.cs

+ 27 - 5
SongBrowserPlugin/DataAccess/SongBrowserModel.cs

@@ -200,11 +200,8 @@ namespace SongBrowser
                 // SongLoader should filter duplicates but in case of failure we don't want to crash
                 if (!_cachedLastWriteTimes.ContainsKey(level.Value.levelID) || customSongDirChanged)
                 {
-                    // Always use the newest date.
-                    var lastWriteTime = File.GetLastWriteTimeUtc(level.Value.customLevelPath);
-                    var lastCreateTime = File.GetCreationTimeUtc(level.Value.customLevelPath);
-                    var lastTime = lastWriteTime > lastCreateTime ? lastWriteTime : lastCreateTime;
-                    _cachedLastWriteTimes[level.Value.levelID] = (lastTime - EPOCH).TotalMilliseconds;
+                    double lastWriteTime = GetSongUserDate(level.Value);
+                    _cachedLastWriteTimes[level.Value.levelID] = lastWriteTime;
                 }
 
                 if (!_levelIdToCustomLevel.ContainsKey(level.Value.levelID))
@@ -284,6 +281,31 @@ namespace SongBrowser
         }
 
         /// <summary>
+        /// Try to get the date from the cover file, likely the most reliable.
+        /// Fall back on the folders creation date.
+        /// </summary>
+        /// <param name="level"></param>
+        /// <returns></returns>
+        private double GetSongUserDate(CustomPreviewBeatmapLevel level)
+        {
+            var coverPath = Path.Combine(level.customLevelPath, level.standardLevelInfoSaveData.coverImageFilename);
+            var lastTime = EPOCH;
+            if (File.Exists(coverPath))
+            {
+                var lastWriteTime = File.GetLastWriteTimeUtc(coverPath);
+                var lastCreateTime = File.GetCreationTimeUtc(coverPath);
+                lastTime = lastWriteTime > lastCreateTime ? lastWriteTime : lastCreateTime;
+            }
+            else
+            {
+                var lastCreateTime = File.GetCreationTimeUtc(level.customLevelPath);
+                lastTime = lastCreateTime;
+            }
+
+            return (lastTime - EPOCH).TotalMilliseconds;
+        }
+
+        /// <summary>
         /// SongLoader doesn't fire event when we delete a song.
         /// </summary>
         /// <param name="levelPack"></param>