commit 1766d6b

default  ·  2025-01-27 19:20:40 +0000 UTC
parent 82bcc4b
Added a 'No more unseen posts' mark.
3 files changed,  +36, -0
M data.c
M html.c
M snac.h
M data.c
+8, -0
 1@@ -1528,6 +1528,14 @@ xs_list *timeline_list(snac *snac, const char *idx_name, int skip, int show, int
 2 }
 3 
 4 
 5+void timeline_add_mark(snac *user)
 6+/* adds an "already seen" mark to the private timeline */
 7+{
 8+    xs *fn = xs_fmt("%s/private.idx", user->basedir);
 9+    index_add_md5(fn, MD5_ALREADY_SEEN_MARK);
10+}
11+
12+
13 xs_str *instance_index_fn(void)
14 {
15     return xs_fmt("%s/public.idx", srv_basedir);
M html.c
+24, -0
 1@@ -2648,10 +2648,31 @@ xs_str *html_timeline(snac *user, const xs_list *list, int read_only,
 2     xs_html_add(body,
 3         posts);
 4 
 5+    int mark_shown = 0;
 6+
 7     while (xs_list_iter(&p, &v)) {
 8         xs *msg = NULL;
 9         int status;
10 
11+        /* "already seen" mark? */
12+        if (strcmp(v, MD5_ALREADY_SEEN_MARK) == 0) {
13+            if (skip == 0 && !mark_shown) {
14+                xs *s = xs_fmt("%s/admin#top", user->actor);
15+
16+                xs_html_add(posts,
17+                    xs_html_text(L("No more unseen posts")),
18+                    xs_html_text(" - "),
19+                    xs_html_tag("a",
20+                        xs_html_attr("href",  s),
21+                        xs_html_text(L("Back to top"))),
22+                    xs_html_sctag("hr", NULL));
23+            }
24+
25+            mark_shown = 1;
26+
27+            continue;
28+        }
29+
30         if (utl && user && !is_pinned_by_md5(user, v))
31             status = timeline_get_by_md5(user, v, &msg);
32         else
33@@ -3473,6 +3494,7 @@ int html_get_handler(const xs_dict *req, const char *q_path,
34                 }
35             }
36             else {
37+                /** the private timeline **/
38                 double t = history_mtime(&snac, "timeline.html_");
39 
40                 /* if enabled by admin, return a cached page if its timestamp is:
41@@ -3492,6 +3514,8 @@ int html_get_handler(const xs_dict *req, const char *q_path,
42 
43                     xs *list = timeline_list(&snac, "private", skip, show, &more);
44 
45+                    timeline_add_mark(&snac);
46+
47                     *body = html_timeline(&snac, list, 0, skip, show,
48                             more, NULL, "/admin", 1, error);
49 
M snac.h
+4, -0
 1@@ -22,6 +22,8 @@
 2 
 3 #define MD5_HEX_SIZE 33
 4 
 5+#define MD5_ALREADY_SEEN_MARK "00000000000000000000000000000000"
 6+
 7 extern double disk_layout;
 8 extern xs_str *srv_basedir;
 9 extern xs_dict *srv_config;
10@@ -163,6 +165,8 @@ int timeline_add(snac *snac, const char *id, const xs_dict *o_msg);
11 int timeline_admire(snac *snac, const char *id, const char *admirer, int like);
12 
13 xs_list *timeline_top_level(snac *snac, const xs_list *list);
14+void timeline_add_mark(snac *user);
15+
16 xs_list *local_list(snac *snac, int max);
17 xs_str *instance_index_fn(void);
18 xs_list *timeline_instance_list(int skip, int show);