1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
/*
* 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, "profiles") == 0) {
mq_about_profiles_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(""));
}
|