]> granicus.if.org Git - ejabberd/commitdiff
Store announcements for offline users
authorHolger Weiss <holger@zedat.fu-berlin.de>
Fri, 12 Aug 2016 22:07:27 +0000 (00:07 +0200)
committerHolger Weiss <holger@zedat.fu-berlin.de>
Fri, 12 Aug 2016 22:07:27 +0000 (00:07 +0200)
Add a <store/> hint to announcements (unless they are explicitly sent to
online users).  Without that hint, announcements weren't delivered to
offline users, since they are sent as messages of type "headline".

src/mod_announce.erl

index 52ff2de92f6c21e1756c3cbb135121806a17a08e..d74c46bf9723d8c482581d0cdcf2c68a115849fd 100644 (file)
@@ -696,7 +696,7 @@ announce_all(From, To, Packet) ->
            lists:foreach(
              fun({User, Server}) ->
                      Dest = jid:make(User, Server, <<>>),
-                     ejabberd_router:route(Local, Dest, Packet)
+                     ejabberd_router:route(Local, Dest, add_store_hint(Packet))
              end, ejabberd_auth:get_vh_registered_users(Host))
     end.
 
@@ -713,7 +713,7 @@ announce_all_hosts_all(From, To, Packet) ->
            lists:foreach(
              fun({User, Server}) ->
                      Dest = jid:make(User, Server, <<>>),
-                     ejabberd_router:route(Local, Dest, Packet)
+                     ejabberd_router:route(Local, Dest, add_store_hint(Packet))
              end, ejabberd_auth:dirty_get_registered_users())
     end.
 
@@ -899,7 +899,7 @@ send_announcement_to_all(Host, SubjectS, BodyS) ->
     lists:foreach(
       fun({U, S, R}) ->
              Dest = jid:make(U, S, R),
-             ejabberd_router:route(Local, Dest, Packet)
+             ejabberd_router:route(Local, Dest, add_store_hint(Packet))
       end, Sessions).
 
 -spec get_access(global | binary()) -> atom().
@@ -909,6 +909,12 @@ get_access(Host) ->
                            fun(A) -> A end,
                            none).
 
+-spec add_store_hint(xmlel()) -> xmlel().
+
+add_store_hint(El) ->
+    Hint = #xmlel{name = <<"store">>, attrs = [{<<"xmlns">>, ?NS_HINTS}]},
+    fxml:append_subtags(El, [Hint]).
+
 %%-------------------------------------------------------------------------
 export(LServer) ->
     Mod = gen_mod:db_mod(LServer, ?MODULE),