fix(members): show mobile badges and fresh profiles in lists (#3370)

This commit is contained in:
Hampus authored and GitHub committed 2026-10-10 17:00:30 +02:00
1 parent 0f0ff5f3df
commit c14b7d4cb3
13 files changed
+171 -10

No files matched your search

@@ -299,6 +299,13 @@ after_store_event(guild_member_remove, Data, Tab, State) ->
_ -> []
end,
State;
after_store_event(guild_member_update, Data, _Tab, State) ->
case guild_state_member:extract_user_id(Data) of
UserId when is_integer(UserId) ->
guild_thread_subscriptions:member_changed(UserId, State);
_ ->
State
end;
after_store_event(_Event, _Data, _Tab, State) ->
State.
@@ -12,6 +12,7 @@
member_lists_changed/2,
resync_after_load/1,
presence_changed/2,
member_changed/2,
handle_list_flush/1,
refresh_presence_users/1,
export_handoff/1,
@@ -306,6 +307,10 @@ presence_changed(UserId, #{thread_presence_users := Users} = State) ->
presence_changed(_UserId, State) ->
State.
-spec member_changed(integer(), guild_state()) -> guild_state().
member_changed(UserId, State) ->
presence_changed(UserId, State).
-spec mark_dirty([integer()], guild_state()) -> guild_state().
mark_dirty([], State) ->
State;
@@ -1486,6 +1486,35 @@ thread_member_list_follows_presence_changes_test() ->
?assertEqual(State, guild_thread_subscriptions:presence_changed(?A, State))
end).
thread_member_list_follows_member_updates_test() ->
with_guild(fun(State) ->
Subscribed = guild_thread_subscriptions:update(
<<"a">>, #{member_lists => [?T1]}, State
),
[_] = received(a, thread_member_list_update, drain()),
Update = fun(UserId, Nick) ->
#{
<<"user">> => #{<<"id">> => integer_to_binary(UserId)},
<<"roles">> => [],
<<"nick">> => Nick
}
end,
Changed = dispatch(guild_member_update, Update(?A, <<"renamed">>), Subscribed),
?assertEqual([], received(a, thread_member_list_update, drain())),
_ = guild_thread_subscriptions:handle_list_flush(Changed),
[#{<<"members">> := Members}] = received(a, thread_member_list_update, drain()),
?assertEqual(
[<<"renamed">>],
[
maps:get(<<"nick">>, Member)
|| #{<<"user_id">> := Id, <<"member">> := Member} <- Members,
Id =:= integer_to_binary(?A)
]
),
Unlisted = dispatch(guild_member_update, Update(?C, <<"other">>), Subscribed),
?assertNot(maps:is_key(thread_list_dirty, Unlisted))
end).
handoff_through_an_old_node_round_trips_test() ->
with_guild(fun(State) ->
Exported = guild_handoff:export_handoff_state(State),