Prechádzať zdrojové kódy

New function delete_purged_posts().

grunfink 1 rok pred
rodič
commit
92f44e07cf
1 zmenil súbory, kde vykonal 39 pridanie a 0 odobranie
  1. 39 0
      data.c

+ 39 - 0
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);