From df76636ffc5be7d5d817a7a943ec56a505339855 Mon Sep 17 00:00:00 2001
From: Endrik Tombak <enduslittlecomputer@gmail.com>
Date: Sat, 11 Apr 2020 14:08:16 +0300
Subject: [PATCH 1/4] Implement "prefer no video" option

---
 osu.Game/Configuration/OsuConfigManager.cs             |  2 ++
 osu.Game/Overlays/Direct/PanelDownloadButton.cs        | 10 ++++++----
 .../Overlays/Settings/Sections/Online/WebSettings.cs   |  5 +++++
 3 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/osu.Game/Configuration/OsuConfigManager.cs b/osu.Game/Configuration/OsuConfigManager.cs
index 41f6747b74..89eb084262 100644
--- a/osu.Game/Configuration/OsuConfigManager.cs
+++ b/osu.Game/Configuration/OsuConfigManager.cs
@@ -49,6 +49,7 @@ namespace osu.Game.Configuration
             };
 
             Set(OsuSetting.ExternalLinkWarning, true);
+            Set(OsuSetting.PreferNoVideo, false);
 
             // Audio
             Set(OsuSetting.VolumeInactive, 0.25, 0, 1, 0.01);
@@ -212,6 +213,7 @@ namespace osu.Game.Configuration
         IncreaseFirstObjectVisibility,
         ScoreDisplayMode,
         ExternalLinkWarning,
+        PreferNoVideo,
         Scaling,
         ScalingPositionX,
         ScalingPositionY,
diff --git a/osu.Game/Overlays/Direct/PanelDownloadButton.cs b/osu.Game/Overlays/Direct/PanelDownloadButton.cs
index 1b3657f010..f09586c571 100644
--- a/osu.Game/Overlays/Direct/PanelDownloadButton.cs
+++ b/osu.Game/Overlays/Direct/PanelDownloadButton.cs
@@ -4,6 +4,7 @@
 using osu.Framework.Allocation;
 using osu.Framework.Graphics;
 using osu.Game.Beatmaps;
+using osu.Game.Configuration;
 using osu.Game.Graphics.Containers;
 using osu.Game.Graphics.UserInterface;
 using osu.Game.Online;
@@ -14,12 +15,12 @@ namespace osu.Game.Overlays.Direct
     {
         protected bool DownloadEnabled => button.Enabled.Value;
 
-        private readonly bool noVideo;
+        private readonly bool? noVideo;
 
         private readonly ShakeContainer shakeContainer;
         private readonly DownloadButton button;
 
-        public PanelDownloadButton(BeatmapSetInfo beatmapSet, bool noVideo = false)
+        public PanelDownloadButton(BeatmapSetInfo beatmapSet, bool? noVideo = null)
             : base(beatmapSet)
         {
             this.noVideo = noVideo;
@@ -43,7 +44,7 @@ namespace osu.Game.Overlays.Direct
         }
 
         [BackgroundDependencyLoader(true)]
-        private void load(OsuGame game, BeatmapManager beatmaps)
+        private void load(OsuGame game, BeatmapManager beatmaps, OsuConfigManager osuConfig)
         {
             if (BeatmapSet.Value?.OnlineInfo?.Availability?.DownloadDisabled ?? false)
             {
@@ -66,7 +67,8 @@ namespace osu.Game.Overlays.Direct
                         break;
 
                     default:
-                        beatmaps.Download(BeatmapSet.Value, noVideo);
+                        var minimiseDownloadSize = noVideo ?? osuConfig.GetBindable<bool>(OsuSetting.PreferNoVideo).Value;
+                        beatmaps.Download(BeatmapSet.Value, minimiseDownloadSize);
                         break;
                 }
             };
diff --git a/osu.Game/Overlays/Settings/Sections/Online/WebSettings.cs b/osu.Game/Overlays/Settings/Sections/Online/WebSettings.cs
index a8b3e45a83..da3176aca8 100644
--- a/osu.Game/Overlays/Settings/Sections/Online/WebSettings.cs
+++ b/osu.Game/Overlays/Settings/Sections/Online/WebSettings.cs
@@ -21,6 +21,11 @@ namespace osu.Game.Overlays.Settings.Sections.Online
                     LabelText = "Warn about opening external links",
                     Bindable = config.GetBindable<bool>(OsuSetting.ExternalLinkWarning)
                 },
