浏览代码

Implemented local timeline cache.

default 3 年之前
父节点
当前提交
20fd70c011
共有 2 个文件被更改,包括 20 次插入6 次删除
  1. 2 2
      TODO.md
  2. 18 4
      html.c

+ 2 - 2
TODO.md

@@ -2,8 +2,6 @@
 
 ## Open
 
-Implement the user-setup web interface.
-
 Implement the citations as @user@host in the reply textareas.
 
 Implement the purge.
@@ -143,3 +141,5 @@ Implement an input queue (2022-10-01T20:27:52+0200).
 Refactor HTML rendering because it's a mess and write build_timeline(), that generates a big structure with everything to show in a timeline, to be passed to the HTML renderer (2022-10-01T20:27:52+0200).
 
 Implement the helper thread (2022-10-01T20:56:46+0200).
+
+Implement the user-setup web interface (2022-10-02T17:45:03+0200).

+ 18 - 4
html.c

@@ -8,6 +8,7 @@
 #include "xs_regex.h"
 #include "xs_set.h"
 #include "xs_openssl.h"
+#include "xs_time.h"
 
 #include "snac.h"
 
@@ -753,11 +754,24 @@ int html_get_handler(d_char *req, char *q_path, char **body, int *b_size, char *
 
     if (p_path == NULL) {
         /* public timeline */
-        xs *list = local_list(&snac, 0xfffffff);
+        xs *h = xs_str_localtime(0, "%Y-%m.html");
 
-        *body   = html_timeline(&snac, list, 1);
-        *b_size = strlen(*body);
-        status  = 200;
+        if (history_mtime(&snac, h) > timeline_mtime(&snac)) {
+            snac_debug(&snac, 1, xs_fmt("serving cached local timeline"));
+
+            *body   = history_get(&snac, h);
+            *b_size = strlen(*body);
+            status  = 200;
+        }
+        else {
+            xs *list = local_list(&snac, 0xfffffff);
+
+            *body   = html_timeline(&snac, list, 1);
+            *b_size = strlen(*body);
+            status  = 200;
+
+            history_add(&snac, h, *body, *b_size);
+        }
     }
     else
     if (strcmp(p_path, "admin") == 0) {