Skip to content

Commit

Permalink
Merge pull request #29037 from bdach/daily-challenge-exit-when-offline
Browse files Browse the repository at this point in the history
Exit daily challenge screen when going offline
  • Loading branch information
peppy committed Jul 24, 2024
2 parents aded31b + 788b704 commit 65fcef1
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 0 deletions.
28 changes: 28 additions & 0 deletions osu.Game/Screens/OnlinePlay/DailyChallenge/DailyChallenge.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
using osu.Game.Graphics.Containers;
using osu.Game.Graphics.UserInterface;
using osu.Game.Localisation;
using osu.Game.Online.API;
using osu.Game.Online.API.Requests.Responses;
using osu.Game.Online.Metadata;
using osu.Game.Online.Multiplayer;
Expand Down Expand Up @@ -48,6 +49,8 @@ public partial class DailyChallenge : OsuScreen
/// </summary>
private readonly Bindable<IReadOnlyList<Mod>> userMods = new Bindable<IReadOnlyList<Mod>>(Array.Empty<Mod>());

private readonly IBindable<APIState> apiState = new Bindable<APIState>();

private OnlinePlayScreenWaveContainer waves = null!;
private DailyChallengeLeaderboard leaderboard = null!;
private RoomModSelectOverlay userModsSelectOverlay = null!;
Expand Down Expand Up @@ -84,6 +87,9 @@ public partial class DailyChallenge : OsuScreen
[Resolved]
private UserLookupCache userLookupCache { get; set; } = null!;

[Resolved]
protected IAPIProvider API { get; private set; } = null!;

public override bool DisallowExternalBeatmapRulesetChanges => true;

public DailyChallenge(Room room)
Expand Down Expand Up @@ -358,6 +364,9 @@ protected override void LoadComplete()
userModsSelectOverlayRegistration = overlayManager?.RegisterBlockingOverlay(userModsSelectOverlay);
userModsSelectOverlay.SelectedItem.Value = playlistItem;
userMods.BindValueChanged(_ => Scheduler.AddOnce(updateMods), true);

apiState.BindTo(API.State);
apiState.BindValueChanged(onlineStateChanged, true);
}

private void trySetDailyChallengeBeatmap()
Expand All @@ -368,6 +377,25 @@ private void trySetDailyChallengeBeatmap()
applyLoopingToTrack();
}

private void onlineStateChanged(ValueChangedEvent<APIState> state) => Schedule(() =>
{
if (state.NewValue != APIState.Online)
Schedule(forcefullyExit);
});

private void forcefullyExit()
{
Logger.Log($"{this} forcefully exiting due to loss of API connection");

// This is temporary since we don't currently have a way to force screens to be exited
// See also: `OnlinePlayScreen.forcefullyExit()`
if (this.IsCurrentScreen())
{
while (this.IsCurrentScreen())
this.Exit();
}
}

public override void OnEntering(ScreenTransitionEvent e)
{
base.OnEntering(e);
Expand Down
1 change: 1 addition & 0 deletions osu.Game/Screens/OnlinePlay/OnlinePlayScreen.cs
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ private void forcefullyExit()
Logger.Log($"{this} forcefully exiting due to loss of API connection");

// This is temporary since we don't currently have a way to force screens to be exited
// See also: `DailyChallenge.forcefullyExit()`
if (this.IsCurrentScreen())
{
while (this.IsCurrentScreen())
Expand Down

0 comments on commit 65fcef1

Please sign in to comment.