commit c639553

default  ·  2023-02-02 04:07:20 +0000 UTC
parent 108ed07
New function queue() (the global queue).
2 files changed,  +64, -4
M data.c
+29, -2
 1@@ -1066,7 +1066,7 @@ int send_email(char *msg)
 2 
 3 
 4 void process_user_queue_item(snac *snac, xs_dict *q_item)
 5-/* processes an item from the queue */
 6+/* processes an item from the user queue */
 7 {
 8     char *type;
 9     int queue_retry_max = xs_number_get(xs_dict_get(srv_config, "queue_retry_max"));
10@@ -1172,7 +1172,7 @@ void process_user_queue(snac *snac)
11         xs *q_item = dequeue(fn);
12 
13         if (q_item == NULL) {
14-            snac_log(snac, xs_fmt("process_queue q_item error"));
15+            snac_log(snac, xs_fmt("process_user_queue q_item error"));
16             continue;
17         }
18 
19@@ -1181,6 +1181,33 @@ void process_user_queue(snac *snac)
20 }
21 
22 
23+void process_queue_item(xs_dict *q_item)
24+/* processes an item from the global queue */
25+{
26+}
27+
28+
29+void process_queue(void)
30+/* processes the global queue */
31+{
32+    xs *list = queue();
33+
34+    xs_list *p = list;
35+    xs_str *fn;
36+
37+    while (xs_list_iter(&p, &fn)) {
38+        xs *q_item = dequeue(fn);
39+
40+        if (q_item == NULL) {
41+            srv_log(xs_fmt("process_queue q_item error"));
42+            continue;
43+        }
44+
45+        process_queue_item(q_item);
46+    }
47+}
48+
49+
50 /** HTTP handlers */
51 
52 int activitypub_get_handler(d_char *req, char *q_path,
M data.c
+35, -2
 1@@ -86,6 +86,10 @@ int srv_open(char *basedir, int auto_upgrade)
 2     if (error != NULL)
 3         srv_log(error);
 4 
 5+    /* create the queue/ subdir, just in case */
 6+    xs *qdir = xs_fmt("%s/queue", srv_basedir);
 7+    mkdir(qdir, 0755);
 8+
 9 #ifdef __OpenBSD__
10     char *v = xs_dict_get(srv_config, "disable_openbsd_security");
11 
12@@ -1429,10 +1433,39 @@ xs_list *user_queue(snac *snac)
13         time_t t2 = atol(bn + 1);
14 
15         if (t2 > t)
16-            snac_debug(snac, 2, xs_fmt("queue not yet time for %s [%ld]", v, t));
17+            snac_debug(snac, 2, xs_fmt("user_queue not yet time for %s [%ld]", v, t));
18+        else {
19+            list = xs_list_append(list, v);
20+            snac_debug(snac, 2, xs_fmt("user_queue ready for %s", v));
21+        }
22+    }
23+
24+    return list;
25+}
26+
27+
28+xs_list *queue(void)
29+/* returns a list with filenames that can be dequeued */
30+{
31+    xs *spec      = xs_fmt("%s/queue/" "*.json", srv_basedir);
32+    xs_list *list = xs_list_new();
33+    time_t t      = time(NULL);
34+    xs_list *p;
35+    xs_val *v;
36+
37+    xs *fns = xs_glob(spec, 0, 0);
38+
39+    p = fns;
40+    while (xs_list_iter(&p, &v)) {
41+        /* get the retry time from the basename */
42+        char *bn  = strrchr(v, '/');
43+        time_t t2 = atol(bn + 1);
44+
45+        if (t2 > t)
46+            srv_debug(2, xs_fmt("queue not yet time for %s [%ld]", v, t));
47         else {
48             list = xs_list_append(list, v);
49-            snac_debug(snac, 2, xs_fmt("queue ready for %s", v));
50+            srv_debug(2, xs_fmt("queue ready for %s", v));
51         }
52     }
53