diff --git a/src/mod_mam.erl b/src/mod_mam.erl index 08a4059b4..13004083b 100644 --- a/src/mod_mam.erl +++ b/src/mod_mam.erl @@ -1134,7 +1134,7 @@ select_with_mucsub_fallback(LServer, JidRequestor, JidArchive, Query, RSM, Flags _ -> [] end, - SubRoomJids = [Jid || {Jid, _} <- SubRooms], + SubRoomJids = [Jid || {Jid, _, _} <- SubRooms], {E2, A2, C2} = lists:foldl( fun(MucJid, {E0, A0, C0}) -> diff --git a/src/mod_mam_sql.erl b/src/mod_mam_sql.erl index 8198bdfa2..f49eb527a 100644 --- a/src/mod_mam_sql.erl +++ b/src/mod_mam_sql.erl @@ -221,7 +221,7 @@ select_with_mucsub(LServer, JidRequestor, #jid{luser = LUser} = JidArchive, _ -> [] end, - [jid:encode(Jid) || {Jid, _} <- SubRooms] + [jid:encode(Jid) || {Jid, _, _} <- SubRooms] end, {Query, CountQuery} = make_sql_query(LUser, LServer, MAMQuery, RSM, Extra), do_select_query(LServer, JidRequestor, JidArchive, RSM, chat, Query, CountQuery, Flags). diff --git a/src/mod_muc.erl b/src/mod_muc.erl index 718f29b3e..1e16273b0 100644 --- a/src/mod_muc.erl +++ b/src/mod_muc.erl @@ -107,7 +107,7 @@ -callback count_online_rooms_by_user(binary(), binary(), binary()) -> non_neg_integer(). -callback get_online_rooms_by_user(binary(), binary(), binary()) -> [{binary(), binary()}]. -callback get_subscribed_rooms(binary(), binary(), jid()) -> - {ok, [{jid(), [binary()]}]} | {error, db_failure}. + {ok, [{jid(), binary(), [binary()]}]} | {error, db_failure}. -optional_callbacks([get_subscribed_rooms/3]). @@ -701,8 +701,8 @@ process_mucsub(#iq{type = get, from = From, to = To, lang = Lang, ServerHost = ejabberd_router:host_of_route(Host), case get_subscribed_rooms(ServerHost, Host, From) of {ok, Subs} -> - List = [#muc_subscription{jid = JID, events = Nodes} - || {JID, Nodes} <- Subs], + List = [#muc_subscription{jid = JID, nick = Nick, events = Nodes} + || {JID, Nick, Nodes} <- Subs], xmpp:make_iq_result(IQ, #muc_subscriptions{list = List}); {error, _} -> Txt = ?T("Database failure"), @@ -946,13 +946,13 @@ get_room_disco_item({Name, Host, Pid}, {Filter, JID, Lang}) -> Err end. --spec get_subscribed_rooms(binary(), jid()) -> {ok, [{jid(), [binary()]}]} | {error, any()}. +-spec get_subscribed_rooms(binary(), jid()) -> {ok, [{jid(), binary(), [binary()]}]} | {error, any()}. get_subscribed_rooms(Host, User) -> ServerHost = ejabberd_router:host_of_route(Host), get_subscribed_rooms(ServerHost, Host, User). -spec get_subscribed_rooms(binary(), binary(), jid()) -> - {ok, [{jid(), [binary()]}]} | {error, any()}. + {ok, [{jid(), binary(), [binary()]}]} | {error, any()}. get_subscribed_rooms(ServerHost, Host, From) -> LServer = jid:nameprep(ServerHost), Mod = gen_mod:db_mod(LServer, ?MODULE), @@ -964,15 +964,15 @@ get_subscribed_rooms(ServerHost, Host, From) -> fun({Name, _, Pid}) when Pid == self() -> USR = jid:split(BareFrom), case erlang:get(muc_subscribers) of - #{USR := #subscriber{nodes = Nodes}} -> - [{jid:make(Name, Host), Nodes}]; + #{USR := #subscriber{nodes = Nodes, nick = Nick}} -> + [{jid:make(Name, Host), Nick, Nodes}]; _ -> [] end; ({Name, _, Pid}) -> case mod_muc_room:is_subscribed(Pid, BareFrom) of - {true, Nodes} -> - [{jid:make(Name, Host), Nodes}]; + {true, Nick, Nodes} -> + [{jid:make(Name, Host), Nick, Nodes}]; false -> [] end; (_) -> diff --git a/src/mod_muc_room.erl b/src/mod_muc_room.erl index 53f47bac9..a96f7ce35 100644 --- a/src/mod_muc_room.erl +++ b/src/mod_muc_room.erl @@ -223,7 +223,7 @@ unsubscribe(Pid, JID) -> {error, ?T("Conference room does not exist")} end. --spec is_subscribed(pid(), jid()) -> {true, [binary()]} | false. +-spec is_subscribed(pid(), jid()) -> {true, binary(), [binary()]} | false. is_subscribed(Pid, JID) -> try p1_fsm:sync_send_all_state_event(Pid, {is_subscribed, JID}) catch _:{_, {p1_fsm, _, _}} -> false @@ -759,7 +759,7 @@ handle_sync_event({muc_unsubscribe, From}, _From, StateName, end; handle_sync_event({is_subscribed, From}, _From, StateName, StateData) -> IsSubs = try maps:get(jid:split(From), StateData#state.subscribers) of - #subscriber{nodes = Nodes} -> {true, Nodes} + #subscriber{nick = Nick, nodes = Nodes} -> {true, Nick, Nodes} catch _:{badkey, _} -> false end, {reply, IsSubs, StateName, StateData}; diff --git a/src/mod_muc_sql.erl b/src/mod_muc_sql.erl index 07c1acb2f..92f2bc49e 100644 --- a/src/mod_muc_sql.erl +++ b/src/mod_muc_sql.erl @@ -410,11 +410,11 @@ get_subscribed_rooms(LServer, Host, Jid) -> JidS = jid:encode(Jid), case ejabberd_sql:sql_query( LServer, - ?SQL("select @(room)s, @(nodes)s from muc_room_subscribers " + ?SQL("select @(room)s, @(nick)s, @(nodes)s from muc_room_subscribers " "where jid=%(JidS)s and host=%(Host)s")) of {selected, Subs} -> - {ok, [{jid:make(Room, Host), ejabberd_sql:decode_term(Nodes)} - || {Room, Nodes} <- Subs]}; + {ok, [{jid:make(Room, Host), Nick, ejabberd_sql:decode_term(Nodes)} + || {Room, Nick, Nodes} <- Subs]}; _Error -> {error, db_failure} end.