commit 9b2d0381ba734102c20d2111f0a2b64a3c438ef7
parent 5090e4e77489d7e4e2d358c417c83be8f76307cb
Author: default <nobody@localhost>
Date: Tue, 1 Apr 2025 06:32:53 +0200
More scheduled post code.
Diffstat:
3 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/activitypub.c b/activitypub.c
@@ -2759,6 +2759,8 @@ int process_user_queue(snac *snac)
cnt++;
}
+ scheduled_process(snac);
+
return cnt;
}
diff --git a/data.c b/data.c
@@ -1966,6 +1966,33 @@ xs_list *scheduled_list(snac *user)
}
+void scheduled_process(snac *user)
+/* processes the scheduled list, sending those ready to be sent */
+{
+ xs *posts = scheduled_list(user);
+ const char *md5;
+ xs *right_now = xs_str_utctime(0, ISO_DATE_SPEC);
+
+ xs_list_foreach(posts, md5) {
+ xs *msg = NULL;
+
+ if (valid_status(object_get_by_md5(md5, &msg))) {
+ if (strcmp(xs_dict_get(msg, "published"), right_now) < 0) {
+ /* due date! */
+ const char *id = xs_dict_get(msg, "id");
+
+ timeline_add(user, id, msg);
+
+ xs *c_msg = msg_create(user, msg);
+ enqueue_message(user, c_msg);
+
+ schedule_del(user, id);
+ }
+ }
+ }
+}
+
+
/** hiding **/
xs_str *_hidden_fn(snac *snac, const char *id)
@@ -3734,7 +3761,7 @@ void purge_user(snac *snac)
_purge_user_subdir(snac, "public", pub_days);
const char *idxs[] = { "followers.idx", "private.idx", "public.idx",
- "pinned.idx", "bookmark.idx", "draft.idx", NULL };
+ "pinned.idx", "bookmark.idx", "draft.idx", "sched.idx", NULL };
for (n = 0; idxs[n]; n++) {
xs *idx = xs_fmt("%s/%s", snac->basedir, idxs[n]);
diff --git a/snac.h b/snac.h
@@ -1,7 +1,7 @@
/* snac - A simple, minimalistic ActivityPub instance */
/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
-#define VERSION "2.74"
+#define VERSION "2.75-dev"
#define USER_AGENT "snac/" VERSION
@@ -209,6 +209,7 @@ int is_scheduled(snac *user, const char *id);
void schedule_del(snac *user, const char *id);
void schedule_add(snac *user, const char *id, const xs_dict *msg);
xs_list *scheduled_list(snac *user);
+void scheduled_process(snac *user);
int limited(snac *user, const char *id, int cmd);
#define is_limited(user, id) limited((user), (id), 0)