mirror of
https://github.com/osukey/osukey.git
synced 2025-07-02 16:59:53 +09:00
Disallow multiple download requests for the same panel
This commit is contained in:
@ -29,7 +29,7 @@ namespace osu.Game.Overlays.Direct
|
|||||||
{
|
{
|
||||||
public abstract class DirectPanel : Container
|
public abstract class DirectPanel : Container
|
||||||
{
|
{
|
||||||
protected readonly BeatmapSetInfo SetInfo;
|
public readonly BeatmapSetInfo SetInfo;
|
||||||
|
|
||||||
protected Box BlackBackground;
|
protected Box BlackBackground;
|
||||||
|
|
||||||
@ -108,10 +108,23 @@ namespace osu.Game.Overlays.Direct
|
|||||||
base.OnHoverLost(state);
|
base.OnHoverLost(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// this should eventually be moved to a more central place, like BeatmapManager.
|
||||||
|
private DownloadBeatmapSetRequest downloadRequest;
|
||||||
|
|
||||||
protected void StartDownload()
|
protected void StartDownload()
|
||||||
{
|
{
|
||||||
if (api == null) return;
|
if (api == null) return;
|
||||||
|
|
||||||
|
// we already have an active download running.
|
||||||
|
if (downloadRequest != null)
|
||||||
|
{
|
||||||
|
content.MoveToX(-5, 50, Easing.OutSine).Then()
|
||||||
|
.MoveToX(5, 100, Easing.InOutSine).Then()
|
||||||
|
.MoveToX(-5, 100, Easing.InOutSine).Then()
|
||||||
|
.MoveToX(0, 50, Easing.InSine).Then();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!api.LocalUser.Value.IsSupporter)
|
if (!api.LocalUser.Value.IsSupporter)
|
||||||
{
|
{
|
||||||
notifications.Post(new SimpleNotification
|
notifications.Post(new SimpleNotification
|
||||||
@ -132,16 +145,18 @@ namespace osu.Game.Overlays.Direct
|
|||||||
Text = $"Downloading {SetInfo.Metadata.Artist} - {SetInfo.Metadata.Title}",
|
Text = $"Downloading {SetInfo.Metadata.Artist} - {SetInfo.Metadata.Title}",
|
||||||
};
|
};
|
||||||
|
|
||||||
var request = new DownloadBeatmapSetRequest(SetInfo);
|
downloadRequest = new DownloadBeatmapSetRequest(SetInfo);
|
||||||
request.Failure += e =>
|
downloadRequest.Failure += e =>
|
||||||
{
|
{
|
||||||
progressBar.Current.Value = 0;
|
progressBar.Current.Value = 0;
|
||||||
progressBar.FadeOut(500);
|
progressBar.FadeOut(500);
|
||||||
downloadNotification.State = ProgressNotificationState.Completed;
|
downloadNotification.State = ProgressNotificationState.Completed;
|
||||||
Logger.Error(e, "Failed to get beatmap download information");
|
Logger.Error(e, "Failed to get beatmap download information");
|
||||||
|
|
||||||
|
downloadRequest = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
request.Progress += (current, total) =>
|
downloadRequest.Progress += (current, total) =>
|
||||||
{
|
{
|
||||||
float progress = (float)current / total;
|
float progress = (float)current / total;
|
||||||
|
|
||||||
@ -151,7 +166,7 @@ namespace osu.Game.Overlays.Direct
|
|||||||
downloadNotification.Progress = progress;
|
downloadNotification.Progress = progress;
|
||||||
};
|
};
|
||||||
|
|
||||||
request.Success += data =>
|
downloadRequest.Success += data =>
|
||||||
{
|
{
|
||||||
progressBar.Current.Value = 1;
|
progressBar.Current.Value = 1;
|
||||||
progressBar.FadeOut(500);
|
progressBar.FadeOut(500);
|
||||||
@ -165,14 +180,15 @@ namespace osu.Game.Overlays.Direct
|
|||||||
|
|
||||||
downloadNotification.CancelRequested += () =>
|
downloadNotification.CancelRequested += () =>
|
||||||
{
|
{
|
||||||
request.Cancel();
|
downloadRequest.Cancel();
|
||||||
|
downloadRequest = null;
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
notifications.Post(downloadNotification);
|
notifications.Post(downloadNotification);
|
||||||
|
|
||||||
// don't run in the main api queue as this is a long-running task.
|
// don't run in the main api queue as this is a long-running task.
|
||||||
Task.Run(() => request.Perform(api));
|
Task.Run(() => downloadRequest.Perform(api));
|
||||||
}
|
}
|
||||||
|
|
||||||
public class DownloadBeatmapSetRequest : APIDownloadRequest
|
public class DownloadBeatmapSetRequest : APIDownloadRequest
|
||||||
|
Reference in New Issue
Block a user