summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data.c3
-rw-r--r--html.c93
2 files changed, 94 insertions, 2 deletions
diff --git a/data.c b/data.c
index b20dc9e..1062896 100644
--- a/data.c
+++ b/data.c
@@ -606,7 +606,8 @@ void timeline_admire(snac *snac, char *id, char *admirer, int like)
list = xs_list_append(list, admirer);
/* set the admirer as the referrer */
- meta = xs_dict_set(meta, "referrer", admirer);
+ if (!like)
+ meta = xs_dict_set(meta, "referrer", admirer);
/* re-store */
if (like)
diff --git a/html.c b/html.c
index 8160b4e..b2c75fe 100644
--- a/html.c
+++ b/html.c
@@ -372,12 +372,84 @@ d_char *html_top_controls(snac *snac, d_char *s)
d_char *html_entry(snac *snac, d_char *s, char *msg, xs_set *seen, int level)
{
- char *id = xs_dict_get(msg, "id");
+ char *id = xs_dict_get(msg, "id");
+ char *type = xs_dict_get(msg, "type");
+ char *meta = xs_dict_get(msg, "_snac");
+ xs *actor_o = NULL;
+ char *actor;
/* return if already seen */
if (xs_set_add(seen, id) == 0)
return s;
+ if (strcmp(type, "Follow") == 0)
+ return s;
+
+ /* bring the main actor */
+ if ((actor = xs_dict_get(msg, "attributedTo")) == NULL)
+ return s;
+
+ if (!valid_status(actor_get(snac, actor, &actor_o)))
+ return s;
+
+ if (level == 0) {
+ char *referrer;
+
+ s = xs_str_cat(s, "<div class=\"snac-post\">\n");
+
+ /* print the origin of the post, if any */
+ if ((referrer = xs_dict_get(meta, "referrer")) != NULL) {
+ xs *actor_r = NULL;
+
+ if (valid_status(actor_get(snac, referrer, &actor_r))) {
+ char *name;
+
+ if ((name = xs_dict_get(actor_r, "name")) == NULL)
+ name = xs_dict_get(actor_r, "preferredUsername");
+
+ xs *s1 = xs_fmt(
+ "<div class=\"snac-origin\">\n"
+ "<a href=\"%s\">%s</a> %s</div>",
+ xs_dict_get(actor_r, "id"),
+ name,
+ "boosted"
+ );
+
+ s = xs_str_cat(s, s1);
+ }
+ }
+ }
+ else
+ s = xs_str_cat(s, "<div class=\"snac-child\">\n");
+
+ s = html_msg_icon(snac, s, msg);
+
+ /* add the content */
+ {
+ xs *c = xs_dup(xs_dict_get(msg, "content"));
+
+ /* do some tweaks to the content */
+ c = xs_replace_i(c, "\r", "");
+
+ while (xs_endswith(c, "<br><br>"))
+ c = xs_crop(c, 0, -4);
+
+ c = xs_replace_i(c, "<br><br>", "<p>");
+
+ if (!xs_startswith(c, "<p>")) {
+ xs *s1 = c;
+ c = xs_fmt("<p>%s</p>", s1);
+ }
+
+ xs *s1 = xs_fmt("<div class=\"e-content snac-content\">\n%s", c);
+
+ s = xs_str_cat(s, s1);
+
+ s = xs_str_cat(s, "</div>\n");
+ }
+
+ s = xs_str_cat(s, "</div>\n");
+
return s;
}
@@ -394,12 +466,16 @@ d_char *html_timeline(snac *snac, char *list, int local)
if (!local)
s = html_top_controls(snac, s);
+ s = xs_str_cat(s, "<div class=\"snac-posts\">\n");
+
while (xs_list_iter(&list, &v)) {
xs *msg = timeline_get(snac, v);
s = html_entry(snac, s, msg, seen, 0);
}
+ s = xs_str_cat(s, "</div>\n");
+
#if 0
s = xs_str_cat(s, "<h1>HI</h1>\n");
@@ -415,6 +491,21 @@ d_char *html_timeline(snac *snac, char *list, int local)
s = xs_str_cat(s, "</html>\n");
#endif
+ {
+ /* footer */
+ xs *s1 = xs_fmt(
+ "<div class=\"snac-footer\">\n"
+ "<a href=\"%s\">%s</a> - "
+ "powered by <abbr title=\"Social Networks Are Crap\">snac</abbr></div>\n",
+ srv_baseurl,
+ L("about this site")
+ );
+
+ s = xs_str_cat(s, s1);
+ }
+
+ s = xs_str_cat(s, "</body>\n</html>\n");
+
xs_set_free(seen);
return s;