summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mod_mam.erl17
-rw-r--r--src/mod_muc_room.erl21
2 files changed, 34 insertions, 4 deletions
diff --git a/src/mod_mam.erl b/src/mod_mam.erl
index 4581a6da..ca2cbeb0 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 ede3c8eb..a7089bc1 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)],