summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar default2023-06-07 12:04:59 +0200
committerGravatar default2023-06-07 12:04:59 +0200
commitecde1c219e583d45e5ef46dcdd82c24b888fef1b (patch)
treeef3861be55944b489151d045efaec61ae4c41713
parentChanged timeline_request_replies() to receive an id and not an object. (diff)
downloadsnac2-ecde1c219e583d45e5ef46dcdd82c24b888fef1b.tar.gz
snac2-ecde1c219e583d45e5ef46dcdd82c24b888fef1b.tar.xz
snac2-ecde1c219e583d45e5ef46dcdd82c24b888fef1b.zip
New function enqueue_request_replies().
This way, the (potentially expensive and slow) call to timeline_request_replies() is detached from actions like replying a message from the web ui.
-rw-r--r--activitypub.c13
-rw-r--r--data.c13
-rw-r--r--snac.h2
3 files changed, 24 insertions, 4 deletions
diff --git a/activitypub.c b/activitypub.c
index f9e7077..10e0e64 100644
--- a/activitypub.c
+++ b/activitypub.c
@@ -143,8 +143,6 @@ int actor_request(snac *snac, const char *actor, xs_dict **data)
143} 143}
144 144
145 145
146void timeline_request_replies(snac *user, const char *id);
147
148int timeline_request(snac *snac, char **id, xs_str **wrk) 146int timeline_request(snac *snac, char **id, xs_str **wrk)
149/* ensures that an entry and its ancestors are in the timeline */ 147/* ensures that an entry and its ancestors are in the timeline */
150{ 148{
@@ -191,7 +189,7 @@ int timeline_request(snac *snac, char **id, xs_str **wrk)
191 } 189 }
192 } 190 }
193 191
194 timeline_request_replies(snac, *id); 192 enqueue_request_replies(snac, *id);
195 } 193 }
196 194
197 return status; 195 return status;
@@ -1679,7 +1677,14 @@ void process_user_queue_item(snac *snac, xs_dict *q_item)
1679 update_question(snac, id); 1677 update_question(snac, id);
1680 } 1678 }
1681 else 1679 else
1682 snac_log(snac, xs_fmt("unexpected q_item type '%s'", type)); 1680 if (strcmp(type, "request_replies") == 0) {
1681 const char *id = xs_dict_get(q_item, "message");
1682
1683 if (!xs_is_null(id))
1684 timeline_request_replies(snac, id);
1685 }
1686 else
1687 snac_log(snac, xs_fmt("unexpected user q_item type '%s'", type));
1683} 1688}
1684 1689
1685 1690
diff --git a/data.c b/data.c
index 27f62a9..8da0888 100644
--- a/data.c
+++ b/data.c
@@ -1935,6 +1935,19 @@ void enqueue_close_question(snac *user, const char *id, int end_secs)
1935} 1935}
1936 1936
1937 1937
1938void enqueue_request_replies(snac *user, const char *id)
1939/* enqueues a request for the replies of a message */
1940{
1941 xs *qmsg = _new_qmsg("request_replies", id, 0);
1942 char *ntid = xs_dict_get(qmsg, "ntid");
1943 xs *fn = xs_fmt("%s/queue/%s.json", user->basedir, ntid);
1944
1945 qmsg = _enqueue_put(fn, qmsg);
1946
1947 snac_debug(user, 0, xs_fmt("enqueue_request_replies %s", id));
1948}
1949
1950
1938int was_question_voted(snac *user, const char *id) 1951int was_question_voted(snac *user, const char *id)
1939/* returns true if the user voted in this poll */ 1952/* returns true if the user voted in this poll */
1940{ 1953{
diff --git a/snac.h b/snac.h
index ef2c3ac..f3ed48c 100644
--- a/snac.h
+++ b/snac.h
@@ -165,6 +165,7 @@ void enqueue_email(xs_str *msg, int retries);
165void enqueue_telegram(const xs_str *msg, const char *bot, const char *chat_id); 165void enqueue_telegram(const xs_str *msg, const char *bot, const char *chat_id);
166void enqueue_message(snac *snac, char *msg); 166void enqueue_message(snac *snac, char *msg);
167void enqueue_close_question(snac *user, const char *id, int end_secs); 167void enqueue_close_question(snac *user, const char *id, int end_secs);
168void enqueue_request_replies(snac *user, const char *id);
168int was_question_voted(snac *user, const char *id); 169int was_question_voted(snac *user, const char *id);
169 170
170xs_list *user_queue(snac *snac); 171xs_list *user_queue(snac *snac);
@@ -213,6 +214,7 @@ xs_dict *msg_question(snac *user, const char *content, xs_list *attach,
213 214
214int activitypub_request(snac *snac, const char *url, xs_dict **data); 215int activitypub_request(snac *snac, const char *url, xs_dict **data);
215int actor_request(snac *snac, const char *actor, xs_dict **data); 216int actor_request(snac *snac, const char *actor, xs_dict **data);
217void timeline_request_replies(snac *user, const char *id);
216int send_to_inbox_raw(const char *keyid, const char *seckey, 218int send_to_inbox_raw(const char *keyid, const char *seckey,
217 const xs_str *inbox, const xs_dict *msg, 219 const xs_str *inbox, const xs_dict *msg,
218 xs_val **payload, int *p_size, int timeout); 220 xs_val **payload, int *p_size, int timeout);