commit cfca2ad

default  ·  2023-04-24 15:05:34 +0000 UTC
parent 3d20adc
Added mentions to mastoapi_status().
1 files changed,  +39, -3
+39, -3
 1@@ -557,9 +557,45 @@ xs_dict *mastoapi_status(snac *snac, const xs_dict *msg)
 2 
 3     st = xs_dict_append(st, "media_attachments", matt);
 4 
 5-    st = xs_dict_append(st, "mentions",          el);
 6-    st = xs_dict_append(st, "tags",              el);
 7-    st = xs_dict_append(st, "emojis",            el);
 8+    {
 9+        xs *ml  = xs_list_new();
10+        xs *htl = xs_list_new();
11+        xs *eml = xs_list_new();
12+        xs_list *p = xs_dict_get(msg, "tag");
13+        xs_dict *v;
14+        int n = 0;
15+
16+        while (xs_list_iter(&p, &v)) {
17+            const char *type = xs_dict_get(v, "type");
18+
19+            if (xs_is_null(type))
20+                continue;
21+
22+            xs *d1 = xs_dict_new();
23+
24+            if (strcmp(type, "Mention") == 0) {
25+                const char *name = xs_dict_get(v, "name");
26+                const char *href = xs_dict_get(v, "href");
27+
28+                if (!xs_is_null(name) && !xs_is_null(href) &&
29+                    strcmp(href, snac->actor) != 0) {
30+                    xs *nm = xs_strip_chars_i(xs_dup(name), "@");
31+
32+                    xs *id = xs_fmt("%d", n++);
33+                    d1 = xs_dict_append(d1, "id", id);
34+                    d1 = xs_dict_append(d1, "username", nm);
35+                    d1 = xs_dict_append(d1, "acct", nm);
36+                    d1 = xs_dict_append(d1, "url", href);
37+
38+                    ml = xs_list_append(ml, d1);
39+                }
40+            }
41+        }
42+
43+        st = xs_dict_append(st, "mentions", ml);
44+        st = xs_dict_append(st, "tags",     htl);
45+        st = xs_dict_append(st, "emojis",   eml);
46+    }
47 
48     xs_free(idx);
49     xs_free(ixc);