From 92f44e07cf24a2a25421a0ee28b5dece10f6511a Mon Sep 17 00:00:00 2001 From: grunfink Date: Fri, 25 Jul 2025 18:44:04 +0200 Subject: New function delete_purged_posts(). --- data.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'data.c') diff --git a/data.c b/data.c index f26da49..e6b7333 100644 --- a/data.c +++ b/data.c @@ -3840,6 +3840,43 @@ void purge_server(void) } +void delete_purged_posts(snac *user, int days) +/* enqueues Delete activities for local purged messages */ +{ + if (days == 0) + return; + + time_t mt = time(NULL) - days * 24 * 3600; + xs *spec = xs_fmt("%s/public/" "*.json", user->basedir); + xs *list = xs_glob(spec, 0, 0); + const char *v; + + xs_list_foreach(list, v) { + if (mtime(v) < mt) { + /* to be purged; is it a Note by us? */ + FILE *f; + + if ((f = fopen(v, "r")) != NULL) { + xs *msg = xs_json_load(f); + fclose(f); + + if (xs_is_dict(msg)) { + const char *id = xs_dict_get(msg, "id"); + + if (xs_is_string(id) && xs_startswith(id, user->actor)) { + xs *d_msg = msg_delete(user, id); + + enqueue_message(user, d_msg); + + snac_log(user, xs_fmt("enqueued Delete for purged message %s", id)); + } + } + } + } + } +} + + void purge_user(snac *snac) /* do the purge for this user */ { @@ -3863,6 +3900,8 @@ void purge_user(snac *snac) pub_days = user_days; } + delete_purged_posts(snac, pub_days); + _purge_user_subdir(snac, "hidden", priv_days); _purge_user_subdir(snac, "private", priv_days); -- cgit v1.2.3 From 375b7871540b74f219ab655b188d6d0f5b10bcef Mon Sep 17 00:00:00 2001 From: grunfink Date: Wed, 30 Jul 2025 18:07:12 +0200 Subject: New server knob 'propagate_local_purge'. --- data.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'data.c') diff --git a/data.c b/data.c index e6b7333..21cb15b 100644 --- a/data.c +++ b/data.c @@ -3900,7 +3900,8 @@ void purge_user(snac *snac) pub_days = user_days; } - delete_purged_posts(snac, pub_days); + if (xs_is_true(xs_dict_get(srv_config, "propagate_local_purge"))) + delete_purged_posts(snac, pub_days); _purge_user_subdir(snac, "hidden", priv_days); _purge_user_subdir(snac, "private", priv_days); -- cgit v1.2.3 From 3ffb53948252b0696548106e60c7755b0f007da5 Mon Sep 17 00:00:00 2001 From: grunfink Date: Sun, 3 Aug 2025 21:00:36 +0200 Subject: New function unhide(). --- data.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'data.c') diff --git a/data.c b/data.c index 21cb15b..d4661a0 100644 --- a/data.c +++ b/data.c @@ -2041,7 +2041,7 @@ xs_str *_hidden_fn(snac *snac, const char *id) void hide(snac *snac, const char *id) -/* hides a message tree */ +/* hides an object and its children (if it's a post) */ { xs *fn = _hidden_fn(snac, id); FILE *f; @@ -2081,6 +2081,14 @@ int is_hidden(snac *snac, const char *id) } +int unhide(snac *user, const char *id) +/* unhides an object */ +{ + xs *fn = _hidden_fn(user, id); + return unlink(fn); +} + + int actor_add(const char *actor, const xs_dict *msg) /* adds an actor */ { -- cgit v1.2.3 From 5885589e5896d8d15be03364826aab45f04fb830 Mon Sep 17 00:00:00 2001 From: grunfink Date: Tue, 12 Aug 2025 11:31:23 +0200 Subject: content_search() also looks in the attributedTo field. --- data.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'data.c') diff --git a/data.c b/data.c index d4661a0..70bd031 100644 --- a/data.c +++ b/data.c @@ -2984,11 +2984,14 @@ xs_list *content_search(snac *user, const char *regex, xs *c = xs_str_new(NULL); const char *content = xs_dict_get(post, "content"); const char *name = xs_dict_get(post, "name"); + const char *atto = get_atto(post); if (!xs_is_null(content)) c = xs_str_cat(c, content); if (!xs_is_null(name)) c = xs_str_cat(c, " ", name); + if (!xs_is_null(atto)) + c = xs_str_cat(c, " ", atto); /* add alt-texts from attachments */ const xs_list *atts = xs_dict_get(post, "attachment"); -- cgit v1.2.3