From cccc5454c259d0d4ca600b3e1165979c352be54f Mon Sep 17 00:00:00 2001 From: default Date: Thu, 9 May 2024 09:31:10 +0200 Subject: [PATCH] Added a maximum results argument to content_search(). --- data.c | 11 ++++++++--- main.c | 2 +- mastoapi.c | 4 ++-- snac.h | 2 +- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/data.c b/data.c index 75149e2..78de21b 100644 --- a/data.c +++ b/data.c @@ -2491,9 +2491,12 @@ void notify_clear(snac *snac) /** searches **/ -xs_list *content_search(snac *user, const char *regex, int priv, int max_secs, int *timeout) +xs_list *content_search(snac *user, const char *regex, int priv, int max_secs, int max_res, int *timeout) /* returns a list of posts which content matches the regex */ { + if (regex == NULL || *regex == '\0') + return xs_list_new(); + xs_set seen; xs_set_init(&seen); @@ -2517,7 +2520,7 @@ xs_list *content_search(snac *user, const char *regex, int priv, int max_secs, i xs_list_next(pub_tl, &pub_md5, &pub_c); xs_list_next(priv_tl, &priv_md5, &priv_c); - for (;;) { + while (max_res > 0) { char *md5 = NULL; enum { NONE, PUBLIC, PRIVATE } from = NONE; @@ -2587,8 +2590,10 @@ xs_list *content_search(snac *user, const char *regex, int priv, int max_secs, i /* apply regex */ xs *l = xs_regex_select_n(c, regex, 1); - if (xs_list_len(l)) + if (xs_list_len(l)) { xs_set_add(&seen, md5); + max_res--; + } } return xs_set_result(&seen); diff --git a/main.c b/main.c index bd52b19..5e37340 100644 --- a/main.c +++ b/main.c @@ -379,7 +379,7 @@ int main(int argc, char *argv[]) int to; /* 'url' contains the regex */ - xs *r = content_search(&snac, url, 1, 10, &to); + xs *r = content_search(&snac, url, 1, 10, XS_ALL, &to); int c = 0; char *v; diff --git a/mastoapi.c b/mastoapi.c index 253021b..cbc965c 100644 --- a/mastoapi.c +++ b/mastoapi.c @@ -2260,10 +2260,10 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path, if (xs_is_null(type) || strcmp(type, "statuses") == 0) { int to = 0; - xs *tl = content_search(&snac1, q, 1, 0, &to); + int cnt = 40; + xs *tl = content_search(&snac1, q, 1, 0, cnt, &to); int c = 0; char *v; - int cnt = 40; while (xs_list_next(tl, &v, &c) && --cnt) { xs *post = NULL; diff --git a/snac.h b/snac.h index e04dc65..579d149 100644 --- a/snac.h +++ b/snac.h @@ -179,7 +179,7 @@ xs_list *list_timeline(snac *user, const char *list, int skip, int show); xs_val *list_content(snac *user, const char *list_id, const char *actor_md5, int op); void list_distribute(snac *user, const char *who, const xs_dict *post); -xs_list *content_search(snac *user, const char *regex, int priv, int max_secs, int *timeout); +xs_list *content_search(snac *user, const char *regex, int priv, int max_secs, int max_res, int *timeout); int actor_add(const char *actor, xs_dict *msg); int actor_get(const char *actor, xs_dict **data);