commit 92f44e0
grunfink
·
2025-07-25 16:44:04 +0000 UTC
parent 53dffe9
New function delete_purged_posts().
1 files changed,
+39,
-0
M
data.c
M
data.c
+39,
-0
1@@ -3840,6 +3840,43 @@ void purge_server(void)
2 }
3
4
5+void delete_purged_posts(snac *user, int days)
6+/* enqueues Delete activities for local purged messages */
7+{
8+ if (days == 0)
9+ return;
10+
11+ time_t mt = time(NULL) - days * 24 * 3600;
12+ xs *spec = xs_fmt("%s/public/" "*.json", user->basedir);
13+ xs *list = xs_glob(spec, 0, 0);
14+ const char *v;
15+
16+ xs_list_foreach(list, v) {
17+ if (mtime(v) < mt) {
18+ /* to be purged; is it a Note by us? */
19+ FILE *f;
20+
21+ if ((f = fopen(v, "r")) != NULL) {
22+ xs *msg = xs_json_load(f);
23+ fclose(f);
24+
25+ if (xs_is_dict(msg)) {
26+ const char *id = xs_dict_get(msg, "id");
27+
28+ if (xs_is_string(id) && xs_startswith(id, user->actor)) {
29+ xs *d_msg = msg_delete(user, id);
30+
31+ enqueue_message(user, d_msg);
32+
33+ snac_log(user, xs_fmt("enqueued Delete for purged message %s", id));
34+ }
35+ }
36+ }
37+ }
38+ }
39+}
40+
41+
42 void purge_user(snac *snac)
43 /* do the purge for this user */
44 {
45@@ -3863,6 +3900,8 @@ void purge_user(snac *snac)
46 pub_days = user_days;
47 }
48
49+ delete_purged_posts(snac, pub_days);
50+
51 _purge_user_subdir(snac, "hidden", priv_days);
52 _purge_user_subdir(snac, "private", priv_days);
53