summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar default2024-05-09 09:31:10 +0200
committerGravatar default2024-05-09 09:31:10 +0200
commitcccc5454c259d0d4ca600b3e1165979c352be54f (patch)
tree1305ccbed7fab0d5112d7e211dc47f951aac76e4
parentmastoapi: some search by content tweaks. (diff)
downloadpenes-snac2-cccc5454c259d0d4ca600b3e1165979c352be54f.tar.gz
penes-snac2-cccc5454c259d0d4ca600b3e1165979c352be54f.tar.xz
penes-snac2-cccc5454c259d0d4ca600b3e1165979c352be54f.zip
Added a maximum results argument to content_search().
-rw-r--r--data.c11
-rw-r--r--main.c2
-rw-r--r--mastoapi.c4
-rw-r--r--snac.h2
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)
2491 2491
2492/** searches **/ 2492/** searches **/
2493 2493
2494xs_list *content_search(snac *user, const char *regex, int priv, int max_secs, int *timeout) 2494xs_list *content_search(snac *user, const char *regex, int priv, int max_secs, int max_res, int *timeout)
2495/* returns a list of posts which content matches the regex */ 2495/* returns a list of posts which content matches the regex */
2496{ 2496{
2497 if (regex == NULL || *regex == '\0')
2498 return xs_list_new();
2499
2497 xs_set seen; 2500 xs_set seen;
2498 2501
2499 xs_set_init(&seen); 2502 xs_set_init(&seen);
@@ -2517,7 +2520,7 @@ xs_list *content_search(snac *user, const char *regex, int priv, int max_secs, i
2517 xs_list_next(pub_tl, &pub_md5, &pub_c); 2520 xs_list_next(pub_tl, &pub_md5, &pub_c);
2518 xs_list_next(priv_tl, &priv_md5, &priv_c); 2521 xs_list_next(priv_tl, &priv_md5, &priv_c);
2519 2522
2520 for (;;) { 2523 while (max_res > 0) {
2521 char *md5 = NULL; 2524 char *md5 = NULL;
2522 enum { NONE, PUBLIC, PRIVATE } from = NONE; 2525 enum { NONE, PUBLIC, PRIVATE } from = NONE;
2523 2526
@@ -2587,8 +2590,10 @@ xs_list *content_search(snac *user, const char *regex, int priv, int max_secs, i
2587 /* apply regex */ 2590 /* apply regex */
2588 xs *l = xs_regex_select_n(c, regex, 1); 2591 xs *l = xs_regex_select_n(c, regex, 1);
2589 2592
2590 if (xs_list_len(l)) 2593 if (xs_list_len(l)) {
2591 xs_set_add(&seen, md5); 2594 xs_set_add(&seen, md5);
2595 max_res--;
2596 }
2592 } 2597 }
2593 2598
2594 return xs_set_result(&seen); 2599 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[])
379 int to; 379 int to;
380 380
381 /* 'url' contains the regex */ 381 /* 'url' contains the regex */
382 xs *r = content_search(&snac, url, 1, 10, &to); 382 xs *r = content_search(&snac, url, 1, 10, XS_ALL, &to);
383 383
384 int c = 0; 384 int c = 0;
385 char *v; 385 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,
2260 2260
2261 if (xs_is_null(type) || strcmp(type, "statuses") == 0) { 2261 if (xs_is_null(type) || strcmp(type, "statuses") == 0) {
2262 int to = 0; 2262 int to = 0;
2263 xs *tl = content_search(&snac1, q, 1, 0, &to); 2263 int cnt = 40;
2264 xs *tl = content_search(&snac1, q, 1, 0, cnt, &to);
2264 int c = 0; 2265 int c = 0;
2265 char *v; 2266 char *v;
2266 int cnt = 40;
2267 2267
2268 while (xs_list_next(tl, &v, &c) && --cnt) { 2268 while (xs_list_next(tl, &v, &c) && --cnt) {
2269 xs *post = NULL; 2269 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);
179xs_val *list_content(snac *user, const char *list_id, const char *actor_md5, int op); 179xs_val *list_content(snac *user, const char *list_id, const char *actor_md5, int op);
180void list_distribute(snac *user, const char *who, const xs_dict *post); 180void list_distribute(snac *user, const char *who, const xs_dict *post);
181 181
182xs_list *content_search(snac *user, const char *regex, int priv, int max_secs, int *timeout); 182xs_list *content_search(snac *user, const char *regex, int priv, int max_secs, int max_res, int *timeout);
183 183
184int actor_add(const char *actor, xs_dict *msg); 184int actor_add(const char *actor, xs_dict *msg);
185int actor_get(const char *actor, xs_dict **data); 185int actor_get(const char *actor, xs_dict **data);