Make `Room.Availability` non-bindable

This commit is contained in:
Dan Balasescu 2024-11-13 18:52:04 +09:00
parent 5d4838a08b
commit 7e3e5208f0
No known key found for this signature in database
3 changed files with 28 additions and 11 deletions

View File

@ -87,6 +87,15 @@ public RoomStatus Status
set => SetField(ref status, value);
}
/// <summary>
/// Describes which players are able to join the room.
/// </summary>
public RoomAvailability Availability
{
get => availability;
set => SetField(ref availability, value);
}
[JsonProperty("id")]
private long? roomId;
@ -110,6 +119,9 @@ public RoomStatus Status
// Not serialised (see: GetRoomsRequest).
private RoomStatus status = new RoomStatusOpen();
// Not yet serialised (not implemented).
private RoomAvailability availability;
[Cached]
[JsonProperty("playlist")]
public readonly BindableList<PlaylistItem> Playlist = new BindableList<PlaylistItem>();
@ -129,9 +141,6 @@ public RoomStatus Status
[Cached]
public readonly Bindable<int?> MaxAttempts = new Bindable<int?>();
[Cached]
public readonly Bindable<RoomAvailability> Availability = new Bindable<RoomAvailability>();
[Cached]
public readonly Bindable<QueueMode> QueueMode = new Bindable<QueueMode>();
@ -241,7 +250,7 @@ public void CopyFrom(Room other)
ChannelId.Value = other.ChannelId.Value;
Status = other.Status;
Availability.Value = other.Availability.Value;
Availability = other.Availability;
HasPassword.Value = other.HasPassword.Value;
Type = other.Type;
MaxParticipants.Value = other.MaxParticipants.Value;

View File

@ -46,9 +46,6 @@ public partial class OnlinePlayComposite : CompositeDrawable
[Resolved(typeof(Room))]
protected Bindable<DateTimeOffset?> EndDate { get; private set; } = null!;
[Resolved(typeof(Room))]
protected Bindable<RoomAvailability> Availability { get; private set; } = null!;
[Resolved(typeof(Room))]
public Bindable<string> Password { get; private set; } = null!;

View File

@ -316,7 +316,6 @@ private void load(OverlayColourProvider colourProvider, OsuColour colours)
loadingLayer = new LoadingLayer(true)
};
Availability.BindValueChanged(availability => AvailabilityPicker.Current.Value = availability.NewValue, true);
MaxParticipants.BindValueChanged(count => MaxParticipantsField.Text = count.NewValue?.ToString(), true);
MaxAttempts.BindValueChanged(count => MaxAttemptsField.Text = count.NewValue?.ToString(), true);
Duration.BindValueChanged(duration => DurationField.Current.Value = duration.NewValue ?? TimeSpan.FromMinutes(30), true);
@ -346,17 +345,29 @@ protected override void LoadComplete()
room.PropertyChanged += onRoomPropertyChanged;
updateRoomName();
updateRoomAvailability();
}
private void onRoomPropertyChanged(object? sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == nameof(Room.Name))
updateRoomName();
switch (e.PropertyName)
{
case nameof(Room.Name):
updateRoomName();
break;
case nameof(Room.Availability):
updateRoomAvailability();
break;
}
}
private void updateRoomName()
=> NameField.Text = room.Name;
private void updateRoomAvailability()
=> AvailabilityPicker.Current.Value = room.Availability;
private void populateDurations(ValueChangedEvent<APIUser> user)
{
// roughly correct (see https://github.com/Humanizr/Humanizer/blob/18167e56c082449cc4fe805b8429e3127a7b7f93/readme.md?plain=1#L427)
@ -405,7 +416,7 @@ private void apply()
hideError();
room.Name = NameField.Text;
Availability.Value = AvailabilityPicker.Current.Value;
room.Availability = AvailabilityPicker.Current.Value;
if (int.TryParse(MaxParticipantsField.Text, out int max))
MaxParticipants.Value = max;