]> granicus.if.org Git - ejabberd/commitdiff
Move routing of last PEP items into new function
authorHolger Weiss <holger@zedat.fu-berlin.de>
Thu, 13 Nov 2014 23:16:13 +0000 (00:16 +0100)
committerHolger Weiss <holger@zedat.fu-berlin.de>
Thu, 13 Nov 2014 23:16:13 +0000 (00:16 +0100)
This doesn't change the behavior, but avoids some code duplication.

src/mod_pubsub.erl
src/mod_pubsub_odbc.erl

index 91b5afead75338709465832d471843205a6ee4fb..0cd84fd2f476fa0ddbe82d9d1eed56971d0c671b 100644 (file)
@@ -3312,7 +3312,7 @@ get_allowed_items_call(Host, NodeIdx, From, Type, Options, Owners) ->
 %%      Number = last | integer()
 %% @doc <p>Resend the items of a node to the user.</p>
 %% @todo use cache-last-item feature
-send_items(Host, Node, NodeId, Type, {U, S, R} = LJID, last) ->
+send_items(Host, Node, NodeId, Type, LJID, last) ->
     case get_cached_item(Host, NodeId) of
       undefined ->
          send_items(Host, Node, NodeId, Type, LJID, 1);
@@ -3325,24 +3325,9 @@ send_items(Host, Node, NodeId, Type, {U, S, R} = LJID, last) ->
                                                   children =
                                                       itemsEls([LastItem])}],
                                           ModifNow, ModifUSR),
-         case is_tuple(Host) of
-           false ->
-               ejabberd_router:route(service_jid(Host),
-                                     jlib:make_jid(LJID), Stanza);
-           true ->
-               case ejabberd_sm:get_session_pid(U, S, R) of
-                 C2SPid when is_pid(C2SPid) ->
-                     ejabberd_c2s:broadcast(C2SPid,
-                                            {pep_message,
-                                             <<((Node))/binary, "+notify">>},
-                                            _Sender = service_jid(Host),
-                                            Stanza);
-                 _ -> ok
-               end
-         end
+         dispatch_items(Host, LJID, Node, Stanza)
     end;
-send_items(Host, Node, NodeId, Type, {U, S, R} = LJID,
-          Number) ->
+send_items(Host, Node, NodeId, Type, LJID, Number) ->
     ToSend = case node_action(Host, Type, get_items,
                              [NodeId, LJID])
                 of
@@ -3370,22 +3355,28 @@ send_items(Host, Node, NodeId, Type, {U, S, R} = LJID,
                                        attrs = nodeAttr(Node),
                                        children = itemsEls(ToSend)}])
             end,
-    case {is_tuple(Host), Stanza} of
-      {_, undefined} ->
-         ok;
-      {false, _} ->
-         ejabberd_router:route(service_jid(Host),
-                               jlib:make_jid(LJID), Stanza);
-      {true, _} ->
-         case ejabberd_sm:get_session_pid(U, S, R) of
-           C2SPid when is_pid(C2SPid) ->
-               ejabberd_c2s:broadcast(C2SPid,
-                                      {pep_message,
-                                       <<((Node))/binary, "+notify">>},
-                                      _Sender = service_jid(Host), Stanza);
-           _ -> ok
-         end
-    end.
+    dispatch_items(Host, LJID, Node, Stanza).
+
+-spec(dispatch_items/4 ::
+(
+  From   :: mod_pubsub:host(),
+  To     :: jid(),
+  Node   :: mod_pubsub:nodeId(),
+  Stanza :: xmlel() | undefined)
+    -> any()
+).
+
+dispatch_items(_From, _To, _Node, _Stanza = undefined) -> ok;
+dispatch_items(From, {U, S, R}, Node, Stanza) when is_tuple(From) ->
+    case ejabberd_sm:get_session_pid(U, S, R) of
+      C2SPid when is_pid(C2SPid) ->
+         ejabberd_c2s:broadcast(C2SPid,
+                                {pep_message, <<((Node))/binary, "+notify">>},
+                                service_jid(From), Stanza);
+      _ -> ok
+    end;
+dispatch_items(From, To, _Node, Stanza) ->
+    ejabberd_router:route(service_jid(From), jlib:make_jid(To), Stanza).
 
 %% @spec (Host, JID, Plugins) -> {error, Reason} | {result, Response}
 %%      Host = host()
