commit 9b2d038

default  ·  2025-04-01 04:32:53 +0000 UTC
parent 5090e4e
More scheduled post code.
3 files changed,  +32, -2
M data.c
M snac.h
+2, -0
1@@ -2759,6 +2759,8 @@ int process_user_queue(snac *snac)
2         cnt++;
3     }
4 
5+    scheduled_process(snac);
6+
7     return cnt;
8 }
9 
M data.c
+28, -1
 1@@ -1966,6 +1966,33 @@ xs_list *scheduled_list(snac *user)
 2 }
 3 
 4 
 5+void scheduled_process(snac *user)
 6+/* processes the scheduled list, sending those ready to be sent */
 7+{
 8+    xs *posts = scheduled_list(user);
 9+    const char *md5;
10+    xs *right_now = xs_str_utctime(0, ISO_DATE_SPEC);
11+
12+    xs_list_foreach(posts, md5) {
13+        xs *msg = NULL;
14+
15+        if (valid_status(object_get_by_md5(md5, &msg))) {
16+            if (strcmp(xs_dict_get(msg, "published"), right_now) < 0) {
17+                /* due date! */
18+                const char *id = xs_dict_get(msg, "id");
19+
20+                timeline_add(user, id, msg);
21+
22+                xs *c_msg = msg_create(user, msg);
23+                enqueue_message(user, c_msg);
24+
25+                schedule_del(user, id);
26+            }
27+        }
28+    }
29+}
30+
31+
32 /** hiding **/
33 
34 xs_str *_hidden_fn(snac *snac, const char *id)
35@@ -3734,7 +3761,7 @@ void purge_user(snac *snac)
36     _purge_user_subdir(snac, "public",  pub_days);
37 
38     const char *idxs[] = { "followers.idx", "private.idx", "public.idx",
39-                           "pinned.idx", "bookmark.idx", "draft.idx", NULL };
40+                           "pinned.idx", "bookmark.idx", "draft.idx", "sched.idx", NULL };
41 
42     for (n = 0; idxs[n]; n++) {
43         xs *idx = xs_fmt("%s/%s", snac->basedir, idxs[n]);
M snac.h
+2, -1
 1@@ -1,7 +1,7 @@
 2 /* snac - A simple, minimalistic ActivityPub instance */
 3 /* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
 4 
 5-#define VERSION "2.74"
 6+#define VERSION "2.75-dev"
 7 
 8 #define USER_AGENT "snac/" VERSION
 9 
10@@ -209,6 +209,7 @@ int is_scheduled(snac *user, const char *id);
11 void schedule_del(snac *user, const char *id);
12 void schedule_add(snac *user, const char *id, const xs_dict *msg);
13 xs_list *scheduled_list(snac *user);
14+void scheduled_process(snac *user);
15 
16 int limited(snac *user, const char *id, int cmd);
17 #define is_limited(user, id) limited((user), (id), 0)