mirror of
https://github.com/ppy/osu.git
synced 2024-11-11 21:07:33 +08:00
Remove dependency on load state for DrawableComment.AddReplies
This commit is contained in:
parent
ec9c01a75f
commit
e2b3494352
@ -78,7 +78,7 @@ namespace osu.Game.Overlays.Comments
|
||||
if (replies.Any())
|
||||
{
|
||||
replies.ForEach(c => c.ParentComment = comment);
|
||||
drawableComment.OnLoadComplete += _ => drawableComment.AddReplies(replies.Select(reply => createCommentWithReplies(reply, commentBundle)));
|
||||
drawableComment.InitialReplies.AddRange(replies.Select(reply => createCommentWithReplies(reply, commentBundle)));
|
||||
}
|
||||
|
||||
return drawableComment;
|
||||
|
@ -36,6 +36,11 @@ namespace osu.Game.Overlays.Comments
|
||||
public readonly Bindable<CommentsSortCriteria> Sort = new Bindable<CommentsSortCriteria>();
|
||||
public readonly List<Comment> LoadedReplies = new List<Comment>();
|
||||
|
||||
/// <summary>
|
||||
/// <see cref="DrawableComment"/>s which will be added to this <see cref="DrawableComment"/> as replies when it will be loaded.
|
||||
/// </summary>
|
||||
public readonly List<DrawableComment> InitialReplies = new List<DrawableComment>();
|
||||
|
||||
private readonly BindableBool childrenExpanded = new BindableBool(true);
|
||||
|
||||
private int currentPage;
|
||||
@ -265,6 +270,9 @@ namespace osu.Game.Overlays.Comments
|
||||
Colour = OsuColour.Gray(0.1f)
|
||||
});
|
||||
}
|
||||
|
||||
if (InitialReplies.Any())
|
||||
AddReplies(InitialReplies);
|
||||
}
|
||||
|
||||
protected override void LoadComplete()
|
||||
@ -283,14 +291,28 @@ namespace osu.Game.Overlays.Comments
|
||||
|
||||
public void AddReplies(IEnumerable<DrawableComment> replies)
|
||||
{
|
||||
LoadComponentAsync(createRepliesPage(replies), page =>
|
||||
if (LoadState == LoadState.NotLoaded)
|
||||
throw new NotSupportedException($@"Can't use {nameof(AddReplies)} when not loaded.");
|
||||
|
||||
var page = createRepliesPage(replies);
|
||||
|
||||
if (LoadState == LoadState.Loading)
|
||||
{
|
||||
var newReplies = replies.Select(reply => reply.Comment);
|
||||
LoadedReplies.AddRange(newReplies);
|
||||
deletedCommentsCounter.Count.Value += newReplies.Count(reply => reply.IsDeleted);
|
||||
childCommentsContainer.Add(page);
|
||||
updateButtonsState();
|
||||
});
|
||||
addRepliesPage(page, replies);
|
||||
return;
|
||||
}
|
||||
|
||||
LoadComponentAsync(page, loaded => addRepliesPage(loaded, replies));
|
||||
}
|
||||
|
||||
private void addRepliesPage(FillFlowContainer<DrawableComment> page, IEnumerable<DrawableComment> replies)
|
||||
{
|
||||
childCommentsContainer.Add(page);
|
||||
|
||||
var newReplies = replies.Select(reply => reply.Comment);
|
||||
LoadedReplies.AddRange(newReplies);
|
||||
deletedCommentsCounter.Count.Value += newReplies.Count(reply => reply.IsDeleted);
|
||||
updateButtonsState();
|
||||
}
|
||||
|
||||
private FillFlowContainer<DrawableComment> createRepliesPage(IEnumerable<DrawableComment> replies) => new FillFlowContainer<DrawableComment>
|
||||
|
Loading…
Reference in New Issue
Block a user