Browse Source

Added a 'No more unseen posts' mark.

default 2 months ago
parent
commit
1766d6bf92
3 changed files with 36 additions and 0 deletions
  1. 8 0
      data.c
  2. 24 0
      html.c
  3. 4 0
      snac.h

+ 8 - 0
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);

+ 24 - 0
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);
 

+ 4 - 0
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);