1
0
mirror of https://github.com/ppy/osu.git synced 2025-02-16 01:03:21 +08:00

bring social tab+filter behaviour closer to direct

This commit is contained in:
Aergwyn 2018-01-03 17:54:20 +01:00
parent 988f6ac901
commit 9d29adce27

View File

@ -21,7 +21,7 @@ namespace osu.Game.Overlays
public class SocialOverlay : SearchableListOverlay<SocialTab, SocialSortCriteria, SortDirection>, IOnlineComponent public class SocialOverlay : SearchableListOverlay<SocialTab, SocialSortCriteria, SortDirection>, IOnlineComponent
{ {
private APIAccess api; private APIAccess api;
private readonly LoadingAnimation loading;
private FillFlowContainer<UserPanel> panels; private FillFlowContainer<UserPanel> panels;
protected override Color4 BackgroundColour => OsuColour.FromHex(@"60284b"); protected override Color4 BackgroundColour => OsuColour.FromHex(@"60284b");
@ -31,10 +31,7 @@ namespace osu.Game.Overlays
protected override SearchableListHeader<SocialTab> CreateHeader() => new Header(); protected override SearchableListHeader<SocialTab> CreateHeader() => new Header();
protected override SearchableListFilterControl<SocialSortCriteria, SortDirection> CreateFilterControl() => new FilterControl(); protected override SearchableListFilterControl<SocialSortCriteria, SortDirection> CreateFilterControl() => new FilterControl();
private readonly LoadingAnimation loading;
private IEnumerable<User> users; private IEnumerable<User> users;
public IEnumerable<User> Users public IEnumerable<User> Users
{ {
get { return users; } get { return users; }
@ -56,12 +53,38 @@ namespace osu.Game.Overlays
Add(loading = new LoadingAnimation()); Add(loading = new LoadingAnimation());
Filter.Search.Current.ValueChanged += text =>
{
if (text != string.Empty)
{
Header.Tabs.Current.Value = SocialTab.Search;
if (Filter.Tabs.Current.Value == SocialSortCriteria.Rank)
Filter.Tabs.Current.Value = SocialSortCriteria.Relevance;
}
else
{
Header.Tabs.Current.Value = SocialTab.OnlinePlayers;
if (Filter.Tabs.Current.Value == SocialSortCriteria.Relevance)
Filter.Tabs.Current.Value = SocialSortCriteria.Rank;
}
};
Filter.DisplayStyleControl.DisplayStyle.ValueChanged += recreatePanels; Filter.DisplayStyleControl.DisplayStyle.ValueChanged += recreatePanels;
// TODO sort our list in some way (either locally or with API call) // TODO sort our list in some way (either locally or with API call)
//Filter.DisplayStyleControl.Dropdown.Current.ValueChanged += rankStatus => Scheduler.AddOnce(updateSearch); //Filter.DisplayStyleControl.Dropdown.Current.ValueChanged += sortOrder => Scheduler.AddOnce(updateSearch);
Header.Tabs.Current.ValueChanged += tab => Scheduler.AddOnce(updateSearch); Header.Tabs.Current.ValueChanged += tab =>
{
if (tab != SocialTab.Search)
{
//currentQuery.Value = string.Empty;
Filter.Tabs.Current.Value = (SocialSortCriteria)Header.Tabs.Current.Value;
Scheduler.AddOnce(updateSearch);
}
};
//currentQuery.ValueChanged += v => //currentQuery.ValueChanged += v =>
//{ //{
@ -70,15 +93,18 @@ namespace osu.Game.Overlays
// if (string.IsNullOrEmpty(v)) // if (string.IsNullOrEmpty(v))
// Scheduler.AddOnce(updateSearch); // Scheduler.AddOnce(updateSearch);
// else // else
// {
// Users = null;
// queryChangedDebounce = Scheduler.AddDelayed(updateSearch, 500); // queryChangedDebounce = Scheduler.AddDelayed(updateSearch, 500);
// }
//}; //};
//currentQuery.BindTo(Filter.Search.Current); //currentQuery.BindTo(Filter.Search.Current);
Filter.Tabs.Current.ValueChanged += sortCriteria => Scheduler.AddOnce(updateSearch); Filter.Tabs.Current.ValueChanged += sortCriteria =>
{
if (Header.Tabs.Current.Value != SocialTab.Search && sortCriteria != (SocialSortCriteria)Header.Tabs.Current.Value)
Header.Tabs.Current.Value = SocialTab.Search;
Scheduler.AddOnce(updateSearch);
};
} }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
@ -122,19 +148,14 @@ namespace osu.Game.Overlays
}) })
}; };
LoadComponentAsync(newPanels, p => LoadComponentAsync(newPanels, p => ScrollFlow.Add(panels = newPanels));
{
if (panels != null)
ScrollFlow.Remove(panels);
ScrollFlow.Add(panels = newPanels);
});
} }
private void clearPanels() private void clearPanels()
{ {
if (panels != null) if (panels != null)
{ {
ScrollFlow.Remove(panels);
panels.Expire(); panels.Expire();
panels = null; panels = null;
} }
@ -163,16 +184,16 @@ namespace osu.Game.Overlays
switch (Header.Tabs.Current.Value) switch (Header.Tabs.Current.Value)
{ {
case SocialTab.OnlinePlayers:
var userRequest = new GetUsersRequest(); // TODO filter???
userRequest.Success += response => updateUsers(response.Select(r => r.User));
api.Queue(getUsersRequest = userRequest);
break;
case SocialTab.OnlineFriends: case SocialTab.OnlineFriends:
var friendRequest = new GetFriendsRequest(); // TODO filter??? var friendRequest = new GetFriendsRequest(); // TODO filter???
friendRequest.Success += updateUsers; friendRequest.Success += updateUsers;
api.Queue(getUsersRequest = friendRequest); api.Queue(getUsersRequest = friendRequest);
break; break;
default:
var userRequest = new GetUsersRequest(); // TODO filter???
userRequest.Success += response => updateUsers(response.Select(r => r.User));
api.Queue(getUsersRequest = userRequest);
break;
} }
loading.Show(); loading.Show();
} }