Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Romain <christophe.romain@process-one.net>2015-04-08 18:12:05 +0300
committerChristophe Romain <christophe.romain@process-one.net>2015-04-21 16:24:16 +0300
commite0563e3918984d151fbea45a5f6fc8255913726d (patch)
treee62bcc5cc538a722f81c3f53291e02594e576711 /src/node_dag.erl
parent63926efd204c093b3125f789d5114e85ae4ff988 (diff)
PubSub improvements
This commit contains - code cleanup - use of db_type instead of old mod_pubsub_odbc - some minor optimizations - some minor bugfixes
Diffstat (limited to 'src/node_dag.erl')
-rw-r--r--src/node_dag.erl165
1 files changed, 79 insertions, 86 deletions
diff --git a/src/node_dag.erl b/src/node_dag.erl
index 9a36a4c4a..f0cbf17b8 100644
--- a/src/node_dag.erl
+++ b/src/node_dag.erl
@@ -5,39 +5,37 @@
%%% Erlang Public License along with this software. If not, it can be
%%% retrieved via the world wide web at http://www.erlang.org/.
%%%
+%%%
%%% Software distributed under the License is distributed on an "AS IS"
%%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%%% the License for the specific language governing rights and limitations
%%% under the License.
%%%
+%%%
%%% @author Brian Cully <bjc@kublai.com>
%%% @version {@vsn}, {@date} {@time}
%%% @end
%%% ====================================================================
-module(node_dag).
-
+-behaviour(gen_pubsub_node).
-author('bjc@kublai.com').
-include("pubsub.hrl").
-
-include("jlib.hrl").
--behaviour(gen_pubsub_node).
-
-%% API definition
-export([init/3, terminate/2, options/0, features/0,
- create_node_permission/6, create_node/2, delete_node/1,
- purge_node/2, subscribe_node/8, unsubscribe_node/4,
- publish_item/6, delete_item/4, remove_extra_items/3,
- get_entity_affiliations/2, get_node_affiliations/1,
- get_affiliation/2, set_affiliation/3,
- get_entity_subscriptions/2, get_node_subscriptions/1,
- get_subscriptions/2, set_subscriptions/4,
- get_pending_nodes/2, get_states/1, get_state/2,
- set_state/1, get_items/6, get_items/2, get_item/7,
- get_item/2, set_item/1, get_item_name/3, node_to_path/1,
- path_to_node/1]).
+ create_node_permission/6, create_node/2, delete_node/1,
+ purge_node/2, subscribe_node/8, unsubscribe_node/4,
+ publish_item/6, delete_item/4, remove_extra_items/3,
+ get_entity_affiliations/2, get_node_affiliations/1,
+ get_affiliation/2, set_affiliation/3,
+ get_entity_subscriptions/2, get_node_subscriptions/1,
+ get_subscriptions/2, set_subscriptions/4,
+ get_pending_nodes/2, get_states/1, get_state/2,
+ set_state/1, get_items/7, get_items/3, get_item/7,
+ get_item/2, set_item/1, get_item_name/3, node_to_path/1,
+ path_to_node/1]).
init(Host, ServerHost, Opts) ->
node_hometree:init(Host, ServerHost, Opts).
@@ -51,113 +49,108 @@ options() ->
features() ->
[<<"multi-collection">> | node_hometree:features()].
-create_node_permission(_Host, _ServerHost, _Node,
- _ParentNode, _Owner, _Access) ->
+create_node_permission(_Host, _ServerHost, _Node, _ParentNode, _Owner, _Access) ->
{result, true}.
-create_node(NodeID, Owner) ->
- node_hometree:create_node(NodeID, Owner).
+create_node(Nidx, Owner) ->
+ node_hometree:create_node(Nidx, Owner).
delete_node(Removed) ->
node_hometree:delete_node(Removed).
-subscribe_node(NodeID, Sender, Subscriber, AccessModel,
- SendLast, PresenceSubscription, RosterGroup, Options) ->
- node_hometree:subscribe_node(NodeID, Sender, Subscriber,
- AccessModel, SendLast, PresenceSubscription,
- RosterGroup, Options).
-
-unsubscribe_node(NodeID, Sender, Subscriber, SubID) ->
- node_hometree:unsubscribe_node(NodeID, Sender,
- Subscriber, SubID).
-
-publish_item(NodeID, Publisher, Model, MaxItems, ItemID,
- Payload) ->
- case nodetree_dag:get_node(NodeID) of
- #pubsub_node{options = Options} ->
- case find_opt(node_type, Options) of
- collection ->
- {error,
- ?ERR_EXTENDED((?ERR_NOT_ALLOWED), <<"publish">>)};
- _ ->
- node_hometree:publish_item(NodeID, Publisher, Model,
- MaxItems, ItemID, Payload)
- end;
- Err -> Err
+subscribe_node(Nidx, Sender, Subscriber, AccessModel,
+ SendLast, PresenceSubscription, RosterGroup, Options) ->
+ node_hometree:subscribe_node(Nidx, Sender, Subscriber, AccessModel, SendLast,
+ PresenceSubscription, RosterGroup, Options).
+
+unsubscribe_node(Nidx, Sender, Subscriber, SubId) ->
+ node_hometree:unsubscribe_node(Nidx, Sender, Subscriber, SubId).
+
+publish_item(Nidx, Publisher, Model, MaxItems, ItemId, Payload) ->
+ case nodetree_dag:get_node(Nidx) of
+ #pubsub_node{options = Options} ->
+ case find_opt(node_type, Options) of
+ collection ->
+ {error,
+ ?ERR_EXTENDED((?ERR_NOT_ALLOWED), <<"publish">>)};
+ _ ->
+ node_hometree:publish_item(Nidx, Publisher, Model,
+ MaxItems, ItemId, Payload)
+ end;
+ Err -> Err
end.
find_opt(_, []) -> false;
find_opt(Option, [{Option, Value} | _]) -> Value;
find_opt(Option, [_ | T]) -> find_opt(Option, T).
-remove_extra_items(NodeID, MaxItems, ItemIDs) ->
- node_hometree:remove_extra_items(NodeID, MaxItems,
- ItemIDs).
+remove_extra_items(Nidx, MaxItems, ItemIds) ->
+ node_hometree:remove_extra_items(Nidx, MaxItems, ItemIds).
-delete_item(NodeID, Publisher, PublishModel, ItemID) ->
- node_hometree:delete_item(NodeID, Publisher,
- PublishModel, ItemID).
+delete_item(Nidx, Publisher, PublishModel, ItemId) ->
+ node_hometree:delete_item(Nidx, Publisher, PublishModel, ItemId).
-purge_node(NodeID, Owner) ->
- node_hometree:purge_node(NodeID, Owner).
+purge_node(Nidx, Owner) ->
+ node_hometree:purge_node(Nidx, Owner).
get_entity_affiliations(Host, Owner) ->
node_hometree:get_entity_affiliations(Host, Owner).
-get_node_affiliations(NodeID) ->
- node_hometree:get_node_affiliations(NodeID).
+get_node_affiliations(Nidx) ->
+ node_hometree:get_node_affiliations(Nidx).
-get_affiliation(NodeID, Owner) ->
- node_hometree:get_affiliation(NodeID, Owner).
+get_affiliation(Nidx, Owner) ->
+ node_hometree:get_affiliation(Nidx, Owner).
-set_affiliation(NodeID, Owner, Affiliation) ->
- node_hometree:set_affiliation(NodeID, Owner,
- Affiliation).
+set_affiliation(Nidx, Owner, Affiliation) ->
+ node_hometree:set_affiliation(Nidx, Owner, Affiliation).
get_entity_subscriptions(Host, Owner) ->
node_hometree:get_entity_subscriptions(Host, Owner).
-get_node_subscriptions(NodeID) ->
- node_hometree:get_node_subscriptions(NodeID).
+get_node_subscriptions(Nidx) ->
+ node_hometree:get_node_subscriptions(Nidx).
-get_subscriptions(NodeID, Owner) ->
- node_hometree:get_subscriptions(NodeID, Owner).
+get_subscriptions(Nidx, Owner) ->
+ node_hometree:get_subscriptions(Nidx, Owner).
-set_subscriptions(NodeID, Owner, Subscription, SubID) ->
- node_hometree:set_subscriptions(NodeID, Owner,
- Subscription, SubID).
+set_subscriptions(Nidx, Owner, Subscription, SubId) ->
+ node_hometree:set_subscriptions(Nidx, Owner, Subscription, SubId).
get_pending_nodes(Host, Owner) ->
node_hometree:get_pending_nodes(Host, Owner).
-get_states(NodeID) -> node_hometree:get_states(NodeID).
+get_states(Nidx) ->
+ node_hometree:get_states(Nidx).
-get_state(NodeID, JID) ->
- node_hometree:get_state(NodeID, JID).
+get_state(Nidx, JID) ->
+ node_hometree:get_state(Nidx, JID).
-set_state(State) -> node_hometree:set_state(State).
+set_state(State) ->
+ node_hometree:set_state(State).
-get_items(NodeID, From) ->
- node_hometree:get_items(NodeID, From).
+get_items(Nidx, From, RSM) ->
+ node_hometree:get_items(Nidx, From, RSM).
-get_items(NodeID, JID, AccessModel,
- PresenceSubscription, RosterGroup, SubID) ->
- node_hometree:get_items(NodeID, JID, AccessModel,
- PresenceSubscription, RosterGroup, SubID).
+get_items(Nidx, JID, AccessModel, PresenceSubscription, RosterGroup, SubId, RSM) ->
+ node_hometree:get_items(Nidx, JID, AccessModel,
+ PresenceSubscription, RosterGroup, SubId, RSM).
-get_item(NodeID, ItemID) ->
- node_hometree:get_item(NodeID, ItemID).
+get_item(Nidx, ItemId) ->
+ node_hometree:get_item(Nidx, ItemId).
-get_item(NodeID, ItemID, JID, AccessModel,
- PresenceSubscription, RosterGroup, SubID) ->
- node_hometree:get_item(NodeID, ItemID, JID, AccessModel,
- PresenceSubscription, RosterGroup, SubID).
+get_item(Nidx, ItemId, JID, AccessModel, PresenceSubscription, RosterGroup, SubId) ->
+ node_hometree:get_item(Nidx, ItemId, JID, AccessModel,
+ PresenceSubscription, RosterGroup, SubId).
-set_item(Item) -> node_hometree:set_item(Item).
+set_item(Item) ->
+ node_hometree:set_item(Item).
-get_item_name(Host, Node, ID) ->
- node_hometree:get_item_name(Host, Node, ID).
+get_item_name(Host, Node, Id) ->
+ node_hometree:get_item_name(Host, Node, Id).
-node_to_path(Node) -> node_hometree:node_to_path(Node).
+node_to_path(Node) ->
+ node_hometree:node_to_path(Node).
-path_to_node(Path) -> node_hometree:path_to_node(Path).
+path_to_node(Path) ->
+ node_hometree:path_to_node(Path).