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);