]> granicus.if.org Git - ejabberd/commitdiff
* src/mod_pubsub/mod_pubsub.erl: Discovery query on an item does
authorMickaël Rémond <mickael.remond@process-one.net>
Wed, 7 Jun 2006 14:07:18 +0000 (14:07 +0000)
committerMickaël Rémond <mickael.remond@process-one.net>
Wed, 7 Jun 2006 14:07:18 +0000 (14:07 +0000)
no more return an "item not found error". Discovery stop
correctly at the item level (Thanks to Christophe Romain) (EJAB-105).

SVN Revision: 578

ChangeLog
src/mod_pubsub/mod_pubsub.erl

index ca73c8acebba8910b72be71b5237cf3096911929..1ec39abcf3ae265490953a39397c7130f1ad2705 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,11 +1,15 @@
 2006-06-07  Mickael Remond  <mickael.remond@process-one.net>
 
-       * src/mod_pubsub/mod_pubsub.erl: Support for pubsub node creation ACL.
-       It is now possible to limit the node creation rights using an ACL from
-       ejabberd config file (Thanks to Christophe Romain). 
+       * src/mod_pubsub/mod_pubsub.erl: Support for pubsub node creation
+       ACL. It is now possible to limit the node creation rights using an
+       ACL from ejabberd config file (Thanks to Christophe Romain).
        * doc/guide.tex: Likewise.
        * src/ejabberd.cfg.example.
 
+       * src/mod_pubsub/mod_pubsub.erl: Discovery query on an item does
+       no more return an "item not found error". Discovery stop correctly
+       at the item level (Thanks to Christophe Romain).
+       
 2006-06-02  Mickael Remond  <mickael.remond@process-one.net>
 
        * src/web/ejabberd_http_poll.erl: Messages polled between the
index 6c46ffdb3882627b3cc03d0cebb92288655c78a6..afea05cb0327b826d5a83332dde32f1a095e40a7 100644 (file)
@@ -328,32 +328,50 @@ iq_disco_info(SNode) ->
            []
     end.
 
-
 iq_disco_items(Host, From, SNode) ->
-    Node = string:tokens(SNode, "/"),
+       {Node,ItemID} = case SNode of
+       [] ->
+               {[],none};
+       _ ->
+               Tokens = string:tokens(SNode, "!"),
+               NodeList = string:tokens(lists:nth(1, Tokens), "/"),
+               ItemName = case length(Tokens) of
+               2 -> lists:nth(2, Tokens);
+               _ -> none
+               end,
+               {NodeList, ItemName}
+       end,
+       NodeFull = string:tokens(SNode,"/"),
     F = fun() ->
                case mnesia:read({pubsub_node, {Host, Node}}) of
                    [#pubsub_node{info = Info}] ->
-                       SubNodes = mnesia:index_read(pubsub_node,
+                       case ItemID of
+                       none ->
+                               SubNodes = mnesia:index_read(pubsub_node,
                                                     {Host, Node},
                                                     #pubsub_node.host_parent),
-                       SubItems =
-                           lists:map(fun(#pubsub_node{host_node = {_, N}}) ->
+                               SubItems = lists:map(fun(#pubsub_node{host_node = {_, N}}) ->
                                              SN = node_to_string(N),
                                              {xmlelement, "item",
                                               [{"jid", Host},
                                                {"node", SN},
                                                {"name", lists:last(N)}], []}
                                      end, SubNodes),
-                       SN = node_to_string(Node),
-                       Items =
-                           lists:map(fun(#item{id = Name}) ->
+                               SN = node_to_string(Node),
+                               Items = lists:map(fun(#item{id = Name}) ->
+                                               RealName = case Name of
+                                               [] -> "item";
+                                               _ -> Name
+                                               end,
                                              {xmlelement, "item",
                                               [{"jid", Host},
                                                {"node", SN ++ "!" ++ Name},
-                                               {"name", Name}], []}
+                                               {"name", RealName}], []}
                                      end, Info#nodeinfo.items),
-                       SubItems ++ Items;
+                               SubItems ++ Items;
+                       _ ->
+                               []
+                       end;
                    [] ->
                        case Node of
                            [] ->
@@ -384,8 +402,6 @@ iq_disco_items(Host, From, SNode) ->
            {error, ?ERR_INTERNAL_SERVER_ERROR}
     end.
 
-
-
 iq_get_vcard(Lang) ->
     [{xmlelement, "FN", [],
       [{xmlcdata, "ejabberd/mod_pubsub"}]},