summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data.c44
-rw-r--r--main.c2
-rw-r--r--snac.h1
3 files changed, 40 insertions, 7 deletions
diff --git a/data.c b/data.c
index 8da0888..3a28989 100644
--- a/data.c
+++ b/data.c
@@ -1938,10 +1938,33 @@ void enqueue_close_question(snac *user, const char *id, int end_secs)
1938void enqueue_request_replies(snac *user, const char *id) 1938void enqueue_request_replies(snac *user, const char *id)
1939/* enqueues a request for the replies of a message */ 1939/* enqueues a request for the replies of a message */
1940{ 1940{
1941 /* test first if this precise request is already in the queue */
1942 xs *queue = user_queue(user);
1943 xs_list *p = queue;
1944 xs_str *v;
1945
1946 while (xs_list_iter(&p, &v)) {
1947 xs *q_item = queue_get(v);
1948
1949 if (q_item != NULL) {
1950 const char *type = xs_dict_get(q_item, "type");
1951 const char *msg = xs_dict_get(q_item, "message");
1952
1953 if (type && msg && strcmp(type, "request_replies") == 0 && strcmp(msg, id) == 0) {
1954 /* don't requeue */
1955 snac_debug(user, 0, xs_fmt("enqueue_request_replies already here %s", id));
1956 return;
1957 }
1958 }
1959 }
1960
1961 /* not there; enqueue the request with a small delay */
1941 xs *qmsg = _new_qmsg("request_replies", id, 0); 1962 xs *qmsg = _new_qmsg("request_replies", id, 0);
1942 char *ntid = xs_dict_get(qmsg, "ntid"); 1963 xs *ntid = tid(10);
1943 xs *fn = xs_fmt("%s/queue/%s.json", user->basedir, ntid); 1964 xs *fn = xs_fmt("%s/queue/%s.json", user->basedir, ntid);
1944 1965
1966 qmsg = xs_dict_set(qmsg, "ntid", ntid);
1967
1945 qmsg = _enqueue_put(fn, qmsg); 1968 qmsg = _enqueue_put(fn, qmsg);
1946 1969
1947 snac_debug(user, 0, xs_fmt("enqueue_request_replies %s", id)); 1970 snac_debug(user, 0, xs_fmt("enqueue_request_replies %s", id));
@@ -2030,16 +2053,13 @@ xs_list *queue(void)
2030} 2053}
2031 2054
2032 2055
2033xs_dict *dequeue(const char *fn) 2056xs_dict *queue_get(const char *fn)
2034/* dequeues a message */ 2057/* gets a file from a queue */
2035{ 2058{
2036 FILE *f; 2059 FILE *f;
2037 xs_dict *obj = NULL; 2060 xs_dict *obj = NULL;
2038 2061
2039 if ((f = fopen(fn, "r")) != NULL) { 2062 if ((f = fopen(fn, "r")) != NULL) {
2040 /* delete right now */
2041 unlink(fn);
2042
2043 xs *j = xs_readall(f); 2063 xs *j = xs_readall(f);
2044 obj = xs_json_loads(j); 2064 obj = xs_json_loads(j);
2045 2065
@@ -2050,6 +2070,18 @@ xs_dict *dequeue(const char *fn)
2050} 2070}
2051 2071
2052 2072
2073xs_dict *dequeue(const char *fn)
2074/* dequeues a message */
2075{
2076 xs_dict *obj = queue_get(fn);
2077
2078 if (obj != NULL)
2079 unlink(fn);
2080
2081 return obj;
2082}
2083
2084
2053/** the purge **/ 2085/** the purge **/
2054 2086
2055static int _purge_file(const char *fn, time_t mt) 2087static int _purge_file(const char *fn, time_t mt)
diff --git a/main.c b/main.c
index e8309c4..e2de58e 100644
--- a/main.c
+++ b/main.c
@@ -279,8 +279,8 @@ int main(int argc, char *argv[])
279 status = activitypub_request(&snac, url, &data); 279 status = activitypub_request(&snac, url, &data);
280 280
281 printf("status: %d\n", status); 281 printf("status: %d\n", status);
282 if (valid_status(status)) {
283 282
283 if (data != NULL) {
284 xs *j = xs_json_dumps_pp(data, 4); 284 xs *j = xs_json_dumps_pp(data, 4);
285 printf("%s\n", j); 285 printf("%s\n", j);
286 } 286 }
diff --git a/snac.h b/snac.h
index f3ed48c..adbd6c9 100644
--- a/snac.h
+++ b/snac.h
@@ -170,6 +170,7 @@ int was_question_voted(snac *user, const char *id);
170 170
171xs_list *user_queue(snac *snac); 171xs_list *user_queue(snac *snac);
172xs_list *queue(void); 172xs_list *queue(void);
173xs_dict *queue_get(const char *fn);
173xs_dict *dequeue(const char *fn); 174xs_dict *dequeue(const char *fn);
174 175
175void purge(snac *snac); 176void purge(snac *snac);