aboutsummaryrefslogtreecommitdiffhomepage
path: root/uzbl.c
diff options
context:
space:
mode:
authorGravatar DuClare <akarinotengoku@gmail.com>2009-05-15 15:58:58 +0300
committerGravatar DuClare <akarinotengoku@gmail.com>2009-05-15 15:58:58 +0300
commitb329cac456b7fd76c8ab2b18222c1da9940ad7f5 (patch)
tree0481f3a1924d715940256c92a5b84971f0034b6e /uzbl.c
parent07293241d3c13b34d312937b5db182134c90ce5d (diff)
Add SET handling for useragent.
Diffstat (limited to 'uzbl.c')
-rw-r--r--uzbl.c69
1 files changed, 60 insertions, 9 deletions
diff --git a/uzbl.c b/uzbl.c
index 418ca0f..8755b10 100644
--- a/uzbl.c
+++ b/uzbl.c
@@ -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();