mirror of
https://github.com/ppy/osu.git
synced 2025-03-15 14:47:18 +08:00
Centralise SocialOverlay's scheduling logic
Just some clean-ups to make it easier to confirm correct logic
This commit is contained in:
parent
115dcc3147
commit
451765784a
@ -66,24 +66,64 @@ namespace osu.Game.Overlays
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Header.Tabs.Current.ValueChanged += _ => Scheduler.AddOnce(updateSearch);
|
Header.Tabs.Current.ValueChanged += _ => queueUpdate();
|
||||||
|
|
||||||
Filter.Tabs.Current.ValueChanged += _ => Scheduler.AddOnce(updateSearch);
|
Filter.Tabs.Current.ValueChanged += _ => queueUpdate();
|
||||||
|
|
||||||
Filter.DisplayStyleControl.DisplayStyle.ValueChanged += style => recreatePanels(style.NewValue);
|
Filter.DisplayStyleControl.DisplayStyle.ValueChanged += style => recreatePanels(style.NewValue);
|
||||||
Filter.DisplayStyleControl.Dropdown.Current.ValueChanged += _ => Scheduler.AddOnce(updateSearch);
|
Filter.DisplayStyleControl.Dropdown.Current.ValueChanged += _ => queueUpdate();
|
||||||
|
|
||||||
|
currentQuery.BindTo(Filter.Search.Current);
|
||||||
currentQuery.ValueChanged += query =>
|
currentQuery.ValueChanged += query =>
|
||||||
{
|
{
|
||||||
queryChangedDebounce?.Cancel();
|
queryChangedDebounce?.Cancel();
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(query.NewValue))
|
if (string.IsNullOrEmpty(query.NewValue))
|
||||||
Scheduler.AddOnce(updateSearch);
|
queueUpdate();
|
||||||
else
|
else
|
||||||
queryChangedDebounce = Scheduler.AddDelayed(updateSearch, 500);
|
queryChangedDebounce = Scheduler.AddDelayed(updateSearch, 500);
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
currentQuery.BindTo(Filter.Search.Current);
|
private APIRequest getUsersRequest;
|
||||||
|
|
||||||
|
private readonly Bindable<string> currentQuery = new Bindable<string>();
|
||||||
|
|
||||||
|
private ScheduledDelegate queryChangedDebounce;
|
||||||
|
|
||||||
|
private void queueUpdate() => Scheduler.AddOnce(updateSearch);
|
||||||
|
|
||||||
|
private void updateSearch()
|
||||||
|
{
|
||||||
|
queryChangedDebounce?.Cancel();
|
||||||
|
|
||||||
|
if (!IsLoaded)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Users = null;
|
||||||
|
clearPanels();
|
||||||
|
loading.Hide();
|
||||||
|
getUsersRequest?.Cancel();
|
||||||
|
|
||||||
|
if (API?.IsLoggedIn != true)
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch (Header.Tabs.Current.Value)
|
||||||
|
{
|
||||||
|
case SocialTab.Friends:
|
||||||
|
var friendRequest = new GetFriendsRequest(); // TODO filter arguments?
|
||||||
|
friendRequest.Success += updateUsers;
|
||||||
|
API.Queue(getUsersRequest = friendRequest);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
var userRequest = new GetUsersRequest(); // TODO filter arguments!
|
||||||
|
userRequest.Success += response => updateUsers(response.Select(r => r.User));
|
||||||
|
API.Queue(getUsersRequest = userRequest);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
loading.Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void recreatePanels(PanelDisplayStyle displayStyle)
|
private void recreatePanels(PanelDisplayStyle displayStyle)
|
||||||
@ -133,45 +173,6 @@ namespace osu.Game.Overlays
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private APIRequest getUsersRequest;
|
|
||||||
|
|
||||||
private readonly Bindable<string> currentQuery = new Bindable<string>();
|
|
||||||
|
|
||||||
private ScheduledDelegate queryChangedDebounce;
|
|
||||||
|
|
||||||
private void updateSearch()
|
|
||||||
{
|
|
||||||
queryChangedDebounce?.Cancel();
|
|
||||||
|
|
||||||
if (!IsLoaded)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Users = null;
|
|
||||||
clearPanels();
|
|
||||||
loading.Hide();
|
|
||||||
getUsersRequest?.Cancel();
|
|
||||||
|
|
||||||
if (API?.IsLoggedIn != true)
|
|
||||||
return;
|
|
||||||
|
|
||||||
switch (Header.Tabs.Current.Value)
|
|
||||||
{
|
|
||||||
case SocialTab.Friends:
|
|
||||||
var friendRequest = new GetFriendsRequest(); // TODO filter arguments?
|
|
||||||
friendRequest.Success += updateUsers;
|
|
||||||
API.Queue(getUsersRequest = friendRequest);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
var userRequest = new GetUsersRequest(); // TODO filter arguments!
|
|
||||||
userRequest.Success += response => updateUsers(response.Select(r => r.User));
|
|
||||||
API.Queue(getUsersRequest = userRequest);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
loading.Show();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateUsers(IEnumerable<User> newUsers)
|
private void updateUsers(IEnumerable<User> newUsers)
|
||||||
{
|
{
|
||||||
Users = newUsers;
|
Users = newUsers;
|
||||||
@ -193,7 +194,7 @@ namespace osu.Game.Overlays
|
|||||||
switch (state)
|
switch (state)
|
||||||
{
|
{
|
||||||
case APIState.Online:
|
case APIState.Online:
|
||||||
Scheduler.AddOnce(updateSearch);
|
queueUpdate();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user