diff options
-rw-r--r-- | data.c | 31 | ||||
-rw-r--r-- | html.c | 29 | ||||
-rw-r--r-- | snac.h | 1 |
3 files changed, 61 insertions, 0 deletions
@@ -914,6 +914,37 @@ int history_del(snac *snac, char *id) } +d_char *history_list(snac *snac) +{ + d_char *list; + xs *spec; + glob_t globbuf; + + list = xs_list_new(); + spec = xs_fmt("%s/history/" "*.html", snac->basedir); + + if (glob(spec, 0, NULL, &globbuf) == 0) { + int n; + char *fn; + + for (n = 0; (fn = globbuf.gl_pathv[n]) != NULL; n++) { + char *p; + + if ((p = strrchr(fn, '/')) != NULL) { + *p++ = '\0'; + + if (*p != '_') + list = xs_list_append(list, p); + } + } + } + + globfree(&globbuf); + + return list; +} + + void enqueue_input(snac *snac, char *msg, char *req, int retries) /* enqueues an input message */ { @@ -483,6 +483,10 @@ d_char *html_entry(snac *snac, d_char *os, char *msg, xs_set *seen, int local, i xs *actor_o = NULL; char *actor; + /* do not show non-public messages in the public timeline */ + if (local && !is_msg_public(snac, msg)) + return os; + /* return if already seen */ if (xs_set_add(seen, id) == 0) return os; @@ -720,6 +724,31 @@ d_char *html_timeline(snac *snac, char *list, int local) s = xs_str_cat(s, "</div>\n"); + if (local) { + xs *s1 = xs_fmt( + "<div class=\"snac-history\">\n" + "<p class=\"snac-history-title\">%s</p><ul>\n", + L("History") + ); + + s = xs_str_cat(s, s1); + + xs *list = history_list(snac); + char *p, *v; + + p = list; + while (xs_list_iter(&p, &v)) { + xs *fn = xs_replace(v, ".html", ""); + xs *s1 = xs_fmt( + "<li><a href=\"%s/h/%s\">%s</li>\n", + snac->actor, v, fn); + + s = xs_str_cat(s, s1); + } + + s = xs_str_cat(s, "</ul></div>\n"); + } + s = html_user_footer(snac, s); { @@ -86,6 +86,7 @@ double history_mtime(snac *snac, char *id); void history_add(snac *snac, char *id, char *content, int size); d_char *history_get(snac *snac, char *id); int history_del(snac *snac, char *id); +d_char *history_list(snac *snac); void enqueue_input(snac *snac, char *msg, char *req, int retries); void enqueue_output(snac *snac, char *msg, char *actor, int retries); |