diff options
author | Paweł Chmielowski <pchmielowski@process-one.net> | 2018-10-10 18:02:45 +0200 |
---|---|---|
committer | Paweł Chmielowski <pchmielowski@process-one.net> | 2018-10-10 18:12:35 +0200 |
commit | 914fae3d3edbe603aade2c21d9ec2e622a9d8631 (patch) | |
tree | 0d48330f45de060f401330c2c9694ecfb2730310 | |
parent | Fix 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.erl | 17 | ||||
-rw-r--r-- | src/mod_muc_room.erl | 21 |
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)], |