+                new SettingsCheckbox
+                {
+                    LabelText = "Prefer no-video downloads",
+                    Bindable = config.GetBindable<bool>(OsuSetting.PreferNoVideo)
+                },
             };
         }
     }

From fc1d497a864c48adf3d702beb1c0b7c93d23ddcd Mon Sep 17 00:00:00 2001
From: Endrik Tombak <enduslittlecomputer@gmail.com>
Date: Sat, 11 Apr 2020 14:21:28 +0300
Subject: [PATCH 2/4] Change PlaylistDownloadButton default

---
 osu.Game/Screens/Multi/DrawableRoomPlaylistItem.cs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/osu.Game/Screens/Multi/DrawableRoomPlaylistItem.cs b/osu.Game/Screens/Multi/DrawableRoomPlaylistItem.cs
index ed3f9af8e2..d58218b6b5 100644
--- a/osu.Game/Screens/Multi/DrawableRoomPlaylistItem.cs
+++ b/osu.Game/Screens/Multi/DrawableRoomPlaylistItem.cs
@@ -212,7 +212,7 @@ namespace osu.Game.Screens.Multi
 
         private class PlaylistDownloadButton : PanelDownloadButton
         {
-            public PlaylistDownloadButton(BeatmapSetInfo beatmapSet, bool noVideo = false)
+            public PlaylistDownloadButton(BeatmapSetInfo beatmapSet, bool? noVideo = null)
                 : base(beatmapSet, noVideo)
             {
                 Alpha = 0;

From 633b969017515da564a14036e7ad3eb0cbb5a141 Mon Sep 17 00:00:00 2001
From: Endrik Tombak <enduslittlecomputer@gmail.com>
Date: Sun, 12 Apr 2020 21:57:35 +0300
Subject: [PATCH 3/4] Apply review suggestions

---
 .../Visual/Online/TestSceneDirectDownloadButton.cs  |  4 ++--
 osu.Game/Overlays/Direct/PanelDownloadButton.cs     | 13 ++++++-------
 .../Settings/Sections/Online/WebSettings.cs         |  3 ++-
 osu.Game/Screens/Multi/DrawableRoomPlaylistItem.cs  |  4 ++--
 4 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/osu.Game.Tests/Visual/Online/TestSceneDirectDownloadButton.cs b/osu.Game.Tests/Visual/Online/TestSceneDirectDownloadButton.cs
index 5b0c2d3c67..f612992bf6 100644
--- a/osu.Game.Tests/Visual/Online/TestSceneDirectDownloadButton.cs
+++ b/osu.Game.Tests/Visual/Online/TestSceneDirectDownloadButton.cs
@@ -149,8 +149,8 @@ namespace osu.Game.Tests.Visual.Online
 
             public DownloadState DownloadState => State.Value;
 
-            public TestDownloadButton(BeatmapSetInfo beatmapSet, bool noVideo = false)
-                : base(beatmapSet, noVideo)
+            public TestDownloadButton(BeatmapSetInfo beatmapSet)
+                : base(beatmapSet)
             {
             }
         }
diff --git a/osu.Game/Overlays/Direct/PanelDownloadButton.cs b/osu.Game/Overlays/Direct/PanelDownloadButton.cs
index f09586c571..51f5b2ae4f 100644
--- a/osu.Game/Overlays/Direct/PanelDownloadButton.cs
+++ b/osu.Game/Overlays/Direct/PanelDownloadButton.cs
@@ -2,6 +2,7 @@
 // See the LICENCE file in the repository root for full licence text.
 
 using osu.Framework.Allocation;
+using osu.Framework.Bindables;
 using osu.Framework.Graphics;
 using osu.Game.Beatmaps;
 using osu.Game.Configuration;
@@ -15,16 +16,13 @@ namespace osu.Game.Overlays.Direct
     {
         protected bool DownloadEnabled => button.Enabled.Value;
 
-        private readonly bool? noVideo;
-
         private readonly ShakeContainer shakeContainer;
         private readonly DownloadButton button;
+        private readonly BindableBool noVideoSetting = new BindableBool();
 
-        public PanelDownloadButton(BeatmapSetInfo beatmapSet, bool? noVideo = null)
+        public PanelDownloadButton(BeatmapSetInfo beatmapSet)
             : base(beatmapSet)
         {
-            this.noVideo = noVideo;
-
             InternalChild = shakeContainer = new ShakeContainer
             {
                 RelativeSizeAxes = Axes.Both,
@@ -53,6 +51,8 @@ namespace osu.Game.Overlays.Direct
                 return;
             }
 
+            noVideoSetting.BindTo(osuConfig.GetBindable<bool>(OsuSetting.PreferNoVideo));
+
             button.Action = () =>
             {
                 switch (State.Value)
@@ -67,8 +67,7 @@ namespace osu.Game.Overlays.Direct
                         break;
 
                     default:
-                        var minimiseDownloadSize = noVideo ?? osuConfig.GetBindable<bool>(OsuSetting.PreferNoVideo).Value;
-                        beatmaps.Download(BeatmapSet.Value, minimiseDownloadSize);
+                        beatmaps.Download(BeatmapSet.Value, noVideoSetting.Value);
                         break;
                 }
             };
diff --git a/osu.Game/Overlays/Settings/Sections/Online/WebSettings.cs b/osu.Game/Overlays/Settings/Sections/Online/WebSettings.cs
index da3176aca8..23513eade8 100644
--- a/osu.Game/Overlays/Settings/Sections/Online/WebSettings.cs
+++ b/osu.Game/Overlays/Settings/Sections/Online/WebSettings.cs
@@ -23,7 +23,8 @@ namespace osu.Game.Overlays.Settings.Sections.Online
                 },
                 new SettingsCheckbox
                 {
-                    LabelText = "Prefer no-video downloads",
+                    LabelText = "Prefer downloads without video",
+                    Keywords = new[] { "no-video" },
                     Bindable = config.GetBindable<bool>(OsuSetting.PreferNoVideo)
                 },
             };
