diff --git a/src/mod_mam.erl b/src/mod_mam.erl index 4581a6daa..ca2cbeb02 100644 --- a/src/mod_mam.erl +++ b/src/mod_mam.erl @@ -648,9 +648,20 @@ should_archive(#message{body = Body, subject = Subject, none when Type == headline -> false; none -> - xmpp:get_text(Body) /= <<>> orelse - xmpp:get_text(Subject) /= <<>> orelse - xmpp:has_subtag(Pkt, #ps_event{}) + case xmpp:get_text(Body) /= <<>> orelse + xmpp:get_text(Subject) /= <<>> of + true -> + true; + _ -> + case mod_muc_room:unwrap_mucsub_message(Pkt) of + #message{type = groupchat} = Msg -> + should_archive(Msg#message{type = chat}, LServer); + #message{} = Msg -> + should_archive(Msg, LServer); + _ -> + false + end + end end end; should_archive(_, _LServer) -> diff --git a/src/mod_muc_room.erl b/src/mod_muc_room.erl index ede3c8ebb..a7089bc10 100644 --- a/src/mod_muc_room.erl +++ b/src/mod_muc_room.erl @@ -39,7 +39,8 @@ is_occupant_or_admin/2, route/2, expand_opts/1, - config_fields/0]). + config_fields/0, + unwrap_mucsub_message/1]). %% gen_fsm callbacks -export([init/1, @@ -4459,6 +4460,24 @@ wrap(From, To, Packet, Node) -> id = p1_rand:get_string(), sub_els = [El]}]}}]}. +-spec unwrap_mucsub_message(xmpp_element()) -> message() | false. +unwrap_mucsub_message(#message{} = Packet) -> + case xmpp:get_subtag(Packet, #ps_event{}) of + #ps_event{ + items = #ps_items{ + node = Node, + items = [ + #ps_item{ + sub_els = [#message{} = Message]} | _]}} + when Node == ?NS_MUCSUB_NODES_MESSAGES; + Node == ?NS_MUCSUB_NODES_SUBJECT -> + Message; + _ -> + false + end; +unwrap_mucsub_message(_Packet) -> + false. + %% -spec send_multiple(jid(), binary(), [#user{}], stanza()) -> ok. %% send_multiple(From, Server, Users, Packet) -> %% JIDs = [ User#user.jid || {_, User} <- ?DICT:to_list(Users)],