From f7ae53b2d26c53ac77524d50281cdf294242126f Mon Sep 17 00:00:00 2001 From: grunfink Date: Fri, 19 Dec 2025 09:56:27 +0100 Subject: Added violette styles to the embedded CSS. --- utils.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'utils.c') diff --git a/utils.c b/utils.c index b76c0f8..44e4006 100644 --- a/utils.c +++ b/utils.c @@ -78,6 +78,9 @@ static const char * const default_css = ".snac-list-of-lists li { display: inline; border: 1px solid #a0a0a0; border-radius: 25px;\n" " margin-right: 0.5em; padding-left: 0.5em; padding-right: 0.5em; }\n" ".snac-no-more-unseen-posts { border-top: 1px solid #a0a0a0; border-bottom: 1px solid #a0a0a0; padding: 0.5em 0; margin: 1em 0; }\n" + ".snac-reaction { padding:5px; padding-left: 10px; padding-right: 10px; display: inline-flex; margin-right: 5px; font-family: inherit; font-size: medium; height: 2.5rem; vertical-align:middle; align-items:center;}\n" + ".snac-reaction-image { max-width: 100%; max-height: 100%; }\n" + ".snac-reaction-div { border-left: darkgray; border-left-style: solid; margin-bottom: .3em; padding-left: .3em; border-left-width: 2px; }\n" "@media (prefers-color-scheme: dark) { \n" " body, input, textarea { background-color: #000; color: #fff; }\n" " a { color: #7799dd }\n" -- cgit v1.2.3 From 11af00194e3e0ec15e17a23556dc2929f92e0210 Mon Sep 17 00:00:00 2001 From: grunfink Date: Thu, 1 Jan 2026 17:01:03 +0100 Subject: Bumped copyright year. --- utils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'utils.c') diff --git a/utils.c b/utils.c index 44e4006..4bdbaaf 100644 --- a/utils.c +++ b/utils.c @@ -1,5 +1,5 @@ /* snac - A simple, minimalistic ActivityPub instance */ -/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */ +/* copyright (c) 2022 - 2026 grunfink et al. / MIT license */ #include "xs.h" #include "xs_io.h" -- cgit v1.2.3 From 99375a7b664750c1288558f1d5c02b833a2e083c Mon Sep 17 00:00:00 2001 From: grunfink Date: Sat, 10 Jan 2026 21:29:32 +0100 Subject: New command-line option top_ten. --- utils.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) (limited to 'utils.c') diff --git a/utils.c b/utils.c index 4bdbaaf..fd077f6 100644 --- a/utils.c +++ b/utils.c @@ -11,6 +11,8 @@ #include "xs_curl.h" #include "xs_regex.h" #include "xs_http.h" +#include "xs_list_tools.h" +#include "xs_set.h" #include "snac.h" @@ -1002,6 +1004,76 @@ void import_csv(snac *user) snac_log(user, xs_fmt("Cannot open file %s", fn)); } + +static int top_ten_sort(const void *v1, const void *v2) +{ + const xs_list *l1 = *(const xs_list **)v1; + const xs_list *l2 = *(const xs_list **)v2; + + const char *c1 = xs_list_get(l1, 3); + const char *c2 = xs_list_get(l2, 3); + + return xs_cmp(c2, c1); +} + + +xs_list *user_top_ten(snac *user, int count) +/* returns the top ten more popular posts by a user */ +{ + xs *idx = xs_fmt("%s/private.idx", user->basedir); + xs *list = index_list(idx, XS_ALL); + xs *u_list = xs_list_new(); + xs_set u; + + xs_set_init(&u); + + const char *md5; + + xs_list_foreach(list, md5) { + xs *obj = NULL; + + if (!valid_status(object_get_by_md5(md5, &obj))) + continue; + + const char *id = xs_dict_get_def(obj, "id", "-"); + + if (!is_msg_mine(user, id)) + continue; + + if (xs_set_add(&u, id) != 1) + continue; + + /* get metrics */ + int ls = object_likes_len(id); + int as = object_announces_len(id); + + /* build the entry and convert to list */ + xs *s = xs_fmt("%s\t%d\t%d\t%010d", id, ls, as, ls + as); + xs *l = xs_split(s, "\t"); + + u_list = xs_list_append(u_list, l); + } + + /* sort by the sum of likes and boosts */ + xs *s_list = xs_list_sort(u_list, top_ten_sort); + + xs_list *r = xs_list_new(); + const xs_list *i; + + xs_list_foreach(s_list, i) { + r = xs_list_append(r, i); + + if (--count <= 0) + break; + } + + xs_set_free(&u); + + return r; +} + + + static const struct { const char *proto; unsigned short default_port; -- cgit v1.2.3 From f5ad346f7d819a1fe71ac6f1bc98e16fe1aead01 Mon Sep 17 00:00:00 2001 From: violette Date: Mon, 12 Jan 2026 05:09:21 +0100 Subject: Use the metadata pronouns. --- utils.c | 1 + 1 file changed, 1 insertion(+) (limited to 'utils.c') diff --git a/utils.c b/utils.c index fd077f6..9f4e1b7 100644 --- a/utils.c +++ b/utils.c @@ -88,6 +88,7 @@ static const char * const default_css = " a { color: #7799dd }\n" " a:visited { color: #aa99dd }\n" "}\n" + "select { max-width: 40%; }\n" ; const char *snac_blurb = -- cgit v1.2.3