add download support

This commit is contained in:
fenze 2022-05-13 16:10:56 +02:00
parent fb5df91cad
commit 0bf51a097a

View File

@ -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);
return g_object_new(
g_signal_connect(G_OBJECT(context), "download-started",
G_CALLBACK(rose_download_callback), NULL);
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);
} }