diff options
author | default <nobody@localhost> | 2023-05-29 11:07:38 +0200 |
---|---|---|
committer | default <nobody@localhost> | 2023-05-29 11:07:38 +0200 |
commit | 765936244888f8d5f1644b0178cc6dc70597166b (patch) | |
tree | c7766c1c55748329f0cc4deda0e528bda6845d0c | |
parent | 05ac2a062dc3f01837c511a2d7e2051cda15e44a (diff) |
Enqueue a close_question user q_item.
-rw-r--r-- | activitypub.c | 14 | ||||
-rw-r--r-- | data.c | 15 | ||||
-rw-r--r-- | main.c | 4 | ||||
-rw-r--r-- | snac.h | 1 |
4 files changed, 31 insertions, 3 deletions
diff --git a/activitypub.c b/activitypub.c index 27f9c7c..15937c3 100644 --- a/activitypub.c +++ b/activitypub.c @@ -1058,8 +1058,10 @@ int update_question(snac *user, const char *id) xs *now = xs_str_utctime(0, ISO_DATE_SPEC); /* it's now greater than the endTime? */ - if (strcmp(now, end_time) > 0) - msg = xs_dict_set(msg, "closed", end_time); + if (strcmp(now, end_time) > 0) { + xs *et = xs_dup(end_time); + msg = xs_dict_set(msg, "closed", et); + } } /* update the count of voters */ @@ -1541,6 +1543,14 @@ void process_user_queue_item(snac *snac, xs_dict *q_item) } } else + if (strcmp(type, "close_question") == 0) { + /* the time for this question has ended */ + const char *id = xs_dict_get(q_item, "message"); + + if (!xs_is_null(id)) + update_question(snac, id); + } + else snac_log(snac, xs_fmt("unexpected q_item type '%s'", type)); } @@ -1920,6 +1920,21 @@ void enqueue_message(snac *snac, xs_dict *msg) } +void enqueue_close_question(snac *user, const char *id, int end_secs) +/* enqueues the closing of a question */ +{ + xs *qmsg = _new_qmsg("close_question", id, 0); + xs *ntid = tid(end_secs); + xs *fn = xs_fmt("%s/queue/%s.json", user->basedir, ntid); + + qmsg = xs_dict_set(qmsg, "ntid", ntid); + + qmsg = _enqueue_put(fn, qmsg); + + snac_debug(user, 0, xs_fmt("enqueue_close_question %s", id)); +} + + xs_list *user_queue(snac *snac) /* returns a list with filenames that can be dequeued */ { @@ -253,9 +253,10 @@ int main(int argc, char *argv[]) } if (strcmp(cmd, "question") == 0) { /** **/ + int end_secs = 5 * 60; xs *opts = xs_split(url, ";"); - xs *msg = msg_question(&snac, "Poll", opts, 0, 5 * 60); + xs *msg = msg_question(&snac, "Poll", opts, 0, end_secs); xs *c_msg = msg_create(&snac, msg); if (dbglevel) { @@ -264,6 +265,7 @@ int main(int argc, char *argv[]) } enqueue_message(&snac, c_msg); + enqueue_close_question(&snac, xs_dict_get(msg, "id"), end_secs); timeline_add(&snac, xs_dict_get(msg, "id"), msg); @@ -165,6 +165,7 @@ void enqueue_output_by_actor(snac *snac, xs_dict *msg, const xs_str *actor, int void enqueue_email(xs_str *msg, int retries); void enqueue_telegram(const xs_str *msg, const char *bot, const char *chat_id); void enqueue_message(snac *snac, char *msg); +void enqueue_close_question(snac *user, const char *id, int end_secs); xs_list *user_queue(snac *snac); xs_list *queue(void); |