summaryrefslogtreecommitdiffstats
path: root/src/schemes/about.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/schemes/about.c')
-rw-r--r--src/schemes/about.c90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/schemes/about.c b/src/schemes/about.c
new file mode 100644
index 0000000..49104a7
--- /dev/null
+++ b/src/schemes/about.c
@@ -0,0 +1,90 @@
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "about.h"
+
+#include <string.h>
+
+#include <webkit2/webkit2.h>
+
+#include "../application.h"
+#include "../utils/resources.h"
+#include "../utils/string.h"
+#include "about/paths.h"
+
+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 = mq_parse_query_string(query_str);
+ g_free(query_str);
+ } else {
+ query = NULL;
+ }
+
+ if (g_strcmp0(path, "") == 0 || g_strcmp0(path, "version") == 0) {
+ mq_about_version_response(application, query, request);
+ } 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 if (g_str_has_prefix(path, "resources/")) {
+ mq_resource_response(application, path + sizeof("resources"),
+ request);
+ } else {
+ return;
+ }
+
+ if (query) {
+ g_hash_table_unref(query);
+ }
+}
+
+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(""));
+}