diff options
author | 2009-05-15 15:58:58 +0300 | |
---|---|---|
committer | 2009-05-15 15:58:58 +0300 | |
commit | b329cac456b7fd76c8ab2b18222c1da9940ad7f5 (patch) | |
tree | 0481f3a1924d715940256c92a5b84971f0034b6e /uzbl.c | |
parent | 07293241d3c13b34d312937b5db182134c90ce5d (diff) |
Add SET handling for useragent.
Diffstat (limited to 'uzbl.c')
-rw-r--r-- | uzbl.c | 69 |
1 files changed, 60 insertions, 9 deletions
@@ -82,7 +82,6 @@ const struct { { "http_debug", (void *)&uzbl.behave.http_debug }, { "modkey", (void *)&uzbl.behave.modkey }, { "always_insert_mode", (void *)&uzbl.behave.always_insert_mode }, - // TODO: write cmd handlers for the following { "useragent", (void *)&uzbl.net.useragent }, { NULL, NULL } }, *n2v_p = var_name_to_ptr; @@ -581,14 +580,13 @@ setup_scanner() { static gchar * parse_status_template(const char *template) { + if(!template) return NULL; + GTokenType token = G_TOKEN_NONE; GString *ret = g_string_new(""); gchar *buf=NULL; int sym; - if(!template) - return NULL; - g_scanner_input_text(uzbl.scan, template, strlen(template)); while(!g_scanner_eof(uzbl.scan) && token != G_TOKEN_LAST) { token = g_scanner_get_next_token(uzbl.scan); @@ -631,6 +629,42 @@ parse_status_template(const char *template) { g_string_append(ret, uzbl.gui.sbar.msg?uzbl.gui.sbar.msg:""); break; + /* useragent syms */ + case SYM_WK_MAJ: + g_string_append(ret, itos(WEBKIT_MAJOR_VERSION)); + break; + case SYM_WK_MIN: + g_string_append(ret, itos(WEBKIT_MINOR_VERSION)); + break; + case SYM_WK_MIC: + g_string_append(ret, itos(WEBKIT_MICRO_VERSION)); + break; + case SYM_SYSNAME: + g_string_append(ret, uzbl.state.unameinfo.sysname); + break; + case SYM_NODENAME: + g_string_append(ret, uzbl.state.unameinfo.nodename); + break; + case SYM_KERNREL: + g_string_append(ret, uzbl.state.unameinfo.release); + break; + case SYM_KERNVER: + g_string_append(ret, uzbl.state.unameinfo.version); + break; + case SYM_ARCHSYS: + g_string_append(ret, uzbl.state.unameinfo.machine); + break; + case SYM_ARCHUZBL: + g_string_append(ret, ARCH); + break; +#ifdef _GNU_SOURCE + case SYM_DOMAINNAME: + g_string_append(ret, uzbl.state.unameinfo.domainname); + break; +#endif + case SYM_COMMIT: + g_string_append(ret, COMMIT); + break; default: break; } @@ -723,11 +757,10 @@ get_var_value(gchar *name) { void **p = NULL; if( (p = g_hash_table_lookup(uzbl.comm.proto_var, name)) ) { - if(!strcmp(name, "status_format")) { + if(var_is("status_format", name) + || var_is("useragent", name)) { printf("VAR: %s VALUE: %s\n", name, (char *)*p); - } else { - printf("VAR: %s VALUE: %d\n", name, (int)*p); - } + } else printf("VAR: %s VALUE: %d\n", name, (int)*p); } return TRUE; } @@ -804,6 +837,10 @@ set_var_value(gchar *name, gchar *val) { uzbl.behave.modmask |= modkeys[i].mask; } } + else if(var_is("useragent", name)) { + if(*p) free(*p); + *p = set_useragent(g_strdup(val)); + } /* variables that take int values */ else { int *ip = (int *)p; @@ -1483,7 +1520,7 @@ settings_init () { n->soup_logger = soup_logger_new(b->http_debug, -1); soup_session_add_feature(n->soup_session, SOUP_SESSION_FEATURE(n->soup_logger)); } - + if(n->useragent){ char* newagent = malloc(1024); @@ -1530,6 +1567,18 @@ settings_init () { g_signal_connect(n->soup_session, "request-queued", G_CALLBACK(handle_cookies), NULL); } +static gchar* +set_useragent(gchar *val) { + if (*val == ' ') { + g_free(val); + return NULL; + } + gchar *ua = parse_status_template(val); + if (ua) + g_object_set(G_OBJECT(uzbl.net.soup_session), SOUP_SESSION_USER_AGENT, ua, NULL); + return ua; +} + static void handle_cookies (SoupSession *session, SoupMessage *msg, gpointer user_data){ (void) session; (void) user_data; @@ -1622,6 +1671,8 @@ main (int argc, char* argv[]) { if(setup_signal(SIGTERM, catch_sigterm) == SIG_ERR) fprintf(stderr, "uzbl: error hooking SIGTERM\n"); + if(uname(&uzbl.state.unameinfo) == -1) + g_printerr("Can't retrieve unameinfo. Your useragent might appear wrong.\n"); setup_regex(); setup_scanner(); |