summaryrefslogtreecommitdiff
path: root/activitypub.c
diff options
context:
space:
mode:
Diffstat (limited to 'activitypub.c')
-rw-r--r--activitypub.c35
1 files changed, 24 insertions, 11 deletions
diff --git a/activitypub.c b/activitypub.c
index 091e4bf..2e11a82 100644
--- a/activitypub.c
+++ b/activitypub.c
@@ -194,18 +194,27 @@ d_char *msg_update(snac *snac, char *object)
194d_char *msg_admiration(snac *snac, char *object, char *type) 194d_char *msg_admiration(snac *snac, char *object, char *type)
195/* creates a Like or Announce message */ 195/* creates a Like or Announce message */
196{ 196{
197 xs *ntid = tid(0); 197 xs *a_msg = NULL;
198 xs *id = xs_fmt("%s/d/%d/%s", snac->actor, ntid, type); 198 d_char *msg = NULL;
199 d_char *msg = msg_base(snac, type, id, snac->actor, "");
200 xs *rcpts = xs_list_new();
201 199
202 /* call the object */ 200 /* call the object */
203 timeline_request(snac, object, snac->actor); 201 timeline_request(snac, object, snac->actor);
204 202
205 rcpts = xs_list_append(rcpts, public_address); 203 if ((a_msg = timeline_find(snac, object)) != NULL) {
204 xs *ntid = tid(0);
205 xs *id = xs_fmt("%s/d/%d/%s", snac->actor, ntid, type);
206 xs *rcpts = xs_list_new();
206 207
207 msg = xs_dict_append(msg, "to", rcpts); 208 msg = msg_base(snac, type, id, snac->actor, "");
208 msg = xs_dict_append(msg, "object", object); 209
210 rcpts = xs_list_append(rcpts, public_address);
211 rcpts = xs_list_append(rcpts, xs_dict_get(a_msg, "attributedTo"));
212
213 msg = xs_dict_append(msg, "to", rcpts);
214 msg = xs_dict_append(msg, "object", object);
215 }
216 else
217 snac_log(snac, xs_fmt("msg_admiration cannot retrieve object %s", object));
209 218
210 return msg; 219 return msg;
211} 220}
@@ -372,9 +381,11 @@ void process_queue(snac *snac)
372 char *actor = xs_dict_get(q_item, "actor"); 381 char *actor = xs_dict_get(q_item, "actor");
373 char *msg = xs_dict_get(q_item, "object"); 382 char *msg = xs_dict_get(q_item, "object");
374 int retries = xs_number_get(xs_dict_get(q_item, "retries")); 383 int retries = xs_number_get(xs_dict_get(q_item, "retries"));
384 xs *payload = NULL;
385 int p_size = 0;
375 386
376 /* deliver */ 387 /* deliver */
377 status = send_to_actor(snac, actor, msg, NULL, 0); 388 status = send_to_actor(snac, actor, msg, &payload, &p_size);
378 389
379 if (!valid_status(status)) { 390 if (!valid_status(status)) {
380 /* error sending; reenqueue? */ 391 /* error sending; reenqueue? */
@@ -420,12 +431,14 @@ d_char *recipient_list(snac *snac, char *msg, int expand_public)
420 431
421 char *p = fwers; 432 char *p = fwers;
422 while (xs_list_iter(&p, &fw)) { 433 while (xs_list_iter(&p, &fw)) {
423 if (!xs_list_in(list, fw)) 434 char *actor = xs_dict_get(fw, "actor");
424 list = xs_list_append(list, fw); 435
436 if (xs_list_in(list, actor) == -1)
437 list = xs_list_append(list, actor);
425 } 438 }
426 } 439 }
427 else 440 else
428 if (!xs_list_in(list, v)) 441 if (xs_list_in(list, v) == -1)
429 list = xs_list_append(list, v); 442 list = xs_list_append(list, v);
430 } 443 }
431 } 444 }