]> granicus.if.org Git - ejabberd/commitdiff
Fixed node type (thanks to saczawap) (#435)
authorChristophe Romain <christophe.romain@process-one.net>
Tue, 21 Apr 2015 13:02:20 +0000 (15:02 +0200)
committerChristophe Romain <christophe.romain@process-one.net>
Tue, 21 Apr 2015 13:24:24 +0000 (15:24 +0200)
src/mod_pubsub.erl

index 8fbdfbb6fd7158024bc833e763998735ab306844..d5398fadf439483ff772881b9ba0001ff7c5827f 100644 (file)
@@ -1057,27 +1057,21 @@ command_disco_info(_Host, ?NS_PUBSUB_GET_PENDING, _From) ->
 node_disco_info(Host, Node, From) ->
     node_disco_info(Host, Node, From, true, true).
 
-node_disco_info(Host, Node, From, _Identity, _Features) ->
-    Action = fun (#pubsub_node{type = Type, id = Nidx}) ->
-           Types = case tree_call(Host, get_subnodes, [Host, Node, From]) of
-               [] ->
-                   [<<"leaf">>];
-               _ ->
-                   case node_call(Host, Type, get_items, [Nidx, From, none]) of
-                       {result, {[], _}} -> [<<"collection">>];
-                       {result, _} -> [<<"leaf">>, <<"collection">>];
-                       _ -> []
-                   end
+node_disco_info(Host, Node, _From, _Identity, _Features) ->
+    Action = fun (#pubsub_node{type = Type, options = Options}) ->
+           NodeType = case get_option(Options, node_type) of
+               collection -> <<"collection">>;
+               _ -> <<"leaf">>
            end,
-           I = [#xmlel{name = <<"identity">>,
-                       attrs = [{<<"category">>, <<"pubsub">>}, {<<"type">>, T}]}
-                   || T <- Types],
+           I = #xmlel{name = <<"identity">>,
+                       attrs = [{<<"category">>, <<"pubsub">>},
+                                {<<"type">>, NodeType}]},
            F = [#xmlel{name = <<"feature">>,
                        attrs = [{<<"var">>, ?NS_PUBSUB}]}
                    | [#xmlel{name = <<"feature">>,
                            attrs = [{<<"var">>, feature(F)}]}
                        || F <- plugin_features(Host, Type)]],
-           {result, I ++ F}
+           {result, [I | F]}
     end,
     case transaction(Host, Node, Action, sync_dirty) of
        {result, {_, Result}} -> {result, Result};