diff --git a/TODO.md b/TODO.md index acce364..6ef1ee0 100644 --- a/TODO.md +++ b/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). diff --git a/html.c b/html.c index 2a0b2a8..ad867af 100644 --- a/html.c +++ b/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) {