diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mod_mam.erl | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/src/mod_mam.erl b/src/mod_mam.erl index b1801fd3..7e205105 100644 --- a/src/mod_mam.erl +++ b/src/mod_mam.erl @@ -363,18 +363,23 @@ should_archive(#xmlel{name = <<"message">>} = Pkt) -> <<"groupchat">> -> false; _ -> - case check_store_hint(Pkt) of - store -> - true; - no_store -> + case is_resent(Pkt) of + true -> false; - none -> - case xml:get_subtag_cdata(Pkt, <<"body">>) of - <<>> -> - %% Empty body + false -> + case check_store_hint(Pkt) of + store -> + true; + no_store -> false; - _ -> - true + none -> + case xml:get_subtag_cdata(Pkt, <<"body">>) of + <<>> -> + %% Empty body + false; + _ -> + true + end end end end; @@ -458,6 +463,14 @@ has_no_store_hint(Message) -> xml:get_subtag_with_xmlns(Message, <<"no-permanent-storage">>, ?NS_HINTS) /= false. +is_resent(Pkt) -> + case xml:get_subtag_cdata(Pkt, <<"delay">>) of + <<>> -> + false; + Desc -> + binary:match(Desc, <<"Resent">>) =/= nomatch + end. + store_msg(C2SState, Pkt, LUser, LServer, Peer, Dir) -> Prefs = get_prefs(LUser, LServer), case should_archive_peer(C2SState, Prefs, Peer) of |