summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaweł Chmielowski <pchmielowski@process-one.net>2018-10-10 18:02:45 +0200
committerPaweł Chmielowski <pchmielowski@process-one.net>2018-10-10 18:12:35 +0200
commit914fae3d3edbe603aade2c21d9ec2e622a9d8631 (patch)
tree0d48330f45de060f401330c2c9694ecfb2730310
parentFix version in mix.exs (diff)
Change logic for archiving mucsub messages
This change should apply usual logic for message wrapped in mucsub except check for groupchat message, so messages without bodies for example should be rejected
-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)],