summaryrefslogtreecommitdiff
path: root/src/mod_caps.erl
diff options
context:
space:
mode:
authorHolger Weiss <holger@zedat.fu-berlin.de>2015-07-07 00:24:06 +0200
committerHolger Weiss <holger@zedat.fu-berlin.de>2015-07-07 09:33:00 +0200
commit0f964142799cd987b612dc2134c7a11573ab80b7 (patch)
tree1213edcf37efa117ea7d1ca22c0fa65eae1af480 /src/mod_caps.erl
parentmod_pubsub: Explain caps_update usage in a comment (diff)
Trigger PEP notifications on CAPS updates
Let mod_pubsub send last items whenever a contact updates the entity capabilities. This was already done for remote contacts and is now also done for local contacts.
Diffstat (limited to 'src/mod_caps.erl')
-rw-r--r--src/mod_caps.erl39
1 files changed, 18 insertions, 21 deletions
diff --git a/src/mod_caps.erl b/src/mod_caps.erl
index 4d166ce7..6d647908 100644
--- a/src/mod_caps.erl
+++ b/src/mod_caps.erl
@@ -243,27 +243,24 @@ c2s_presence_in(C2SState,
error -> gb_trees:empty()
end,
Caps = read_caps(Els),
- {CapsUpdated, NewRs} = case Caps of
- nothing when Insert == true -> {false, Rs};
- _ when Insert == true ->
- case gb_trees:lookup(LFrom, Rs) of
- {value, Caps} -> {false, Rs};
- none ->
- {true,
- gb_trees:insert(LFrom, Caps,
- Rs)};
- _ ->
- {true,
- gb_trees:update(LFrom, Caps, Rs)}
- end;
- _ -> {false, gb_trees:delete_any(LFrom, Rs)}
- end,
- if CapsUpdated ->
- ejabberd_hooks:run(caps_update, To#jid.lserver,
- [From, To,
- get_features(To#jid.lserver, Caps)]);
- true -> ok
- end,
+ NewRs = case Caps of
+ nothing when Insert == true -> Rs;
+ _ when Insert == true ->
+ case gb_trees:lookup(LFrom, Rs) of
+ {value, Caps} -> Rs;
+ none ->
+ ejabberd_hooks:run(caps_add, To#jid.lserver,
+ [From, To,
+ get_features(To#jid.lserver, Caps)]),
+ gb_trees:insert(LFrom, Caps, Rs);
+ _ ->
+ ejabberd_hooks:run(caps_update, To#jid.lserver,
+ [From, To,
+ get_features(To#jid.lserver, Caps)]),
+ gb_trees:update(LFrom, Caps, Rs)
+ end;
+ _ -> gb_trees:delete_any(LFrom, Rs)
+ end,
ejabberd_c2s:set_aux_field(caps_resources, NewRs,
C2SState);
true -> C2SState