Browse Source

Use xs_set in recipient_list() and inbox_list().

default 2 years ago
parent
commit
f209c3205d
3 changed files with 16 additions and 14 deletions
  1. 14 13
      activitypub.c
  2. 1 0
      xs_set.h
  3. 1 1
      xs_version.h

+ 14 - 13
activitypub.c

@@ -9,6 +9,7 @@
 #include "xs_openssl.h"
 #include "xs_regex.h"
 #include "xs_time.h"
+#include "xs_set.h"
 
 #include "snac.h"
 
@@ -169,11 +170,13 @@ int send_to_actor(snac *snac, char *actor, char *msg, d_char **payload, int *p_s
 d_char *recipient_list(snac *snac, char *msg, int expand_public)
 /* returns the list of recipients for a message */
 {
-    d_char *list = xs_list_new();
     char *to = xs_dict_get(msg, "to");
     char *cc = xs_dict_get(msg, "cc");
+    xs_set rcpts;
     int n;
 
+    xs_set_init(&rcpts);
+
     char *lists[] = { to, cc, NULL };
     for (n = 0; lists[n]; n++) {
         char *l = lists[n];
@@ -195,40 +198,38 @@ d_char *recipient_list(snac *snac, char *msg, int expand_public)
                 char *actor;
 
                 char *p = fwers;
-                while (xs_list_iter(&p, &actor)) {
-                    if (xs_list_in(list, actor) == -1)
-                        list = xs_list_append(list, actor);
-                }
+                while (xs_list_iter(&p, &actor))
+                    xs_set_add(&rcpts, actor);
             }
             else
-            if (xs_list_in(list, v) == -1)
-                list = xs_list_append(list, v);
+                xs_set_add(&rcpts, v);
         }
     }
 
-    return list;
+    return xs_set_result(&rcpts);
 }
 
 
 d_char *inbox_list(snac *snac, char *msg)
 /* returns the list of inboxes that are recipients of this message */
 {
-    d_char *list = xs_list_new();
-    xs *rcpts    = recipient_list(snac, msg, 1);
+    xs *rcpts = recipient_list(snac, msg, 1);
+    xs_set inboxes;
     char *p, *v;
 
+    xs_set_init(&inboxes);
+
     p = rcpts;
     while (xs_list_iter(&p, &v)) {
         xs *inbox;
 
         if ((inbox = get_actor_inbox(snac, v)) != NULL) {
             /* add the inbox if it's not already there */
-            if (xs_list_in(list, inbox) == -1)
-                list = xs_list_append(list, inbox);
+            xs_set_add(&inboxes, inbox);
         }
     }
 
-    return list;
+    return xs_set_result(&inboxes);
 }
 
 

+ 1 - 0
xs_set.h

@@ -12,6 +12,7 @@ typedef struct _xs_set {
 } xs_set;
 
 void xs_set_init(xs_set *s);
+d_char *xs_set_result(xs_set *s);
 void xs_set_free(xs_set *s);
 int xs_set_add(xs_set *s, const char *data);
 

+ 1 - 1
xs_version.h

@@ -1 +1 @@
-/* e9effd101e5ad45cc4209759ae25e4a6de9259e8 */
+/* c18371e1f1d3de0f872354f93024a736caebea4d */