index 87d5535238b821bacfb728cdfb9281531387c462..821add288039d8a76be619afafb5d5a5d7824399 100644 (file)
@@ -2986,7 +2986,7 @@ get_allowed_items_call(Host, NodeIdx, From, Type, Options, Owners, RSM) ->
 %%      Number = last | integer()
 %% @doc <p>Resend the items of a node to the user.</p>
 %% @todo use cache-last-item feature
-send_items(Host, Node, NodeId, Type, {U, S, R} = LJID, last) ->
+send_items(Host, Node, NodeId, Type, LJID, last) ->
     Stanza = case get_cached_item(Host, NodeId) of
        undefined ->
            % special ODBC optimization, works only with node_hometree_odbc, node_flat_odbc and node_pep_odbc
@@ -3011,20 +3011,8 @@ send_items(Host, Node, NodeId, Type, {U, S, R} = LJID, last) ->
                                                       itemsEls([LastItem])}],
                                           ModifNow, ModifUSR)
     end,
-    case is_tuple(Host) of
-      false ->
-         ejabberd_router:route(service_jid(Host), jlib:make_jid(LJID), Stanza);
-      true ->
-         case ejabberd_sm:get_session_pid(U, S, R) of
-           C2SPid when is_pid(C2SPid) ->
-               ejabberd_c2s:broadcast(C2SPid,
-                                      {pep_message,
-                                       <<((Node))/binary, "+notify">>},
-                                      _Sender = service_jid(Host), Stanza);
-           _ -> ok
-         end
-    end;
-send_items(Host, Node, NodeId, Type, {U, S, R} = LJID, Number) ->
+    dispatch_items(Host, LJID, Node, Stanza);
+send_items(Host, Node, NodeId, Type, LJID, Number) ->
     ToSend = case node_action(Host, Type, get_items,
                              [NodeId, LJID])
                 of
@@ -3052,22 +3040,28 @@ send_items(Host, Node, NodeId, Type, {U, S, R} = LJID, Number) ->
                                        attrs = nodeAttr(Node),
                                        children = itemsEls(ToSend)}])
             end,
-    case {is_tuple(Host), Stanza} of
-      {_, undefined} ->
-         ok;
-      {false, _} ->
-         ejabberd_router:route(service_jid(Host),
-                               jlib:make_jid(LJID), Stanza);
-      {true, _} ->
-         case ejabberd_sm:get_session_pid(U, S, R) of
-           C2SPid when is_pid(C2SPid) ->
-               ejabberd_c2s:broadcast(C2SPid,
-                                      {pep_message,
-                                       <<((Node))/binary, "+notify">>},
-                                      _Sender = service_jid(Host), Stanza);
-           _ -> ok
-         end
-    end.
+    dispatch_items(Host, LJID, Node, Stanza).
+
+-spec(dispatch_items/4 ::
+(
+  From   :: mod_pubsub:host(),
+  To     :: jid(),
+  Node   :: mod_pubsub:nodeId(),
+  Stanza :: xmlel() | undefined)
+    -> any()
+).
+
+dispatch_items(_From, _To, _Node, _Stanza = undefined) -> ok;
+dispatch_items(From, {U, S, R}, Node, Stanza) when is_tuple(From) ->
+    case ejabberd_sm:get_session_pid(U, S, R) of
+      C2SPid when is_pid(C2SPid) ->
+         ejabberd_c2s:broadcast(C2SPid,
+                                {pep_message, <<((Node))/binary, "+notify">>},
+                                service_jid(From), Stanza);
+      _ -> ok
+    end;
+dispatch_items(From, To, _Node, Stanza) ->
+    ejabberd_router:route(service_jid(From), jlib:make_jid(To), Stanza).
 
 %% @spec (Host, JID, Plugins) -> {error, Reason} | {result, Response}
 %%      Host = host()