aboutsummaryrefslogtreecommitdiff
path: root/src/mod_pubsub/nodetree_tree.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mod_pubsub/nodetree_tree.erl')
-rw-r--r--src/mod_pubsub/nodetree_tree.erl28
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,