/*
* about: URI scheme
*
* Copyright (C) 2017 Patrick McDermott
*
* This file is part of Marquee.
*
* Marquee is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Marquee is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Marquee. If not, see .
*/
#include
#include
#include "about.h"
#include "application.h"
#include "about/paths.h"
GHashTable *
parse_query_string(gchar *str)
{
GHashTable *hash_table;
gchar *key;
gchar *val;
hash_table = g_hash_table_new(g_str_hash, g_str_equal);
while (*str) {
key = str;
for (; *str && *str != '='; ++str);
if (!*str) {
g_hash_table_insert(hash_table, key, NULL);
break;
}
*str = '\0';
val = ++str;
for (; *str && *str != '&'; ++str);
if (!*str) {
g_hash_table_insert(hash_table, key, val);
break;
}
*str = '\0';
g_hash_table_insert(hash_table, key, val);
++str;
}
return hash_table;
}
void
mq_about_request(WebKitURISchemeRequest *request, MqApplication *application)
{
const gchar *path;
gchar *query_str;
GHashTable *query;
gchar *contents;
gsize stream_length;
GInputStream *stream;
path = webkit_uri_scheme_request_get_path(request);
query_str = strchr(webkit_uri_scheme_request_get_uri(request), '?');
if (query_str && query_str[1]) {
query_str = g_strdup(query_str + 1);
query = parse_query_string(query_str);
} else {
query = NULL;
}
if (g_strcmp0(path, "marquee") == 0) {
contents = mq_about_marquee_response(application, query);
stream_length = strlen(contents);
stream = g_memory_input_stream_new_from_data(contents,
stream_length, g_free);
} else {
return;
}
webkit_uri_scheme_request_finish(request, stream, stream_length,
"text/html");
g_object_unref(stream);
}