commit 54bb162

violette  ·  2026-01-12 04:33:48 +0000 UTC
parent 7fe8761
mastoapi: also return children of children.
1 files changed,  +34, -17
+34, -17
 1@@ -1809,6 +1809,37 @@ xs_list *mastoapi_account_lists(snac *user, const char *uid)
 2 }
 3 
 4 
 5+xs_list *build_childrens(const xs_dict *msg, snac *snac1) {
 6+    xs_list *ret = xs_list_new();
 7+    xs *children = object_children(xs_dict_get(msg, "id"));
 8+    char *p = children;
 9+    const xs_str *v;
10+
11+    while (xs_list_iter(&p, &v)) {
12+        xs *m2 = NULL;
13+
14+        if (valid_status(timeline_get_by_md5(snac1, v, &m2))) {
15+            if (xs_is_null(xs_dict_get(m2, "name"))) {
16+                xs *st = mastoapi_status(snac1, m2);
17+
18+                if (st) {
19+                    /* childrens children */
20+                    xs *childs = build_childrens(m2, snac1);
21+                    ret = xs_list_append(ret, st);
22+                    if (xs_list_len(childs)) {
23+                        char *p2 = childs;
24+                        while (xs_list_iter(&p2, &v))
25+                            ret = xs_list_append(ret, v);
26+
27+                    }
28+                }
29+            }
30+        }
31+    }
32+    return ret;
33+}
34+
35+
36 int mastoapi_get_handler(const xs_dict *req, const char *q_path,
37                          char **body, int *b_size, char **ctype, xs_str **link)
38 {
39@@ -2821,8 +2852,6 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path,
40                         /* return ancestors and children */
41                         xs *anc = xs_list_new();
42                         xs *des = xs_list_new();
43-                        xs_list *p;
44-                        const xs_str *v;
45                         char pid[MD5_HEX_SIZE];
46 
47                         /* build the [grand]parent list, moving up */
48@@ -2842,21 +2871,9 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path,
49                         }
50 
51                         /* build the children list */
52-                        xs *children = object_children(xs_dict_get(msg, "id"));
53-                        p = children;
54-
55-                        while (xs_list_iter(&p, &v)) {
56-                            xs *m2 = NULL;
57-
58-                            if (valid_status(timeline_get_by_md5(&snac1, v, &m2))) {
59-                                if (xs_is_null(xs_dict_get(m2, "name"))) {
60-                                    xs *st = mastoapi_status(&snac1, m2);
61-
62-                                    if (st)
63-                                        des = xs_list_append(des, st);
64-                                }
65-                            }
66-                        }
67+                        xs *childs = build_childrens(msg, &snac1);
68+                        if (xs_list_len(childs) > 0)
69+                            des = xs_list_cat(des, childs);
70 
71                         out = xs_dict_new();
72                         out = xs_dict_append(out, "ancestors",   anc);