diff --git a/osu.Game/Screens/Ranking/ReplayDownloadButton.cs b/osu.Game/Screens/Ranking/ReplayDownloadButton.cs index a5b33e584d..b6166e97f6 100644 --- a/osu.Game/Screens/Ranking/ReplayDownloadButton.cs +++ b/osu.Game/Screens/Ranking/ReplayDownloadButton.cs @@ -83,6 +83,10 @@ namespace osu.Game.Screens.Ranking Score.BindValueChanged(score => { + // An export may be pending from the last score. + // Reset this to meet user expectations (a new score which has just been switched to shouldn't export) + State.ValueChanged -= exportWhenReady; + downloadTracker?.RemoveAndDisposeImmediately(); if (score.NewValue != null) @@ -117,11 +121,17 @@ namespace osu.Game.Screens.Ranking return true; case GlobalAction.ExportReplay: - State.BindValueChanged(exportWhenReady, true); - - // start the import via button - if (State.Value != DownloadState.LocallyAvailable) + if (State.Value == DownloadState.LocallyAvailable) + { + State.BindValueChanged(exportWhenReady, true); + } + else + { + // A download needs to be performed before we can export this replay. button.TriggerClick(); + if (button.Enabled.Value) + State.BindValueChanged(exportWhenReady, true); + } return true; }