From 32661d2be7bb718522c123e401ef35fa0307c1c0 Mon Sep 17 00:00:00 2001 From: default Date: Wed, 28 Sep 2022 04:48:23 +0200 Subject: [PATCH] The outbox returns now some entries. --- activitypub.c | 16 +++++++++++++++- data.c | 23 +++++++++++++++++++---- snac.h | 4 +++- 3 files changed, 37 insertions(+), 6 deletions(-) diff --git a/activitypub.c b/activitypub.c index 5ab7a96..8a38257 100644 --- a/activitypub.c +++ b/activitypub.c @@ -761,10 +761,24 @@ int activitypub_get_handler(d_char *req, char *q_path, else if (strcmp(p_path, "outbox") == 0) { xs *id = xs_fmt("%s/outbox", snac.actor); + xs *elems = local_list(&snac, 40); + xs *list = xs_list_new(); msg = msg_collection(&snac, id); + char *p, *v; + + p = elems; + while (xs_list_iter(&p, &v)) { + xs *i = timeline_get(&snac, v); + char *type = xs_dict_get(i, "type"); + char *id = xs_dict_get(i, "id"); + + if (type && id && strcmp(type, "Note") == 0 && xs_startswith(id, snac.actor)) + list = xs_list_append(list, i); + } /* replace the 'orderedItems' with the latest posts */ - /* ... */ + msg = xs_dict_set(msg, "orderedItems", list); + msg = xs_dict_set(msg, "totalItems", xs_number_new(xs_list_len(list))); } else if (strcmp(p_path, "followers") == 0 || strcmp(p_path, "following") == 0) { diff --git a/data.c b/data.c index 97cf8b4..6ea1bae 100644 --- a/data.c +++ b/data.c @@ -357,16 +357,19 @@ d_char *timeline_get(snac *snac, char *fn) } -d_char *timeline_list(snac *snac) +d_char *_timeline_list(snac *snac, char *directory, int max) /* returns a list of the timeline filenames */ { d_char *list; - xs *spec = xs_fmt("%s/timeline/" "*.json", snac->basedir); + xs *spec = xs_fmt("%s/%s/" "*.json", snac->basedir, directory); glob_t globbuf; - int max; + int c_max; /* maximum number of items in the timeline */ - max = xs_number_get(xs_dict_get(srv_config, "max_timeline_entries")); + c_max = xs_number_get(xs_dict_get(srv_config, "max_timeline_entries")); + + if (max > c_max) + max = c_max; list = xs_list_new(); @@ -390,6 +393,18 @@ d_char *timeline_list(snac *snac) } +d_char *timeline_list(snac *snac, int max) +{ + return _timeline_list(snac, "timeline", max); +} + + +d_char *local_list(snac *snac, int max) +{ + return _timeline_list(snac, "local", max); +} + + d_char *_timeline_new_fn(snac *snac, char *id) /* creates a new filename */ { diff --git a/snac.h b/snac.h index 2b76939..209acb2 100644 --- a/snac.h +++ b/snac.h @@ -59,10 +59,12 @@ int timeline_here(snac *snac, char *id); d_char *timeline_find(snac *snac, char *id); void timeline_del(snac *snac, char *id); d_char *timeline_get(snac *snac, char *fn); -d_char *timeline_list(snac *snac); +d_char *timeline_list(snac *snac, int max); int timeline_add(snac *snac, char *id, char *o_msg, char *parent, char *referrer); void timeline_admire(snac *snac, char *id, char *admirer, int like); +d_char *local_list(snac *snac, int max); + int following_add(snac *snac, char *actor, char *msg); int following_del(snac *snac, char *actor); int following_check(snac *snac, char *actor);