diff options
| author | 2024-05-31 09:09:54 +0000 | |
|---|---|---|
| committer | 2024-05-31 09:09:54 +0000 | |
| commit | fe52b7612e4a96d491f925dfcbbbaa6251654ca4 (patch) | |
| tree | 40fb16a0f78b0988dd8167c101554d8425d2a875 /mastoapi.c | |
| parent | mastoapi: more list tweaks. (diff) | |
| parent | Merge branch 'master' into announcements (diff) | |
| download | penes-snac2-fe52b7612e4a96d491f925dfcbbbaa6251654ca4.tar.gz penes-snac2-fe52b7612e4a96d491f925dfcbbbaa6251654ca4.tar.xz penes-snac2-fe52b7612e4a96d491f925dfcbbbaa6251654ca4.zip | |
Merge pull request 'Implement instance announcements' (#173) from louis77/snac2:announcements into master
Reviewed-on: https://codeberg.org/grunfink/snac2/pulls/173
Diffstat (limited to 'mastoapi.c')
| -rw-r--r-- | mastoapi.c | 38 |
1 files changed, 34 insertions, 4 deletions
| @@ -1997,10 +1997,40 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path, | |||
| 1997 | } | 1997 | } |
| 1998 | else | 1998 | else |
| 1999 | if (strcmp(cmd, "/v1/announcements") == 0) { /** **/ | 1999 | if (strcmp(cmd, "/v1/announcements") == 0) { /** **/ |
| 2000 | /* snac has no announcements (yet?) */ | 2000 | if (logged_in) { |
| 2001 | *body = xs_dup("[]"); | 2001 | xs *resp = xs_list_new(); |
| 2002 | *ctype = "application/json"; | 2002 | double la = 0.0; |
| 2003 | status = HTTP_STATUS_OK; | 2003 | xs *user_la = xs_dup(xs_dict_get(snac1.config, "last_announcement")); |
| 2004 | if (user_la != NULL) | ||
| 2005 | la = xs_number_get(user_la); | ||
| 2006 | xs *val_date = xs_str_utctime(la, ISO_DATE_SPEC); | ||
| 2007 | |||
| 2008 | /* contrary to html, we always send the announcement and set the read flag instead */ | ||
| 2009 | |||
| 2010 | const t_announcement *annce = announcement(la); | ||
| 2011 | if (annce != NULL && annce->text != NULL) { | ||
| 2012 | xs *an = xs_dict_new(); | ||
| 2013 | an = xs_dict_set(an, "id", xs_fmt("%d", annce->timestamp)); | ||
| 2014 | an = xs_dict_set(an, "content", xs_fmt("<p>%s</p>", annce->text)); | ||
| 2015 | an = xs_dict_set(an, "starts_at", xs_stock(XSTYPE_NULL)); | ||
| 2016 | an = xs_dict_set(an, "ends_at", xs_stock(XSTYPE_NULL)); | ||
| 2017 | an = xs_dict_set(an, "all_day", xs_stock(XSTYPE_TRUE)); | ||
| 2018 | an = xs_dict_set(an, "published_at", val_date); | ||
| 2019 | an = xs_dict_set(an, "updated_at", val_date); | ||
| 2020 | an = xs_dict_set(an, "read", (annce->timestamp >= la) | ||
| 2021 | ? xs_stock(XSTYPE_FALSE) : xs_stock(XSTYPE_TRUE)); | ||
| 2022 | an = xs_dict_set(an, "mentions", xs_stock(XSTYPE_LIST)); | ||
| 2023 | an = xs_dict_set(an, "statuses", xs_stock(XSTYPE_LIST)); | ||
| 2024 | an = xs_dict_set(an, "tags", xs_stock(XSTYPE_LIST)); | ||
| 2025 | an = xs_dict_set(an, "emojis", xs_stock(XSTYPE_LIST)); | ||
| 2026 | an = xs_dict_set(an, "reactions", xs_stock(XSTYPE_LIST)); | ||
| 2027 | resp = xs_list_append(resp, an); | ||
| 2028 | } | ||
| 2029 | |||
| 2030 | *body = xs_json_dumps(resp, 4); | ||
| 2031 | *ctype = "application/json"; | ||
| 2032 | status = HTTP_STATUS_OK; | ||
| 2033 | } | ||
| 2004 | } | 2034 | } |
| 2005 | else | 2035 | else |
| 2006 | if (strcmp(cmd, "/v1/custom_emojis") == 0) { /** **/ | 2036 | if (strcmp(cmd, "/v1/custom_emojis") == 0) { /** **/ |