commit a050be9

default  ·  2023-04-14 11:05:36 +0000 UTC
parent cb616d6
Don't show the full tree in notifications.
2 files changed,  +60, -45
M html.c
+3, -0
 1@@ -937,6 +937,9 @@ void notify(snac *snac, xs_str *type, xs_str *utype, xs_str *actor, xs_dict *msg
 2         enqueue_telegram(body, bot, chat_id);
 3 
 4     /* finally, store it in the notification folder */
 5+    if (strcmp(type, "Follow") == 0)
 6+        objid = xs_dict_get(msg, "id");
 7+
 8     notify_add(snac, type, utype, actor, objid);
 9 }
10 
M html.c
+57, -45
  1@@ -679,7 +679,8 @@ d_char *html_entry_controls(snac *snac, d_char *os, char *msg, const char *md5)
  2 }
  3 
  4 
  5-d_char *html_entry(snac *snac, d_char *os, char *msg, int local, int level, const char *md5)
  6+d_char *html_entry(snac *snac, d_char *os, char *msg, int local,
  7+                   int level, const char *md5, int hide_children)
  8 {
  9     char *id    = xs_dict_get(msg, "id");
 10     char *type  = xs_dict_get(msg, "type");
 11@@ -922,56 +923,58 @@ d_char *html_entry(snac *snac, d_char *os, char *msg, int local, int level, cons
 12         s = html_entry_controls(snac, s, msg, md5);
 13 
 14     /** children **/
 15-    xs *children = object_children(id);
 16-    int left     = xs_list_len(children);
 17+    if (!hide_children) {
 18+        xs *children = object_children(id);
 19+        int left     = xs_list_len(children);
 20 
 21-    if (left) {
 22-        char *p, *cmd5;
 23-        int older_open = 0;
 24-        xs *ss = xs_str_new(NULL);
 25-        int n_children = 0;
 26+        if (left) {
 27+            char *p, *cmd5;
 28+            int older_open = 0;
 29+            xs *ss = xs_str_new(NULL);
 30+            int n_children = 0;
 31 
 32-        ss = xs_str_cat(ss, "<details open><summary>...</summary><p>\n");
 33+            ss = xs_str_cat(ss, "<details open><summary>...</summary><p>\n");
 34 
 35-        if (level < 4)
 36-            ss = xs_str_cat(ss, "<div class=\"snac-children\">\n");
 37-        else
 38-            ss = xs_str_cat(ss, "<div>\n");
 39+            if (level < 4)
 40+                ss = xs_str_cat(ss, "<div class=\"snac-children\">\n");
 41+            else
 42+                ss = xs_str_cat(ss, "<div>\n");
 43 
 44-        if (left > 3) {
 45-            xs *s1 = xs_fmt("<details><summary>%s</summary>\n", L("Older..."));
 46-            ss = xs_str_cat(ss, s1);
 47-            older_open = 1;
 48-        }
 49+            if (left > 3) {
 50+                xs *s1 = xs_fmt("<details><summary>%s</summary>\n", L("Older..."));
 51+                ss = xs_str_cat(ss, s1);
 52+                older_open = 1;
 53+            }
 54 
 55-        p = children;
 56-        while (xs_list_iter(&p, &cmd5)) {
 57-            xs *chd = NULL;
 58-            timeline_get_by_md5(snac, cmd5, &chd);
 59+            p = children;
 60+            while (xs_list_iter(&p, &cmd5)) {
 61+                xs *chd = NULL;
 62+                timeline_get_by_md5(snac, cmd5, &chd);
 63 
 64-            if (older_open && left <= 3) {
 65-                ss = xs_str_cat(ss, "</details>\n");
 66-                older_open = 0;
 67-            }
 68+                if (older_open && left <= 3) {
 69+                    ss = xs_str_cat(ss, "</details>\n");
 70+                    older_open = 0;
 71+                }
 72+
 73+                if (chd != NULL) {
 74+                    ss = html_entry(snac, ss, chd, local, level + 1, cmd5, hide_children);
 75+                    n_children++;
 76+                }
 77+                else
 78+                    snac_debug(snac, 2, xs_fmt("cannot read from timeline child %s", cmd5));
 79 
 80-            if (chd != NULL) {
 81-                ss = html_entry(snac, ss, chd, local, level + 1, cmd5);
 82-                n_children++;
 83+                left--;
 84             }
 85-            else
 86-                snac_debug(snac, 2, xs_fmt("cannot read from timeline child %s", cmd5));
 87 
 88-            left--;
 89-        }
 90+            if (older_open)
 91+                ss = xs_str_cat(ss, "</details>\n");
 92 
 93-        if (older_open)
 94+            ss = xs_str_cat(ss, "</div>\n");
 95             ss = xs_str_cat(ss, "</details>\n");
 96 
 97-        ss = xs_str_cat(ss, "</div>\n");
 98-        ss = xs_str_cat(ss, "</details>\n");
 99-
100-        if (n_children)
101-            s = xs_str_cat(s, ss);
102+            if (n_children)
103+                s = xs_str_cat(s, ss);
104+        }
105     }
106 
107     s = xs_str_cat(s, "</div>\n</div>\n");
108@@ -1015,7 +1018,7 @@ d_char *html_timeline(snac *snac, char *list, int local, int skip, int show, int
109         if (!valid_status(timeline_get_by_md5(snac, v, &msg)))
110             continue;
111 
112-        s = html_entry(snac, s, msg, local, 0, v);
113+        s = html_entry(snac, s, msg, local, 0, v, 0);
114     }
115 
116     s = xs_str_cat(s, "</div>\n");
117@@ -1204,7 +1207,7 @@ xs_str *html_notifications(snac *snac)
118 
119         xs *obj = NULL;
120         const char *type = xs_dict_get(noti, "type");
121-        const char *id   = xs_dict_get(noti, strcmp(type, "Follow") == 0 ? "actor" : "objid");
122+        const char *id   = xs_dict_get(noti, "objid");
123 
124         if (!valid_status(object_get(id, &obj)))
125             continue;
126@@ -1224,7 +1227,7 @@ xs_str *html_notifications(snac *snac)
127         else {
128             /* already seen notification */
129             if (stage != NHDR_OLD) {
130-                xs *s1 = xs_fmt("<h2>%s</h2>\n", L("Older"));
131+                xs *s1 = xs_fmt("<h2>%s</h2>\n", L("Already seen"));
132                 s = xs_str_cat(s, s1);
133 
134                 stage = NHDR_OLD;
135@@ -1233,11 +1236,20 @@ xs_str *html_notifications(snac *snac)
136 
137         s = xs_str_cat(s, "<div>\n");
138 
139-        xs *s1 = xs_fmt("<p><b>%s</b>:</p>\n", strcmp("Create", type) == 0 ? "Mention" : type);
140+        xs *s1 = xs_fmt("<p><b>%s</b>:</p>\n", strcmp(type, "Create") == 0 ? "Mention" : type);
141         s = xs_str_cat(s, s1);
142 
143-        xs *md5 = xs_md5_hex(id, strlen(id));
144-        s = html_entry(snac, s, obj, 0, 0, md5);
145+        if (strcmp(type, "Follow") == 0) {
146+            s = xs_str_cat(s, "<div class=\"snac-post\">\n");
147+
148+            s = html_msg_icon(snac, s, obj);
149+
150+            s = xs_str_cat(s, "</div>\n");
151+        }
152+        else {
153+            xs *md5 = xs_md5_hex(id, strlen(id));
154+            s = html_entry(snac, s, obj, 0, 0, md5, 1);
155+        }
156 
157         s = xs_str_cat(s, "</div>\n");
158     }