From e010dfb1500c445ba8016ae9eb3eee2305d113ed Mon Sep 17 00:00:00 2001
From: Dean Herbert <pe@ppy.sh>
Date: Thu, 14 Apr 2022 17:32:47 +0900
Subject: [PATCH] Handle virtual track string to avoid throwing later in lookup

---
 osu.Game/Beatmaps/WorkingBeatmapCache.cs | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/osu.Game/Beatmaps/WorkingBeatmapCache.cs b/osu.Game/Beatmaps/WorkingBeatmapCache.cs
index 7d28208157..bc810ee35e 100644
--- a/osu.Game/Beatmaps/WorkingBeatmapCache.cs
+++ b/osu.Game/Beatmaps/WorkingBeatmapCache.cs
@@ -26,6 +26,11 @@ namespace osu.Game.Beatmaps
     {
         private readonly WeakList<BeatmapManagerWorkingBeatmap> workingCache = new WeakList<BeatmapManagerWorkingBeatmap>();
 
+        /// <summary>
+        /// Beatmap files may specify this filename to denote that they don't have an audio track.
+        /// </summary>
+        private const string virtual_track_filename = @"virtual";
+
         /// <summary>
         /// A default representation of a WorkingBeatmap to use when no beatmap is available.
         /// </summary>
@@ -40,7 +45,8 @@ namespace osu.Game.Beatmaps
         [CanBeNull]
         private readonly GameHost host;
 
-        public WorkingBeatmapCache(ITrackStore trackStore, AudioManager audioManager, IResourceStore<byte[]> resources, IResourceStore<byte[]> files, WorkingBeatmap defaultBeatmap = null, GameHost host = null)
+        public WorkingBeatmapCache(ITrackStore trackStore, AudioManager audioManager, IResourceStore<byte[]> resources, IResourceStore<byte[]> files, WorkingBeatmap defaultBeatmap = null,
+                                   GameHost host = null)
         {
             DefaultBeatmap = defaultBeatmap;
 
@@ -157,6 +163,9 @@ namespace osu.Game.Beatmaps
                 if (string.IsNullOrEmpty(Metadata?.AudioFile))
                     return null;
 
+                if (Metadata.AudioFile == virtual_track_filename)
+                    return null;
+
                 try
                 {
                     return resources.Tracks.Get(BeatmapSetInfo.GetPathForFile(Metadata.AudioFile));
@@ -173,6 +182,9 @@ namespace osu.Game.Beatmaps
                 if (string.IsNullOrEmpty(Metadata?.AudioFile))
                     return null;
 
+                if (Metadata.AudioFile == virtual_track_filename)
+                    return null;
+
                 try
                 {
                     var trackData = GetStream(BeatmapSetInfo.GetPathForFile(Metadata.AudioFile));