summaryrefslogtreecommitdiff
path: root/src/node_flat_sql.erl
diff options
context:
space:
mode:
authorHolger Weiss <holger@zedat.fu-berlin.de>2021-10-30 13:19:30 +0200
committerHolger Weiss <holger@zedat.fu-berlin.de>2021-10-30 13:19:30 +0200
commit29dcc9b94ccfd514cf388979e7210d01cb97d5f4 (patch)
tree5ac228d1326501d0d43d4f126710bbd15d58cd54 /src/node_flat_sql.erl
parentUpdate 'xmpp' dependency (diff)
PubSub: Add delete_expired_pubsub_items command
Support XEP-0060's pubsub#item_expire feature by adding a command for deleting expired PubSub items. Thanks to Ammonit Measurement GmbH for sponsoring this work.
Diffstat (limited to 'src/node_flat_sql.erl')
-rw-r--r--src/node_flat_sql.erl19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/node_flat_sql.erl b/src/node_flat_sql.erl
index 240dc376..f9c8a209 100644
--- a/src/node_flat_sql.erl
+++ b/src/node_flat_sql.erl
@@ -43,7 +43,7 @@
create_node_permission/6, create_node/2, delete_node/1, purge_node/2,
subscribe_node/8, unsubscribe_node/4,
publish_item/7, delete_item/4,
- remove_extra_items/2, remove_extra_items/3,
+ remove_extra_items/2, remove_extra_items/3, remove_expired_items/2,
get_entity_affiliations/2, get_node_affiliations/1,
get_affiliation/2, set_affiliation/3,
get_entity_subscriptions/2, get_node_subscriptions/1,
@@ -285,6 +285,23 @@ remove_extra_items(Nidx, MaxItems, ItemIds) ->
del_items(Nidx, OldItems),
{result, {NewItems, OldItems}}.
+remove_expired_items(_Nidx, infinity) ->
+ {result, []};
+remove_expired_items(Nidx, Seconds) ->
+ ExpT = encode_now(
+ misc:usec_to_now(
+ erlang:system_time(microsecond) - (Seconds * 1000000))),
+ case ejabberd_sql:sql_query_t(
+ ?SQL("select @(itemid)s from pubsub_item where nodeid=%(Nidx)d "
+ "and creation < %(ExpT)s")) of
+ {selected, RItems} ->
+ ItemIds = [ItemId || {ItemId} <- RItems],
+ del_items(Nidx, ItemIds),
+ {result, ItemIds};
+ _ ->
+ {result, []}
+ end.
+
delete_item(Nidx, Publisher, PublishModel, ItemId) ->
SubKey = jid:tolower(Publisher),
GenKey = jid:remove_resource(SubKey),