diff --git a/osu.Game/Screens/Multi/DrawableRoomPlaylistItem.cs b/osu.Game/Screens/Multi/DrawableRoomPlaylistItem.cs
index d58218b6b5..d7dcca9809 100644
--- a/osu.Game/Screens/Multi/DrawableRoomPlaylistItem.cs
+++ b/osu.Game/Screens/Multi/DrawableRoomPlaylistItem.cs
@@ -212,8 +212,8 @@ namespace osu.Game.Screens.Multi
 
         private class PlaylistDownloadButton : PanelDownloadButton
         {
-            public PlaylistDownloadButton(BeatmapSetInfo beatmapSet, bool? noVideo = null)
-                : base(beatmapSet, noVideo)
+            public PlaylistDownloadButton(BeatmapSetInfo beatmapSet)
+                : base(beatmapSet)
             {
                 Alpha = 0;
             }

From 13812fef4c1af988e1d292e43d96e20dc17b0784 Mon Sep 17 00:00:00 2001
From: Endrik Tombak <enduslittlecomputer@gmail.com>
Date: Mon, 13 Apr 2020 17:28:02 +0300
Subject: [PATCH 4/4] Replace BindTo with setting the bindable

---
 osu.Game/Overlays/Direct/PanelDownloadButton.cs | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/osu.Game/Overlays/Direct/PanelDownloadButton.cs b/osu.Game/Overlays/Direct/PanelDownloadButton.cs
index 51f5b2ae4f..dfcaf5ded6 100644
--- a/osu.Game/Overlays/Direct/PanelDownloadButton.cs
+++ b/osu.Game/Overlays/Direct/PanelDownloadButton.cs
@@ -18,7 +18,7 @@ namespace osu.Game.Overlays.Direct
 
         private readonly ShakeContainer shakeContainer;
         private readonly DownloadButton button;
-        private readonly BindableBool noVideoSetting = new BindableBool();
+        private Bindable<bool> noVideoSetting;
 
         public PanelDownloadButton(BeatmapSetInfo beatmapSet)
             : base(beatmapSet)
@@ -51,7 +51,7 @@ namespace osu.Game.Overlays.Direct
                 return;
             }
 
-            noVideoSetting.BindTo(osuConfig.GetBindable<bool>(OsuSetting.PreferNoVideo));
+            noVideoSetting = osuConfig.GetBindable<bool>(OsuSetting.PreferNoVideo);
 
             button.Action = () =>
             {