/*
* 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 .
*/
#define _POSIX_C_SOURCE 200809L
#include
#include
#include "about.h"
#include "application.h"
#include "about/paths.h"
GHashTable *
parse_query_string(gchar *str)
{
GHashTable *hash_table;
gboolean first;
gchar *saveptr;
gchar *key;
gchar *val;
hash_table = g_hash_table_new(g_str_hash, g_str_equal);
first = TRUE;
while ((key = strtok_r(first ? str : NULL, "=", &saveptr))) {
first = FALSE;
val = strtok_r(NULL, "&", &saveptr);
g_hash_table_insert(hash_table, key, val);
}
return hash_table;
}
void
mq_about_request(WebKitURISchemeRequest *request, MqApplication *application)
{
const gchar *path;
gchar *query_str;
GHashTable *query;
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, "") == 0) {
g_print("about:\n");
} else if (g_strcmp0(path, "preferences") == 0) {
mq_about_preferences_response(application, query, request);
} else if (g_strcmp0(path, "marquee") == 0) {
mq_about_marquee_response(application, query, request);
} else {
return;
}
g_free(query_str);
}
void
mq_about_response(WebKitURISchemeRequest *request, gchar *contents)
{
gsize stream_length;
GInputStream *stream;
stream_length = strlen(contents);
stream = g_memory_input_stream_new_from_data(contents,
stream_length, g_free);
webkit_uri_scheme_request_finish(request, stream, stream_length,
"text/html");
g_object_unref(stream);
}
void
mq_about_redirect(WebKitURISchemeRequest *request, const gchar *uri)
{
WebKitWebView *web_view;
web_view = webkit_uri_scheme_request_get_web_view(request);
webkit_web_view_load_request(web_view, webkit_uri_request_new(uri));
mq_about_response(request, g_strdup(""));
}