diff options
| -rw-r--r-- | data.c | 24 | ||||
| -rw-r--r-- | mastoapi.c | 18 | ||||
| -rw-r--r-- | snac.h | 1 |
3 files changed, 27 insertions, 16 deletions
| @@ -1935,6 +1935,30 @@ void enqueue_close_question(snac *user, const char *id, int end_secs) | |||
| 1935 | } | 1935 | } |
| 1936 | 1936 | ||
| 1937 | 1937 | ||
| 1938 | int was_question_voted(snac *user, const char *id) | ||
| 1939 | /* returns true if the user voted in this poll */ | ||
| 1940 | { | ||
| 1941 | xs *children = object_children(id); | ||
| 1942 | int voted = 0; | ||
| 1943 | xs_list *p; | ||
| 1944 | xs_str *md5; | ||
| 1945 | |||
| 1946 | p = children; | ||
| 1947 | while (xs_list_iter(&p, &md5)) { | ||
| 1948 | xs *obj = NULL; | ||
| 1949 | |||
| 1950 | if (valid_status(object_get_by_md5(md5, &obj))) { | ||
| 1951 | if (strcmp(xs_dict_get(obj, "attributedTo"), user->actor) == 0) { | ||
| 1952 | voted = 1; | ||
| 1953 | break; | ||
| 1954 | } | ||
| 1955 | } | ||
| 1956 | } | ||
| 1957 | |||
| 1958 | return voted; | ||
| 1959 | } | ||
| 1960 | |||
| 1961 | |||
| 1938 | xs_list *user_queue(snac *snac) | 1962 | xs_list *user_queue(snac *snac) |
| 1939 | /* returns a list with filenames that can be dequeued */ | 1963 | /* returns a list with filenames that can be dequeued */ |
| 1940 | { | 1964 | { |
| @@ -598,7 +598,6 @@ xs_dict *mastoapi_poll(snac *snac, const xs_dict *msg) | |||
| 598 | xs *f = xs_val_new(XSTYPE_FALSE); | 598 | xs *f = xs_val_new(XSTYPE_FALSE); |
| 599 | xs *t = xs_val_new(XSTYPE_TRUE); | 599 | xs *t = xs_val_new(XSTYPE_TRUE); |
| 600 | xs_list *opts = NULL; | 600 | xs_list *opts = NULL; |
| 601 | xs_list *p; | ||
| 602 | xs_val *v; | 601 | xs_val *v; |
| 603 | int num_votes = 0; | 602 | int num_votes = 0; |
| 604 | xs *options = xs_list_new(); | 603 | xs *options = xs_list_new(); |
| @@ -638,21 +637,8 @@ xs_dict *mastoapi_poll(snac *snac, const xs_dict *msg) | |||
| 638 | xs *vc = xs_number_new(num_votes); | 637 | xs *vc = xs_number_new(num_votes); |
| 639 | poll = xs_dict_append(poll, "votes_count", vc); | 638 | poll = xs_dict_append(poll, "votes_count", vc); |
| 640 | 639 | ||
| 641 | xs *children = object_children(xs_dict_get(msg, "id")); | 640 | poll = xs_dict_append(poll, "voted", |
| 642 | int voted = 0; | 641 | was_question_voted(snac, xs_dict_get(msg, "id")) ? t : f); |
| 643 | p = children; | ||
| 644 | while (xs_list_iter(&p, &v)) { | ||
| 645 | xs *obj = NULL; | ||
| 646 | |||
| 647 | if (valid_status(object_get_by_md5(v, &obj))) { | ||
| 648 | if (strcmp(xs_dict_get(obj, "attributedTo"), snac->actor) == 0) { | ||
| 649 | voted = 1; | ||
| 650 | break; | ||
| 651 | } | ||
| 652 | } | ||
| 653 | } | ||
| 654 | |||
| 655 | poll = xs_dict_append(poll, "voted", voted ? t : f); | ||
| 656 | } | 642 | } |
| 657 | 643 | ||
| 658 | return poll; | 644 | return poll; |
| @@ -166,6 +166,7 @@ void enqueue_email(xs_str *msg, int retries); | |||
| 166 | void enqueue_telegram(const xs_str *msg, const char *bot, const char *chat_id); | 166 | void enqueue_telegram(const xs_str *msg, const char *bot, const char *chat_id); |
| 167 | void enqueue_message(snac *snac, char *msg); | 167 | void enqueue_message(snac *snac, char *msg); |
| 168 | void enqueue_close_question(snac *user, const char *id, int end_secs); | 168 | void enqueue_close_question(snac *user, const char *id, int end_secs); |
| 169 | int was_question_voted(snac *user, const char *id); | ||
| 169 | 170 | ||
| 170 | xs_list *user_queue(snac *snac); | 171 | xs_list *user_queue(snac *snac); |
| 171 | xs_list *queue(void); | 172 | xs_list *queue(void); |