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