commit cccc545

default  ·  2024-05-09 07:31:10 +0000 UTC
parent 8de93b9
Added a maximum results argument to content_search().
4 files changed,  +12, -7
M data.c
M main.c
M snac.h
M data.c
+8, -3
 1@@ -2491,9 +2491,12 @@ void notify_clear(snac *snac)
 2 
 3 /** searches **/
 4 
 5-xs_list *content_search(snac *user, const char *regex, int priv, int max_secs, int *timeout)
 6+xs_list *content_search(snac *user, const char *regex, int priv, int max_secs, int max_res, int *timeout)
 7 /* returns a list of posts which content matches the regex */
 8 {
 9+    if (regex == NULL || *regex == '\0')
10+        return xs_list_new();
11+
12     xs_set seen;
13 
14     xs_set_init(&seen);
15@@ -2517,7 +2520,7 @@ xs_list *content_search(snac *user, const char *regex, int priv, int max_secs, i
16     xs_list_next(pub_tl,  &pub_md5,  &pub_c);
17     xs_list_next(priv_tl, &priv_md5, &priv_c);
18 
19-    for (;;) {
20+    while (max_res > 0) {
21         char *md5 = NULL;
22         enum { NONE, PUBLIC, PRIVATE } from = NONE;
23 
24@@ -2587,8 +2590,10 @@ xs_list *content_search(snac *user, const char *regex, int priv, int max_secs, i
25         /* apply regex */
26         xs *l = xs_regex_select_n(c, regex, 1);
27 
28-        if (xs_list_len(l))
29+        if (xs_list_len(l)) {
30             xs_set_add(&seen, md5);
31+            max_res--;
32+        }
33     }
34 
35     return xs_set_result(&seen);
M main.c
+1, -1
1@@ -379,7 +379,7 @@ int main(int argc, char *argv[])
2         int to;
3 
4         /* 'url' contains the regex */
5-        xs *r = content_search(&snac, url, 1, 10, &to);
6+        xs *r = content_search(&snac, url, 1, 10, XS_ALL, &to);
7 
8         int c = 0;
9         char *v;
+2, -2
 1@@ -2260,10 +2260,10 @@ int mastoapi_get_handler(const xs_dict *req, const char *q_path,
 2 
 3                     if (xs_is_null(type) || strcmp(type, "statuses") == 0) {
 4                         int to = 0;
 5-                        xs *tl = content_search(&snac1, q, 1, 0, &to);
 6+                        int cnt = 40;
 7+                        xs *tl = content_search(&snac1, q, 1, 0, cnt, &to);
 8                         int c = 0;
 9                         char *v;
10-                        int cnt = 40;
11 
12                         while (xs_list_next(tl, &v, &c) && --cnt) {
13                             xs *post = NULL;
M snac.h
+1, -1
1@@ -179,7 +179,7 @@ xs_list *list_timeline(snac *user, const char *list, int skip, int show);
2 xs_val *list_content(snac *user, const char *list_id, const char *actor_md5, int op);
3 void list_distribute(snac *user, const char *who, const xs_dict *post);
4 
5-xs_list *content_search(snac *user, const char *regex, int priv, int max_secs, int *timeout);
6+xs_list *content_search(snac *user, const char *regex, int priv, int max_secs, int max_res, int *timeout);
7 
8 int actor_add(const char *actor, xs_dict *msg);
9 int actor_get(const char *actor, xs_dict **data);