Skip to content

Commit 2a85c0a

Browse files
committed
Add muc#user element to presences and an initial empty subject
1 parent 7018b8b commit 2a85c0a

File tree

1 file changed

+42
-14
lines changed

1 file changed

+42
-14
lines changed

src/mod_matrix_gw_room.erl

+42-14
Original file line numberDiff line numberDiff line change
@@ -2734,19 +2734,42 @@ notify_event_xmpp(
27342734
room_jid = RoomJID}, ok)
27352735
when JoinTS =< OriginTS ->
27362736
From = jid:replace_resource(RoomJID, SenderUser),
2737-
case jid:tolower(SenderJID) of
2738-
{LUser, LServer, _} ->
2739-
send_initial_presences(
2740-
SenderJID, RoomJID, Event, Data);
2741-
_ ->
2742-
ok
2743-
end,
2737+
IsSelfPresence =
2738+
case jid:tolower(SenderJID) of
2739+
{LUser, LServer, _} ->
2740+
send_initial_presences(
2741+
SenderJID, RoomJID, Event, Data),
2742+
true;
2743+
_ ->
2744+
false
2745+
end,
27442746
UserJID = jid:make(LUser, LServer, LResource),
2745-
Pres = #presence{from = From,
2746-
to = UserJID,
2747-
type = available
2748-
},
2749-
ejabberd_router:route(Pres);
2747+
Item = #muc_item{affiliation = member,
2748+
role = participant},
2749+
Status = case IsSelfPresence of
2750+
true -> [110];
2751+
false -> []
2752+
end,
2753+
Pres = #presence{
2754+
from = From,
2755+
to = UserJID,
2756+
type = available,
2757+
sub_els = [#muc_user{items = [Item],
2758+
status_codes = Status}]
2759+
},
2760+
ejabberd_router:route(Pres),
2761+
case IsSelfPresence of
2762+
true ->
2763+
Subject =
2764+
#message{
2765+
from = RoomJID,
2766+
to = UserJID,
2767+
type = groupchat,
2768+
subject = [#text{}]
2769+
},
2770+
ejabberd_router:route(Subject);
2771+
false -> ok
2772+
end;
27502773
(_, _, _) -> ok
27512774
end, ok, Resources)
27522775
end, ok, Users),
@@ -2772,9 +2795,12 @@ notify_event_xmpp(
27722795
when JoinTS =< OriginTS ->
27732796
From = jid:replace_resource(RoomJID, RUser),
27742797
UserJID = jid:make(LUser, LServer, LResource),
2798+
Item = #muc_item{affiliation = member,
2799+
role = none},
27752800
Pres = #presence{from = From,
27762801
to = UserJID,
2777-
type = unavailable
2802+
type = unavailable,
2803+
sub_els = [#muc_user{items = [Item]}]
27782804
},
27792805
ejabberd_router:route(Pres);
27802806
(_, _, _) -> ok
@@ -2821,9 +2847,11 @@ send_initial_presences(JID, RoomJID, Event, Data) ->
28212847
json = #{<<"content">> :=
28222848
#{<<"membership">> := <<"join">>}}}} ->
28232849
From = jid:replace_resource(RoomJID, SenderUser),
2850+
Item = #muc_item{affiliation = member, role = participant},
28242851
Pres = #presence{from = From,
28252852
to = JID,
2826-
type = available
2853+
type = available,
2854+
sub_els = [#muc_user{items = [Item]}]
28272855
},
28282856
ejabberd_router:route(Pres),
28292857
ok;

0 commit comments

Comments
 (0)