add download support
This commit is contained in:
parent
fb5df91cad
commit
0bf51a097a
40
webview.c
40
webview.c
|
@ -107,9 +107,44 @@ void rose_webview_load_url(WebKitWebView *webview, const char *url)
|
||||||
setatom(AtomUri, url);
|
setatom(AtomUri, url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void rose_download(const char* uri)
|
||||||
|
{
|
||||||
|
char *cmd = calloc(1, sizeof(char) * strlen(uri) + 1);
|
||||||
|
char *url = calloc(1, sizeof(char) * strlen(uri) + 1);
|
||||||
|
|
||||||
|
strcpy(url, uri);
|
||||||
|
|
||||||
|
int id = fork();
|
||||||
|
if (id == 0) {
|
||||||
|
close(spair[0]);
|
||||||
|
close(spair[1]);
|
||||||
|
setsid();
|
||||||
|
char *argv[] = { "/bin/sh", "-c", "st -e /bin/sh -c", "\"aria2c \\", cmd, "\"", NULL };
|
||||||
|
execvp("/bin/sh", argv);
|
||||||
|
perror(" failed");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void rose_response_reciver(WebKitDownload *download,
|
||||||
|
GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
const char *uri = webkit_uri_response_get_uri(webkit_download_get_response(download));
|
||||||
|
|
||||||
|
rose_download(uri);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void rose_download_callback(WebKitWebContext *context,
|
||||||
|
WebKitDownload *download)
|
||||||
|
{
|
||||||
|
g_signal_connect(G_OBJECT(download), "notify::response",
|
||||||
|
G_CALLBACK(rose_response_reciver), NULL);
|
||||||
|
}
|
||||||
|
|
||||||
GtkWidget* rose_webview_new()
|
GtkWidget* rose_webview_new()
|
||||||
{
|
{
|
||||||
char cookiefile[64];
|
char cookiefile[64];
|
||||||
|
WebKitWebView *webview;
|
||||||
WebKitCookieManager *cookiemanager;
|
WebKitCookieManager *cookiemanager;
|
||||||
WebKitUserContentManager *contentmanager;
|
WebKitUserContentManager *contentmanager;
|
||||||
|
|
||||||
|
@ -146,9 +181,14 @@ GtkWidget* rose_webview_new()
|
||||||
|
|
||||||
webkit_cookie_manager_set_accept_policy(cookiemanager, WEBKIT_COOKIE_POLICY_ACCEPT_ALWAYS);
|
webkit_cookie_manager_set_accept_policy(cookiemanager, WEBKIT_COOKIE_POLICY_ACCEPT_ALWAYS);
|
||||||
|
|
||||||
|
|
||||||
|
g_signal_connect(G_OBJECT(context), "download-started",
|
||||||
|
G_CALLBACK(rose_download_callback), NULL);
|
||||||
|
|
||||||
return g_object_new(
|
return g_object_new(
|
||||||
WEBKIT_TYPE_WEB_VIEW,
|
WEBKIT_TYPE_WEB_VIEW,
|
||||||
"settings", settings,
|
"settings", settings,
|
||||||
"user-content-manager", contentmanager,
|
"user-content-manager", contentmanager,
|
||||||
"web-context", context, NULL);
|
"web-context", context, NULL);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user