commit c38ad28

grunfink  ·  2026-09-01 12:25:12 +0000 UTC
parent 5e74f45
New function text_browser_friendly() (still unused).
3 files changed,  +39, -2
M html.c
M snac.c
M snac.h
M html.c
+37, -0
 1@@ -4651,6 +4651,40 @@ void set_user_lang(snac *user)
 2 }
 3 
 4 
 5+int text_browser_friendly(const snac *user, const char *user_agent)
 6+/* returns true if the web UI must be adapted to text browsers */
 7+/* basically, this means to avoid details/summary as much as possible */
 8+{
 9+    if (user != NULL && xs_is_string(user_agent)) {
10+        snac_debug(user, 1, xs_fmt("user-agent: %s", user_agent));
11+
12+        const char *text_browser_uas = xs_dict_get(user->config, "text_browser_uas");
13+
14+        if (xs_is_string(text_browser_uas)) {
15+            xs *l = xs_split(text_browser_uas, "\n");
16+            const char *v;
17+
18+            xs_list_foreach(l, v) {
19+                if (*v == '\0')
20+                    continue;
21+
22+                xs *v2 = xs_strip_i(xs_dup(v));
23+
24+                /* a * means "all browsers", then yes */
25+                if (strcmp(v2, "*") == 0)
26+                    return 1;
27+
28+                /* if this string is inside user_agent, then yes */
29+                if (xs_str_in(user_agent, v2) != -1)
30+                    return 1;
31+            }
32+        }
33+    }
34+
35+    return 0;
36+}
37+
38+
39 int html_get_handler(const xs_dict *req, const char *q_path,
40                      char **body, int *b_size, char **ctype,
41                      xs_str **etag, xs_str **last_modified)
42@@ -4665,6 +4699,7 @@ int html_get_handler(const xs_dict *req, const char *q_path,
43     int save = 1;
44     int proxy = 0;
45     int terse = 0;
46+    int tb_friendly = 0;
47     const char *v;
48 
49     const xs_dict *q_vars = xs_dict_get(req, "q_vars");
50@@ -4734,6 +4769,8 @@ int html_get_handler(const xs_dict *req, const char *q_path,
51     if (xs_is_true(xs_dict_get(srv_config, "proxy_media")))
52         proxy = 1;
53 
54+    tb_friendly = text_browser_friendly(user, xs_dict_get(req, "user-agent"));
55+
56     /* return the RSS if requested by Accept header */
57     if (accept != NULL) {
58         if (xs_str_in(accept, "text/xml") != -1 ||
M snac.c
+1, -1
1@@ -127,7 +127,7 @@ void srv_log(xs_str *str)
2 }
3 
4 
5-void snac_log(snac *snac, xs_str *str)
6+void snac_log(const snac *snac, xs_str *str)
7 /* prints a user debugging information */
8 {
9     xs *o_str = str;
M snac.h
+1, -1
1@@ -97,7 +97,7 @@ enum {
2     SCOPE_FOLLOWERS = 3,
3 };
4 
5-void snac_log(snac *user, xs_str *str);
6+void snac_log(const snac *user, xs_str *str);
7 #define snac_debug(user, level, str) do { if (dbglevel >= (level)) \
8     { snac_log((user), (str)); } } while (0)
9