Просмотр исходного кода

Added a maximum results argument to content_search().

default 2 лет назад
Родитель
Сommit
cccc5454c2
4 измененных файлов с 12 добавлено и 7 удалено
  1. 8 3
      data.c
  2. 1 1
      main.c
  3. 2 2
      mastoapi.c
  4. 1 1
      snac.h

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

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

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

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