commit 3b72b0f

default  ·  2023-05-31 20:06:31 +0000 UTC
parent 796a111
New function was_question_voted().
3 files changed,  +27, -16
M data.c
M snac.h
M data.c
+24, -0
 1@@ -1935,6 +1935,30 @@ void enqueue_close_question(snac *user, const char *id, int end_secs)
 2 }
 3 
 4 
 5+int was_question_voted(snac *user, const char *id)
 6+/* returns true if the user voted in this poll */
 7+{
 8+    xs *children = object_children(id);
 9+    int voted = 0;
10+    xs_list *p;
11+    xs_str *md5;
12+
13+    p = children;
14+    while (xs_list_iter(&p, &md5)) {
15+        xs *obj = NULL;
16+
17+        if (valid_status(object_get_by_md5(md5, &obj))) {
18+            if (strcmp(xs_dict_get(obj, "attributedTo"), user->actor) == 0) {
19+                voted = 1;
20+                break;
21+            }
22+        }
23+    }
24+
25+    return voted;
26+}
27+
28+
29 xs_list *user_queue(snac *snac)
30 /* returns a list with filenames that can be dequeued */
31 {
+2, -16
 1@@ -598,7 +598,6 @@ xs_dict *mastoapi_poll(snac *snac, const xs_dict *msg)
 2         xs *f    = xs_val_new(XSTYPE_FALSE);
 3         xs *t    = xs_val_new(XSTYPE_TRUE);
 4         xs_list *opts = NULL;
 5-        xs_list *p;
 6         xs_val *v;
 7         int num_votes = 0;
 8         xs *options = xs_list_new();
 9@@ -638,21 +637,8 @@ xs_dict *mastoapi_poll(snac *snac, const xs_dict *msg)
10         xs *vc = xs_number_new(num_votes);
11         poll = xs_dict_append(poll, "votes_count", vc);
12 
13-        xs *children = object_children(xs_dict_get(msg, "id"));
14-        int voted = 0;
15-        p = children;
16-        while (xs_list_iter(&p, &v)) {
17-            xs *obj = NULL;
18-
19-            if (valid_status(object_get_by_md5(v, &obj))) {
20-                if (strcmp(xs_dict_get(obj, "attributedTo"), snac->actor) == 0) {
21-                    voted = 1;
22-                    break;
23-                }
24-            }
25-        }
26-
27-        poll = xs_dict_append(poll, "voted", voted ? t : f);
28+        poll = xs_dict_append(poll, "voted",
29+                was_question_voted(snac, xs_dict_get(msg, "id")) ? t : f);
30     }
31 
32     return poll;
M snac.h
+1, -0
1@@ -166,6 +166,7 @@ void enqueue_email(xs_str *msg, int retries);
2 void enqueue_telegram(const xs_str *msg, const char *bot, const char *chat_id);
3 void enqueue_message(snac *snac, char *msg);
4 void enqueue_close_question(snac *user, const char *id, int end_secs);
5+int was_question_voted(snac *user, const char *id);
6 
7 xs_list *user_queue(snac *snac);
8 xs_list *queue(void);