diff --git a/data.c b/data.c index d7b0ff6..241ffbe 100644 --- a/data.c +++ b/data.c @@ -1935,6 +1935,30 @@ void enqueue_close_question(snac *user, const char *id, int end_secs) } +int was_question_voted(snac *user, const char *id) +/* returns true if the user voted in this poll */ +{ + xs *children = object_children(id); + int voted = 0; + xs_list *p; + xs_str *md5; + + p = children; + while (xs_list_iter(&p, &md5)) { + xs *obj = NULL; + + if (valid_status(object_get_by_md5(md5, &obj))) { + if (strcmp(xs_dict_get(obj, "attributedTo"), user->actor) == 0) { + voted = 1; + break; + } + } + } + + return voted; +} + + xs_list *user_queue(snac *snac) /* returns a list with filenames that can be dequeued */ { diff --git a/mastoapi.c b/mastoapi.c index fb76b56..a47c7e0 100644 --- a/mastoapi.c +++ b/mastoapi.c @@ -598,7 +598,6 @@ xs_dict *mastoapi_poll(snac *snac, const xs_dict *msg) xs *f = xs_val_new(XSTYPE_FALSE); xs *t = xs_val_new(XSTYPE_TRUE); xs_list *opts = NULL; - xs_list *p; xs_val *v; int num_votes = 0; xs *options = xs_list_new(); @@ -638,21 +637,8 @@ xs_dict *mastoapi_poll(snac *snac, const xs_dict *msg) xs *vc = xs_number_new(num_votes); poll = xs_dict_append(poll, "votes_count", vc); - xs *children = object_children(xs_dict_get(msg, "id")); - int voted = 0; - p = children; - while (xs_list_iter(&p, &v)) { - xs *obj = NULL; - - if (valid_status(object_get_by_md5(v, &obj))) { - if (strcmp(xs_dict_get(obj, "attributedTo"), snac->actor) == 0) { - voted = 1; - break; - } - } - } - - poll = xs_dict_append(poll, "voted", voted ? t : f); + poll = xs_dict_append(poll, "voted", + was_question_voted(snac, xs_dict_get(msg, "id")) ? t : f); } return poll; diff --git a/snac.h b/snac.h index 33f3a85..00bb59a 100644 --- a/snac.h +++ b/snac.h @@ -166,6 +166,7 @@ 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); +int was_question_voted(snac *user, const char *id); xs_list *user_queue(snac *snac); xs_list *queue(void);