diff options
Diffstat (limited to 'src/mod_pubsub/nodetree_tree.erl')
-rw-r--r-- | src/mod_pubsub/nodetree_tree.erl | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/src/mod_pubsub/nodetree_tree.erl b/src/mod_pubsub/nodetree_tree.erl index 39724db46..99b4b8891 100644 --- a/src/mod_pubsub/nodetree_tree.erl +++ b/src/mod_pubsub/nodetree_tree.erl @@ -161,6 +161,12 @@ get_parentnodes_tree(Host, Node, From) -> get_subnodes(Host, Node, _From) -> get_subnodes(Host, Node). get_subnodes(Host, Node) -> +% mnesia:foldl(fun(#pubsub_node{nodeid = {H, _}, parents = Parents} = N, Acc) -> +% case lists:member(Node, Parents) and (Host == H) of +% true -> [N | Acc]; +% false -> Acc +% end +% end, [], pubsub_node). Q = qlc:q([N || #pubsub_node{nodeid = {NHost, _}, parents = Parents} = N <- mnesia:table(pubsub_node), Host == NHost, @@ -176,10 +182,10 @@ get_subnodes_tree(Host, Node, _From) -> %% From = mod_pubsub:jid() get_subnodes_tree(Host, Node) -> mnesia:foldl(fun(#pubsub_node{nodeid = {H, N}} = R, Acc) -> - case lists:prefix(Node, N) and (H == Host) of - true -> [R | Acc]; - _ -> Acc - end + case lists:prefix(Node, N) and (H == Host) of + true -> [R | Acc]; + false -> Acc + end end, [], pubsub_node). %% @spec (Host, Node, Type, Owner, Options) -> ok | {error, Reason} @@ -190,7 +196,7 @@ get_subnodes_tree(Host, Node) -> %% Options = list() create_node(Host, Node, Type, Owner, Options) -> BJID = jlib:jid_tolower(jlib:jid_remove_resource(Owner)), - case mnesia:read({pubsub_node, {Host, Node}}) of + case catch mnesia:read({pubsub_node, {Host, Node}}) of [] -> {ParentNode, ParentExists} = case Host of @@ -199,14 +205,14 @@ create_node(Host, Node, Type, Owner, Options) -> %% PEP does not uses hierarchy {[], true}; _ -> - Parent = lists:sublist(Node, length(Node) - 1), - case Parent of + case lists:sublist(Node, length(Node) - 1) of [] -> {[], true}; - _ -> - case mnesia:read({pubsub_node, {Host, Parent}}) of - [] -> {Parent, false}; - _ -> {Parent, lists:member(BJID, Parent#pubsub_node.owners)} + Parent -> + case catch mnesia:read({pubsub_node, {Host, Parent}}) of + [#pubsub_node{owners = [{[], Host, []}]}] -> {Parent, true}; + [#pubsub_node{owners = Owners}] -> {Parent, lists:member(BJID, Owners)}; + _ -> {Parent, false} end end end, |