commit 1766d6bf92eb433841c03ccb096c636a4c5dc968
parent 82bcc4b465f73a5d1f2eebcf3813452bc1c37fbd
Author: default <nobody@localhost>
Date: Mon, 27 Jan 2025 20:20:40 +0100
Added a 'No more unseen posts' mark.
Diffstat:
3 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/data.c b/data.c
@@ -1528,6 +1528,14 @@ xs_list *timeline_list(snac *snac, const char *idx_name, int skip, int show, int
}
+void timeline_add_mark(snac *user)
+/* adds an "already seen" mark to the private timeline */
+{
+ xs *fn = xs_fmt("%s/private.idx", user->basedir);
+ index_add_md5(fn, MD5_ALREADY_SEEN_MARK);
+}
+
+
xs_str *instance_index_fn(void)
{
return xs_fmt("%s/public.idx", srv_basedir);
diff --git a/html.c b/html.c
@@ -2648,10 +2648,31 @@ xs_str *html_timeline(snac *user, const xs_list *list, int read_only,
xs_html_add(body,
posts);
+ int mark_shown = 0;
+
while (xs_list_iter(&p, &v)) {
xs *msg = NULL;
int status;
+ /* "already seen" mark? */
+ if (strcmp(v, MD5_ALREADY_SEEN_MARK) == 0) {
+ if (skip == 0 && !mark_shown) {
+ xs *s = xs_fmt("%s/admin#top", user->actor);
+
+ xs_html_add(posts,
+ xs_html_text(L("No more unseen posts")),
+ xs_html_text(" - "),
+ xs_html_tag("a",
+ xs_html_attr("href", s),
+ xs_html_text(L("Back to top"))),
+ xs_html_sctag("hr", NULL));
+ }
+
+ mark_shown = 1;
+
+ continue;
+ }
+
if (utl && user && !is_pinned_by_md5(user, v))
status = timeline_get_by_md5(user, v, &msg);
else
@@ -3473,6 +3494,7 @@ int html_get_handler(const xs_dict *req, const char *q_path,
}
}
else {
+ /** the private timeline **/
double t = history_mtime(&snac, "timeline.html_");
/* if enabled by admin, return a cached page if its timestamp is:
@@ -3492,6 +3514,8 @@ int html_get_handler(const xs_dict *req, const char *q_path,
xs *list = timeline_list(&snac, "private", skip, show, &more);
+ timeline_add_mark(&snac);
+
*body = html_timeline(&snac, list, 0, skip, show,
more, NULL, "/admin", 1, error);
diff --git a/snac.h b/snac.h
@@ -22,6 +22,8 @@
#define MD5_HEX_SIZE 33
+#define MD5_ALREADY_SEEN_MARK "00000000000000000000000000000000"
+
extern double disk_layout;
extern xs_str *srv_basedir;
extern xs_dict *srv_config;
@@ -163,6 +165,8 @@ int timeline_add(snac *snac, const char *id, const xs_dict *o_msg);
int timeline_admire(snac *snac, const char *id, const char *admirer, int like);
xs_list *timeline_top_level(snac *snac, const xs_list *list);
+void timeline_add_mark(snac *user);
+
xs_list *local_list(snac *snac, int max);
xs_str *instance_index_fn(void);
xs_list *timeline_instance_list(int skip, int show);