diff options
| -rw-r--r-- | activitypub.c | 2 | ||||
| -rw-r--r-- | data.c | 29 | ||||
| -rw-r--r-- | snac.h | 3 |
3 files changed, 32 insertions, 2 deletions
diff --git a/activitypub.c b/activitypub.c index c00c371..4c22c25 100644 --- a/activitypub.c +++ b/activitypub.c | |||
| @@ -2759,6 +2759,8 @@ int process_user_queue(snac *snac) | |||
| 2759 | cnt++; | 2759 | cnt++; |
| 2760 | } | 2760 | } |
| 2761 | 2761 | ||
| 2762 | scheduled_process(snac); | ||
| 2763 | |||
| 2762 | return cnt; | 2764 | return cnt; |
| 2763 | } | 2765 | } |
| 2764 | 2766 | ||
| @@ -1966,6 +1966,33 @@ xs_list *scheduled_list(snac *user) | |||
| 1966 | } | 1966 | } |
| 1967 | 1967 | ||
| 1968 | 1968 | ||
| 1969 | void scheduled_process(snac *user) | ||
| 1970 | /* processes the scheduled list, sending those ready to be sent */ | ||
| 1971 | { | ||
| 1972 | xs *posts = scheduled_list(user); | ||
| 1973 | const char *md5; | ||
| 1974 | xs *right_now = xs_str_utctime(0, ISO_DATE_SPEC); | ||
| 1975 | |||
| 1976 | xs_list_foreach(posts, md5) { | ||
| 1977 | xs *msg = NULL; | ||
| 1978 | |||
| 1979 | if (valid_status(object_get_by_md5(md5, &msg))) { | ||
| 1980 | if (strcmp(xs_dict_get(msg, "published"), right_now) < 0) { | ||
| 1981 | /* due date! */ | ||
| 1982 | const char *id = xs_dict_get(msg, "id"); | ||
| 1983 | |||
| 1984 | timeline_add(user, id, msg); | ||
| 1985 | |||
| 1986 | xs *c_msg = msg_create(user, msg); | ||
| 1987 | enqueue_message(user, c_msg); | ||
| 1988 | |||
| 1989 | schedule_del(user, id); | ||
| 1990 | } | ||
| 1991 | } | ||
| 1992 | } | ||
| 1993 | } | ||
| 1994 | |||
| 1995 | |||
| 1969 | /** hiding **/ | 1996 | /** hiding **/ |
| 1970 | 1997 | ||
| 1971 | xs_str *_hidden_fn(snac *snac, const char *id) | 1998 | xs_str *_hidden_fn(snac *snac, const char *id) |
| @@ -3734,7 +3761,7 @@ void purge_user(snac *snac) | |||
| 3734 | _purge_user_subdir(snac, "public", pub_days); | 3761 | _purge_user_subdir(snac, "public", pub_days); |
| 3735 | 3762 | ||
| 3736 | const char *idxs[] = { "followers.idx", "private.idx", "public.idx", | 3763 | const char *idxs[] = { "followers.idx", "private.idx", "public.idx", |
| 3737 | "pinned.idx", "bookmark.idx", "draft.idx", NULL }; | 3764 | "pinned.idx", "bookmark.idx", "draft.idx", "sched.idx", NULL }; |
| 3738 | 3765 | ||
| 3739 | for (n = 0; idxs[n]; n++) { | 3766 | for (n = 0; idxs[n]; n++) { |
| 3740 | xs *idx = xs_fmt("%s/%s", snac->basedir, idxs[n]); | 3767 | xs *idx = xs_fmt("%s/%s", snac->basedir, idxs[n]); |
| @@ -1,7 +1,7 @@ | |||
| 1 | /* snac - A simple, minimalistic ActivityPub instance */ | 1 | /* snac - A simple, minimalistic ActivityPub instance */ |
| 2 | /* copyright (c) 2022 - 2025 grunfink et al. / MIT license */ | 2 | /* copyright (c) 2022 - 2025 grunfink et al. / MIT license */ |
| 3 | 3 | ||
| 4 | #define VERSION "2.74" | 4 | #define VERSION "2.75-dev" |
| 5 | 5 | ||
| 6 | #define USER_AGENT "snac/" VERSION | 6 | #define USER_AGENT "snac/" VERSION |
| 7 | 7 | ||
| @@ -209,6 +209,7 @@ int is_scheduled(snac *user, const char *id); | |||
| 209 | void schedule_del(snac *user, const char *id); | 209 | void schedule_del(snac *user, const char *id); |
| 210 | void schedule_add(snac *user, const char *id, const xs_dict *msg); | 210 | void schedule_add(snac *user, const char *id, const xs_dict *msg); |
| 211 | xs_list *scheduled_list(snac *user); | 211 | xs_list *scheduled_list(snac *user); |
| 212 | void scheduled_process(snac *user); | ||
| 212 | 213 | ||
| 213 | int limited(snac *user, const char *id, int cmd); | 214 | int limited(snac *user, const char *id, int cmd); |
| 214 | #define is_limited(user, id) limited((user), (id), 0) | 215 | #define is_limited(user, id) limited((user), (id), 0) |