mirror of
https://github.com/osukey/osukey.git
synced 2025-07-01 16:29:58 +09:00
Update remaining usages of download tracking
This commit is contained in:
@ -5,6 +5,7 @@ using System.Linq;
|
|||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Testing;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Online;
|
using osu.Game.Online;
|
||||||
using osu.Game.Online.API.Requests.Responses;
|
using osu.Game.Online.API.Requests.Responses;
|
||||||
@ -144,7 +145,7 @@ namespace osu.Game.Tests.Visual.Online
|
|||||||
{
|
{
|
||||||
public new bool DownloadEnabled => base.DownloadEnabled;
|
public new bool DownloadEnabled => base.DownloadEnabled;
|
||||||
|
|
||||||
public DownloadState DownloadState => State.Value;
|
public DownloadState DownloadState => this.ChildrenOfType<BeatmapDownloadTracker>().First().State.Value;
|
||||||
|
|
||||||
public TestDownloadButton(BeatmapSetInfo beatmapSet)
|
public TestDownloadButton(BeatmapSetInfo beatmapSet)
|
||||||
: base(beatmapSet)
|
: base(beatmapSet)
|
||||||
|
@ -5,6 +5,7 @@ using System;
|
|||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Configuration;
|
using osu.Game.Configuration;
|
||||||
using osu.Game.Graphics.Containers;
|
using osu.Game.Graphics.Containers;
|
||||||
@ -13,7 +14,7 @@ using osu.Game.Online;
|
|||||||
|
|
||||||
namespace osu.Game.Overlays.BeatmapListing.Panels
|
namespace osu.Game.Overlays.BeatmapListing.Panels
|
||||||
{
|
{
|
||||||
public class BeatmapPanelDownloadButton : BeatmapDownloadTrackingComposite
|
public class BeatmapPanelDownloadButton : CompositeDrawable
|
||||||
{
|
{
|
||||||
protected bool DownloadEnabled => button.Enabled.Value;
|
protected bool DownloadEnabled => button.Enabled.Value;
|
||||||
|
|
||||||
@ -26,16 +27,29 @@ namespace osu.Game.Overlays.BeatmapListing.Panels
|
|||||||
private readonly DownloadButton button;
|
private readonly DownloadButton button;
|
||||||
private Bindable<bool> noVideoSetting;
|
private Bindable<bool> noVideoSetting;
|
||||||
|
|
||||||
|
protected readonly BeatmapDownloadTracker DownloadTracker;
|
||||||
|
|
||||||
|
protected readonly Bindable<DownloadState> State = new Bindable<DownloadState>();
|
||||||
|
|
||||||
|
private readonly BeatmapSetInfo beatmapSet;
|
||||||
|
|
||||||
public BeatmapPanelDownloadButton(BeatmapSetInfo beatmapSet)
|
public BeatmapPanelDownloadButton(BeatmapSetInfo beatmapSet)
|
||||||
: base(beatmapSet)
|
|
||||||
{
|
{
|
||||||
InternalChild = shakeContainer = new ShakeContainer
|
this.beatmapSet = beatmapSet;
|
||||||
|
InternalChildren = new Drawable[]
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
shakeContainer = new ShakeContainer
|
||||||
Child = button = new DownloadButton
|
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
Child = button = new DownloadButton
|
||||||
|
{
|
||||||
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
|
DownloadTracker = new BeatmapDownloadTracker(beatmapSet)
|
||||||
|
{
|
||||||
|
State = { BindTarget = State }
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
button.Add(new DownloadProgressBar(beatmapSet)
|
button.Add(new DownloadProgressBar(beatmapSet)
|
||||||
@ -50,7 +64,7 @@ namespace osu.Game.Overlays.BeatmapListing.Panels
|
|||||||
{
|
{
|
||||||
base.LoadComplete();
|
base.LoadComplete();
|
||||||
|
|
||||||
button.State.BindTo(State);
|
((IBindable<DownloadState>)button.State).BindTo(DownloadTracker.State);
|
||||||
FinishTransforms(true);
|
FinishTransforms(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,7 +75,7 @@ namespace osu.Game.Overlays.BeatmapListing.Panels
|
|||||||
|
|
||||||
button.Action = () =>
|
button.Action = () =>
|
||||||
{
|
{
|
||||||
switch (State.Value)
|
switch (DownloadTracker.State.Value)
|
||||||
{
|
{
|
||||||
case DownloadState.Downloading:
|
case DownloadState.Downloading:
|
||||||
case DownloadState.Importing:
|
case DownloadState.Importing:
|
||||||
@ -73,16 +87,16 @@ namespace osu.Game.Overlays.BeatmapListing.Panels
|
|||||||
if (SelectedBeatmap.Value != null)
|
if (SelectedBeatmap.Value != null)
|
||||||
findPredicate = b => b.OnlineBeatmapID == SelectedBeatmap.Value.OnlineBeatmapID;
|
findPredicate = b => b.OnlineBeatmapID == SelectedBeatmap.Value.OnlineBeatmapID;
|
||||||
|
|
||||||
game?.PresentBeatmap(BeatmapSet.Value, findPredicate);
|
game?.PresentBeatmap(beatmapSet, findPredicate);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
beatmaps.Download(BeatmapSet.Value, noVideoSetting.Value);
|
beatmaps.Download(beatmapSet, noVideoSetting.Value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
State.BindValueChanged(state =>
|
DownloadTracker.State.BindValueChanged(state =>
|
||||||
{
|
{
|
||||||
switch (state.NewValue)
|
switch (state.NewValue)
|
||||||
{
|
{
|
||||||
@ -92,7 +106,7 @@ namespace osu.Game.Overlays.BeatmapListing.Panels
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (BeatmapSet.Value?.OnlineInfo?.Availability.DownloadDisabled ?? false)
|
if (beatmapSet.OnlineInfo?.Availability.DownloadDisabled ?? false)
|
||||||
{
|
{
|
||||||
button.Enabled.Value = false;
|
button.Enabled.Value = false;
|
||||||
button.TooltipText = "this beatmap is currently not available for download.";
|
button.TooltipText = "this beatmap is currently not available for download.";
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Extensions.Color4Extensions;
|
using osu.Framework.Extensions.Color4Extensions;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Graphics.UserInterface;
|
using osu.Game.Graphics.UserInterface;
|
||||||
@ -12,13 +13,22 @@ using osuTK.Graphics;
|
|||||||
|
|
||||||
namespace osu.Game.Overlays.BeatmapListing.Panels
|
namespace osu.Game.Overlays.BeatmapListing.Panels
|
||||||
{
|
{
|
||||||
public class DownloadProgressBar : BeatmapDownloadTrackingComposite
|
public class DownloadProgressBar : CompositeDrawable
|
||||||
{
|
{
|
||||||
private readonly ProgressBar progressBar;
|
private readonly ProgressBar progressBar;
|
||||||
|
private readonly BeatmapDownloadTracker downloadTracker;
|
||||||
|
|
||||||
public DownloadProgressBar(BeatmapSetInfo beatmapSet)
|
public DownloadProgressBar(BeatmapSetInfo beatmapSet)
|
||||||
: base(beatmapSet)
|
|
||||||
{
|
{
|
||||||
|
InternalChildren = new Drawable[]
|
||||||
|
{
|
||||||
|
progressBar = new ProgressBar(false)
|
||||||
|
{
|
||||||
|
Height = 0,
|
||||||
|
Alpha = 0,
|
||||||
|
},
|
||||||
|
downloadTracker = new BeatmapDownloadTracker(beatmapSet),
|
||||||
|
};
|
||||||
AddInternal(progressBar = new ProgressBar(false)
|
AddInternal(progressBar = new ProgressBar(false)
|
||||||
{
|
{
|
||||||
Height = 0,
|
Height = 0,
|
||||||
@ -34,9 +44,9 @@ namespace osu.Game.Overlays.BeatmapListing.Panels
|
|||||||
{
|
{
|
||||||
progressBar.FillColour = colours.Blue;
|
progressBar.FillColour = colours.Blue;
|
||||||
progressBar.BackgroundColour = Color4.Black.Opacity(0.7f);
|
progressBar.BackgroundColour = Color4.Black.Opacity(0.7f);
|
||||||
progressBar.Current = Progress;
|
progressBar.Current.BindTarget = downloadTracker.Progress;
|
||||||
|
|
||||||
State.BindValueChanged(state =>
|
downloadTracker.State.BindValueChanged(state =>
|
||||||
{
|
{
|
||||||
switch (state.NewValue)
|
switch (state.NewValue)
|
||||||
{
|
{
|
||||||
|
@ -3,12 +3,14 @@
|
|||||||
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
|
using osu.Framework.Bindables;
|
||||||
using osu.Framework.Extensions.Color4Extensions;
|
using osu.Framework.Extensions.Color4Extensions;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Colour;
|
using osu.Framework.Graphics.Colour;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.Shapes;
|
using osu.Framework.Graphics.Shapes;
|
||||||
using osu.Framework.Localisation;
|
using osu.Framework.Localisation;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Beatmaps.Drawables;
|
using osu.Game.Beatmaps.Drawables;
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Graphics.Sprites;
|
using osu.Game.Graphics.Sprites;
|
||||||
@ -21,8 +23,10 @@ using osuTK;
|
|||||||
|
|
||||||
namespace osu.Game.Overlays.BeatmapSet
|
namespace osu.Game.Overlays.BeatmapSet
|
||||||
{
|
{
|
||||||
public class BeatmapSetHeaderContent : BeatmapDownloadTrackingComposite
|
public class BeatmapSetHeaderContent : CompositeDrawable
|
||||||
{
|
{
|
||||||
|
public readonly Bindable<BeatmapSetInfo> BeatmapSet = new Bindable<BeatmapSetInfo>();
|
||||||
|
|
||||||
private const float transition_duration = 200;
|
private const float transition_duration = 200;
|
||||||
private const float buttons_height = 45;
|
private const float buttons_height = 45;
|
||||||
private const float buttons_spacing = 5;
|
private const float buttons_spacing = 5;
|
||||||
@ -45,6 +49,8 @@ namespace osu.Game.Overlays.BeatmapSet
|
|||||||
private readonly FillFlowContainer fadeContent;
|
private readonly FillFlowContainer fadeContent;
|
||||||
private readonly LoadingSpinner loading;
|
private readonly LoadingSpinner loading;
|
||||||
|
|
||||||
|
private BeatmapDownloadTracker downloadTracker;
|
||||||
|
|
||||||
[Resolved]
|
[Resolved]
|
||||||
private IAPIProvider api { get; set; }
|
private IAPIProvider api { get; set; }
|
||||||
|
|
||||||
@ -222,13 +228,13 @@ namespace osu.Game.Overlays.BeatmapSet
|
|||||||
{
|
{
|
||||||
coverGradient.Colour = ColourInfo.GradientVertical(colourProvider.Background6.Opacity(0.3f), colourProvider.Background6.Opacity(0.8f));
|
coverGradient.Colour = ColourInfo.GradientVertical(colourProvider.Background6.Opacity(0.3f), colourProvider.Background6.Opacity(0.8f));
|
||||||
|
|
||||||
State.BindValueChanged(_ => updateDownloadButtons());
|
|
||||||
|
|
||||||
BeatmapSet.BindValueChanged(setInfo =>
|
BeatmapSet.BindValueChanged(setInfo =>
|
||||||
{
|
{
|
||||||
Picker.BeatmapSet = rulesetSelector.BeatmapSet = author.BeatmapSet = beatmapAvailability.BeatmapSet = Details.BeatmapSet = setInfo.NewValue;
|
Picker.BeatmapSet = rulesetSelector.BeatmapSet = author.BeatmapSet = beatmapAvailability.BeatmapSet = Details.BeatmapSet = setInfo.NewValue;
|
||||||
cover.BeatmapSet = setInfo.NewValue;
|
cover.BeatmapSet = setInfo.NewValue;
|
||||||
|
|
||||||
|
downloadTracker?.Expire();
|
||||||
|
|
||||||
if (setInfo.NewValue == null)
|
if (setInfo.NewValue == null)
|
||||||
{
|
{
|
||||||
onlineStatusPill.FadeTo(0.5f, 500, Easing.OutQuint);
|
onlineStatusPill.FadeTo(0.5f, 500, Easing.OutQuint);
|
||||||
@ -241,6 +247,9 @@ namespace osu.Game.Overlays.BeatmapSet
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
downloadTracker = new BeatmapDownloadTracker(setInfo.NewValue);
|
||||||
|
downloadTracker.State.BindValueChanged(_ => updateDownloadButtons());
|
||||||
|
|
||||||
fadeContent.FadeIn(500, Easing.OutQuint);
|
fadeContent.FadeIn(500, Easing.OutQuint);
|
||||||
|
|
||||||
loading.Hide();
|
loading.Hide();
|
||||||
@ -266,13 +275,13 @@ namespace osu.Game.Overlays.BeatmapSet
|
|||||||
{
|
{
|
||||||
if (BeatmapSet.Value == null) return;
|
if (BeatmapSet.Value == null) return;
|
||||||
|
|
||||||
if (BeatmapSet.Value.OnlineInfo.Availability.DownloadDisabled && State.Value != DownloadState.LocallyAvailable)
|
if (BeatmapSet.Value.OnlineInfo.Availability.DownloadDisabled && downloadTracker.State.Value != DownloadState.LocallyAvailable)
|
||||||
{
|
{
|
||||||
downloadButtonsContainer.Clear();
|
downloadButtonsContainer.Clear();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (State.Value)
|
switch (downloadTracker.State.Value)
|
||||||
{
|
{
|
||||||
case DownloadState.LocallyAvailable:
|
case DownloadState.LocallyAvailable:
|
||||||
// temporary for UX until new design is implemented.
|
// temporary for UX until new design is implemented.
|
||||||
|
@ -22,7 +22,7 @@ using osuTK.Graphics;
|
|||||||
|
|
||||||
namespace osu.Game.Overlays.BeatmapSet.Buttons
|
namespace osu.Game.Overlays.BeatmapSet.Buttons
|
||||||
{
|
{
|
||||||
public class HeaderDownloadButton : BeatmapDownloadTrackingComposite, IHasTooltip
|
public class HeaderDownloadButton : CompositeDrawable, IHasTooltip
|
||||||
{
|
{
|
||||||
private const int text_size = 12;
|
private const int text_size = 12;
|
||||||
|
|
||||||
@ -35,9 +35,12 @@ namespace osu.Game.Overlays.BeatmapSet.Buttons
|
|||||||
private ShakeContainer shakeContainer;
|
private ShakeContainer shakeContainer;
|
||||||
private HeaderButton button;
|
private HeaderButton button;
|
||||||
|
|
||||||
|
private BeatmapDownloadTracker downloadTracker;
|
||||||
|
private readonly BeatmapSetInfo beatmapSet;
|
||||||
|
|
||||||
public HeaderDownloadButton(BeatmapSetInfo beatmapSet, bool noVideo = false)
|
public HeaderDownloadButton(BeatmapSetInfo beatmapSet, bool noVideo = false)
|
||||||
: base(beatmapSet)
|
|
||||||
{
|
{
|
||||||
|
this.beatmapSet = beatmapSet;
|
||||||
this.noVideo = noVideo;
|
this.noVideo = noVideo;
|
||||||
|
|
||||||
Width = 120;
|
Width = 120;
|
||||||
@ -49,13 +52,17 @@ namespace osu.Game.Overlays.BeatmapSet.Buttons
|
|||||||
{
|
{
|
||||||
FillFlowContainer textSprites;
|
FillFlowContainer textSprites;
|
||||||
|
|
||||||
AddInternal(shakeContainer = new ShakeContainer
|
InternalChildren = new Drawable[]
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
shakeContainer = new ShakeContainer
|
||||||
Masking = true,
|
{
|
||||||
CornerRadius = 5,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Child = button = new HeaderButton { RelativeSizeAxes = Axes.Both },
|
Masking = true,
|
||||||
});
|
CornerRadius = 5,
|
||||||
|
Child = button = new HeaderButton { RelativeSizeAxes = Axes.Both },
|
||||||
|
},
|
||||||
|
downloadTracker = new BeatmapDownloadTracker(beatmapSet),
|
||||||
|
};
|
||||||
|
|
||||||
button.AddRange(new Drawable[]
|
button.AddRange(new Drawable[]
|
||||||
{
|
{
|
||||||
@ -83,7 +90,7 @@ namespace osu.Game.Overlays.BeatmapSet.Buttons
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
new DownloadProgressBar(BeatmapSet.Value)
|
new DownloadProgressBar(beatmapSet)
|
||||||
{
|
{
|
||||||
Anchor = Anchor.BottomLeft,
|
Anchor = Anchor.BottomLeft,
|
||||||
Origin = Anchor.BottomLeft,
|
Origin = Anchor.BottomLeft,
|
||||||
@ -92,20 +99,20 @@ namespace osu.Game.Overlays.BeatmapSet.Buttons
|
|||||||
|
|
||||||
button.Action = () =>
|
button.Action = () =>
|
||||||
{
|
{
|
||||||
if (State.Value != DownloadState.NotDownloaded)
|
if (downloadTracker.State.Value != DownloadState.NotDownloaded)
|
||||||
{
|
{
|
||||||
shakeContainer.Shake();
|
shakeContainer.Shake();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
beatmaps.Download(BeatmapSet.Value, noVideo);
|
beatmaps.Download(beatmapSet, noVideo);
|
||||||
};
|
};
|
||||||
|
|
||||||
localUser.BindTo(api.LocalUser);
|
localUser.BindTo(api.LocalUser);
|
||||||
localUser.BindValueChanged(userChanged, true);
|
localUser.BindValueChanged(userChanged, true);
|
||||||
button.Enabled.BindValueChanged(enabledChanged, true);
|
button.Enabled.BindValueChanged(enabledChanged, true);
|
||||||
|
|
||||||
State.BindValueChanged(state =>
|
downloadTracker.State.BindValueChanged(state =>
|
||||||
{
|
{
|
||||||
switch (state.NewValue)
|
switch (state.NewValue)
|
||||||
{
|
{
|
||||||
@ -161,7 +168,7 @@ namespace osu.Game.Overlays.BeatmapSet.Buttons
|
|||||||
|
|
||||||
private LocalisableString getVideoSuffixText()
|
private LocalisableString getVideoSuffixText()
|
||||||
{
|
{
|
||||||
if (!BeatmapSet.Value.OnlineInfo.HasVideo)
|
if (!beatmapSet.OnlineInfo.HasVideo)
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
|
|
||||||
return noVideo ? BeatmapsetsStrings.ShowDetailsDownloadNoVideo : BeatmapsetsStrings.ShowDetailsDownloadVideo;
|
return noVideo ? BeatmapsetsStrings.ShowDetailsDownloadNoVideo : BeatmapsetsStrings.ShowDetailsDownloadVideo;
|
||||||
|
@ -302,7 +302,7 @@ namespace osu.Game.Screens.OnlinePlay
|
|||||||
{
|
{
|
||||||
base.LoadComplete();
|
base.LoadComplete();
|
||||||
|
|
||||||
State.BindValueChanged(stateChanged, true);
|
DownloadTracker.State.BindValueChanged(stateChanged, true);
|
||||||
FinishTransforms(true);
|
FinishTransforms(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Bindables;
|
using osu.Framework.Bindables;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Game.Graphics.Containers;
|
using osu.Game.Graphics.Containers;
|
||||||
using osu.Game.Graphics.UserInterface;
|
using osu.Game.Graphics.UserInterface;
|
||||||
using osu.Game.Online;
|
using osu.Game.Online;
|
||||||
@ -12,13 +13,17 @@ using osuTK;
|
|||||||
|
|
||||||
namespace osu.Game.Screens.Ranking
|
namespace osu.Game.Screens.Ranking
|
||||||
{
|
{
|
||||||
public class ReplayDownloadButton : DownloadTrackingComposite<ScoreInfo, ScoreManager>
|
public class ReplayDownloadButton : CompositeDrawable
|
||||||
{
|
{
|
||||||
public Bindable<ScoreInfo> Score => Model;
|
public readonly Bindable<ScoreInfo> Score = new Bindable<ScoreInfo>();
|
||||||
|
|
||||||
|
protected readonly Bindable<DownloadState> State = new Bindable<DownloadState>();
|
||||||
|
|
||||||
private DownloadButton button;
|
private DownloadButton button;
|
||||||
private ShakeContainer shakeContainer;
|
private ShakeContainer shakeContainer;
|
||||||
|
|
||||||
|
private ScoreDownloadTracker downloadTracker;
|
||||||
|
|
||||||
private ReplayAvailability replayAvailability
|
private ReplayAvailability replayAvailability
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@ -26,7 +31,7 @@ namespace osu.Game.Screens.Ranking
|
|||||||
if (State.Value == DownloadState.LocallyAvailable)
|
if (State.Value == DownloadState.LocallyAvailable)
|
||||||
return ReplayAvailability.Local;
|
return ReplayAvailability.Local;
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(Model.Value?.Hash))
|
if (!string.IsNullOrEmpty(Score.Value?.Hash))
|
||||||
return ReplayAvailability.Online;
|
return ReplayAvailability.Online;
|
||||||
|
|
||||||
return ReplayAvailability.NotAvailable;
|
return ReplayAvailability.NotAvailable;
|
||||||
@ -34,8 +39,8 @@ namespace osu.Game.Screens.Ranking
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ReplayDownloadButton(ScoreInfo score)
|
public ReplayDownloadButton(ScoreInfo score)
|
||||||
: base(score)
|
|
||||||
{
|
{
|
||||||
|
Score.Value = score;
|
||||||
Size = new Vector2(50, 30);
|
Size = new Vector2(50, 30);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,11 +61,11 @@ namespace osu.Game.Screens.Ranking
|
|||||||
switch (State.Value)
|
switch (State.Value)
|
||||||
{
|
{
|
||||||
case DownloadState.LocallyAvailable:
|
case DownloadState.LocallyAvailable:
|
||||||
game?.PresentScore(Model.Value, ScorePresentType.Gameplay);
|
game?.PresentScore(Score.Value, ScorePresentType.Gameplay);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DownloadState.NotDownloaded:
|
case DownloadState.NotDownloaded:
|
||||||
scores.Download(Model.Value, false);
|
scores.Download(Score.Value, false);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DownloadState.Importing:
|
case DownloadState.Importing:
|
||||||
@ -70,17 +75,25 @@ namespace osu.Game.Screens.Ranking
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
State.BindValueChanged(state =>
|
Score.BindValueChanged(score =>
|
||||||
{
|
{
|
||||||
button.State.Value = state.NewValue;
|
downloadTracker?.Expire();
|
||||||
|
|
||||||
|
if (score.NewValue != null)
|
||||||
|
{
|
||||||
|
AddInternal(downloadTracker = new ScoreDownloadTracker(score.NewValue)
|
||||||
|
{
|
||||||
|
State = { BindTarget = State }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
button.Enabled.Value = replayAvailability != ReplayAvailability.NotAvailable;
|
||||||
updateTooltip();
|
updateTooltip();
|
||||||
}, true);
|
}, true);
|
||||||
|
|
||||||
Model.BindValueChanged(_ =>
|
State.BindValueChanged(state =>
|
||||||
{
|
{
|
||||||
button.Enabled.Value = replayAvailability != ReplayAvailability.NotAvailable;
|
button.State.Value = state.NewValue;
|
||||||
|
|
||||||
updateTooltip();
|
updateTooltip();
|
||||||
}, true);
|
}, true);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user