summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--activitypub.c26
-rw-r--r--data.c11
-rw-r--r--snac.h2
3 files changed, 22 insertions, 17 deletions
diff --git a/activitypub.c b/activitypub.c
index 4a04000..dee127d 100644
--- a/activitypub.c
+++ b/activitypub.c
@@ -356,23 +356,27 @@ int timeline_request(snac *snac, char **id, xs_str **wrk, int level)
356 } 356 }
357 357
358 if (xs_match(type, POSTLIKE_OBJECT_TYPE)) { 358 if (xs_match(type, POSTLIKE_OBJECT_TYPE)) {
359 const char *actor = get_atto(object);
360
361 if (content_check("filter_reject.txt", object)) 359 if (content_check("filter_reject.txt", object))
362 snac_log(snac, xs_fmt("timeline_request rejected by content %s", nid)); 360 snac_log(snac, xs_fmt("timeline_request rejected by content %s", nid));
363 else { 361 else {
364 /* request (and drop) the actor for this entry */ 362 const char *actor = get_atto(object);
365 if (!xs_is_null(actor)) 363
366 actor_request(snac, actor, NULL); 364 if (!xs_is_null(actor)) {
365 /* request (and drop) the actor for this entry */
366 if (!valid_status(actor_request(snac, actor, NULL))) {
367 /* failed? retry later */
368 enqueue_actor_refresh(snac, actor, 60);
369 }
367 370
368 /* does it have an ancestor? */ 371 /* does it have an ancestor? */
369 char *in_reply_to = xs_dict_get(object, "inReplyTo"); 372 char *in_reply_to = xs_dict_get(object, "inReplyTo");
370 373
371 /* store */ 374 /* store */
372 timeline_add(snac, nid, object); 375 timeline_add(snac, nid, object);
373 376
374 /* recurse! */ 377 /* recurse! */
375 timeline_request(snac, &in_reply_to, NULL, level + 1); 378 timeline_request(snac, &in_reply_to, NULL, level + 1);
379 }
376 } 380 }
377 } 381 }
378 } 382 }
diff --git a/data.c b/data.c
index 108354c..706e8e1 100644
--- a/data.c
+++ b/data.c
@@ -1632,7 +1632,7 @@ int actor_get_refresh(snac *user, const char *actor, xs_dict **data)
1632 int status = actor_get(actor, data); 1632 int status = actor_get(actor, data);
1633 1633
1634 if (status == 205 && user && !xs_startswith(actor, srv_baseurl)) 1634 if (status == 205 && user && !xs_startswith(actor, srv_baseurl))
1635 enqueue_actor_refresh(user, actor); 1635 enqueue_actor_refresh(user, actor, 0);
1636 1636
1637 return status; 1637 return status;
1638} 1638}
@@ -2830,13 +2830,14 @@ void enqueue_verify_links(snac *user)
2830} 2830}
2831 2831
2832 2832
2833void enqueue_actor_refresh(snac *user, const char *actor) 2833void enqueue_actor_refresh(snac *user, const char *actor, int forward_secs)
2834/* enqueues an actor refresh */ 2834/* enqueues an actor refresh */
2835{ 2835{
2836 xs *qmsg = _new_qmsg("actor_refresh", "", 0); 2836 xs *qmsg = _new_qmsg("actor_refresh", "", 0);
2837 char *ntid = xs_dict_get(qmsg, "ntid"); 2837 xs *ntid = tid(forward_secs);
2838 xs *fn = xs_fmt("%s/queue/%s.json", user->basedir, ntid); 2838 xs *fn = xs_fmt("%s/queue/%s.json", user->basedir, ntid);
2839 2839
2840 qmsg = xs_dict_set(qmsg, "ntid", ntid);
2840 qmsg = xs_dict_append(qmsg, "actor", actor); 2841 qmsg = xs_dict_append(qmsg, "actor", actor);
2841 2842
2842 qmsg = _enqueue_put(fn, qmsg); 2843 qmsg = _enqueue_put(fn, qmsg);
diff --git a/snac.h b/snac.h
index 239f27a..91033cf 100644
--- a/snac.h
+++ b/snac.h
@@ -234,7 +234,7 @@ void enqueue_message(snac *snac, const xs_dict *msg);
234void enqueue_close_question(snac *user, const char *id, int end_secs); 234void enqueue_close_question(snac *user, const char *id, int end_secs);
235void enqueue_object_request(snac *user, const char *id, int forward_secs); 235void enqueue_object_request(snac *user, const char *id, int forward_secs);
236void enqueue_verify_links(snac *user); 236void enqueue_verify_links(snac *user);
237void enqueue_actor_refresh(snac *user, const char *actor); 237void enqueue_actor_refresh(snac *user, const char *actor, int forward_secs);
238void enqueue_request_replies(snac *user, const char *id); 238void enqueue_request_replies(snac *user, const char *id);
239int was_question_voted(snac *user, const char *id); 239int was_question_voted(snac *user, const char *id);
240 240