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