summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data.c24
-rw-r--r--mastoapi.c18
-rw-r--r--snac.h1
3 files changed, 27 insertions, 16 deletions
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);