summaryrefslogtreecommitdiff
path: root/data.c
diff options
context:
space:
mode:
authorGravatar default2023-06-07 13:09:19 +0200
committerGravatar default2023-06-07 13:09:19 +0200
commitb77ef13d2cb9894a7b7814d47405b2c34b9f70f9 (patch)
treeee7d4aaf091ac22fa99b455336003998e6dbb149 /data.c
parentNew function enqueue_request_replies(). (diff)
downloadsnac2-b77ef13d2cb9894a7b7814d47405b2c34b9f70f9.tar.gz
snac2-b77ef13d2cb9894a7b7814d47405b2c34b9f70f9.tar.xz
snac2-b77ef13d2cb9894a7b7814d47405b2c34b9f70f9.zip
Don't enqueue a request_replies message if it's already there.
Diffstat (limited to 'data.c')
-rw-r--r--data.c44
1 files changed, 38 insertions, 6 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)