aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgrunfink <grunfink@comam.es>2026-09-01 14:25:12 +0200
committergrunfink <grunfink@comam.es>2026-09-01 14:25:12 +0200
commitc38ad28d5daa44b592a04192c7eeebed644593d4 (patch)
treeea16f4734c998ff11764f269ea309df643236ead
parent5e74f4578816812f4f6ad47390e96dcfafee37d2 (diff)
New function text_browser_friendly() (still unused).
-rw-r--r--html.c37
-rw-r--r--snac.c2
-rw-r--r--snac.h2
3 files changed, 39 insertions, 2 deletions
diff --git a/html.c b/html.c
index bcdeb62..89034ec 100644
--- a/html.c
+++ b/html.c
@@ -4651,6 +4651,40 @@ void set_user_lang(snac *user)
}
+int text_browser_friendly(const snac *user, const char *user_agent)
+/* returns true if the web UI must be adapted to text browsers */
+/* basically, this means to avoid details/summary as much as possible */
+{
+ if (user != NULL && xs_is_string(user_agent)) {
+ snac_debug(user, 1, xs_fmt("user-agent: %s", user_agent));
+
+ const char *text_browser_uas = xs_dict_get(user->config, "text_browser_uas");
+
+ if (xs_is_string(text_browser_uas)) {
+ xs *l = xs_split(text_browser_uas, "\n");
+ const char *v;
+
+ xs_list_foreach(l, v) {
+ if (*v == '\0')
+ continue;
+
+ xs *v2 = xs_strip_i(xs_dup(v));
+
+ /* a * means "all browsers", then yes */
+ if (strcmp(v2, "*") == 0)
+ return 1;
+
+ /* if this string is inside user_agent, then yes */
+ if (xs_str_in(user_agent, v2) != -1)
+ return 1;
+ }
+ }
+ }
+
+ return 0;
+}
+
+
int html_get_handler(const xs_dict *req, const char *q_path,
char **body, int *b_size, char **ctype,
xs_str **etag, xs_str **last_modified)
@@ -4665,6 +4699,7 @@ int html_get_handler(const xs_dict *req, const char *q_path,
int save = 1;
int proxy = 0;
int terse = 0;
+ int tb_friendly = 0;
const char *v;
const xs_dict *q_vars = xs_dict_get(req, "q_vars");
@@ -4734,6 +4769,8 @@ int html_get_handler(const xs_dict *req, const char *q_path,
if (xs_is_true(xs_dict_get(srv_config, "proxy_media")))
proxy = 1;
+ tb_friendly = text_browser_friendly(user, xs_dict_get(req, "user-agent"));
+
/* return the RSS if requested by Accept header */
if (accept != NULL) {
if (xs_str_in(accept, "text/xml") != -1 ||
diff --git a/snac.c b/snac.c
index 8afe1f8..d2dbc7d 100644
--- a/snac.c
+++ b/snac.c
@@ -127,7 +127,7 @@ void srv_log(xs_str *str)
}
-void snac_log(snac *snac, xs_str *str)
+void snac_log(const snac *snac, xs_str *str)
/* prints a user debugging information */
{
xs *o_str = str;
diff --git a/snac.h b/snac.h
index 80d2429..1c505ec 100644
--- a/snac.h
+++ b/snac.h
@@ -97,7 +97,7 @@ enum {
SCOPE_FOLLOWERS = 3,
};
-void snac_log(snac *user, xs_str *str);
+void snac_log(const snac *user, xs_str *str);
#define snac_debug(user, level, str) do { if (dbglevel >= (level)) \
{ snac_log((user), (str)); } } while (0)