surf-0.4.1-download.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
surf-0.4.1-download.diff (3481B)
---
1 diff -r 71388899ac09 config.def.h
2 --- a/config.def.h Tue Jun 08 09:06:10 2010 +0200
3 +++ b/config.def.h Wed Sep 28 14:15:32 2011 +0100
4 @@ -5,6 +5,7 @@
5 static char *stylefile = ".surf/style.css";
6 static char *scriptfile = ".surf/script.js";
7 static char *cookiefile = ".surf/cookies.txt";
8 +static char *downdir = "/tmp";
9 static time_t sessiontime = 3600;
10 #define NOBACKGROUND 0
11
12 diff -r 71388899ac09 surf.c
13 --- a/surf.c Tue Jun 08 09:06:10 2010 +0200
14 +++ b/surf.c Wed Sep 28 14:15:32 2011 +0100
15 @@ -74,7 +74,9 @@
16 static void destroyclient(Client *c);
17 static void destroywin(GtkWidget* w, Client *c);
18 static void die(char *str);
19 +static void download(WebKitDownload *o, GParamSpec *pspec, Client *c);
20 static void drawindicator(Client *c);
21 +static void evalscript(Client *c, char *script);
22 static gboolean exposeindicator(GtkWidget *w, GdkEventExpose *e, Client *c);
23 static void find(Client *c, const Arg *arg);
24 static const char *getatom(Client *c, int a);
25 @@ -239,6 +241,21 @@
26 }
27
28 void
29 +download(WebKitDownload *o, GParamSpec *pspec, Client *c) {
30 + WebKitDownloadStatus status;
31 + char script[2048];
32 +
33 + status = webkit_download_get_status(o);
34 + if(status == WEBKIT_DOWNLOAD_STATUS_STARTED || status == WEBKIT_DOWNLOAD_STATUS_CREATED) {
35 + snprintf(script, 2048, "u(%d, %d, %d)",
36 + (gint)webkit_download_get_current_size(o),
37 + (gint)webkit_download_get_total_size(o),
38 + (gint)(webkit_download_get_progress(o) * 100));
39 + evalscript(c, script);
40 + }
41 +}
42 +
43 +void
44 drawindicator(Client *c) {
45 gint width;
46 const char *uri;
47 @@ -261,6 +278,17 @@
48 g_object_unref(gc);
49 }
50
51 +void
52 +evalscript(Client *c, char *script) {
53 + JSValueRef exception = NULL;
54 + WebKitWebFrame *frame = webkit_web_view_get_main_frame(c->view);
55 + JSContextRef js = webkit_web_frame_get_global_context(frame);
56 + JSStringRef jsscript = JSStringCreateWithUTF8CString(script);
57 +
58 + JSEvaluateScript(js, jsscript, JSContextGetGlobalObject(js), NULL, 0, &exception)
59 +;
60 +}
61 +
62 gboolean
63 exposeindicator(GtkWidget *w, GdkEventExpose *e, Client *c) {
64 drawindicator(c);
65 @@ -328,12 +356,40 @@
66
67 gboolean
68 initdownload(WebKitWebView *view, WebKitDownload *o, Client *c) {
69 - Arg arg;
70 + gchar *uri, *path;
71 + const gchar *filename;
72 + Client *n;
73 + char html[1024];
74
75 - updatewinid(c);
76 - arg = (Arg)DOWNLOAD((char *)webkit_download_get_uri(o));
77 - spawn(c, &arg);
78 - return FALSE;
79 + n = newclient();
80 + filename = webkit_download_get_suggested_filename(o);
81 +
82 + path = g_build_filename(downdir, filename, NULL);
83 + uri = g_filename_to_uri(path, NULL, NULL);
84 + webkit_download_set_destination_uri(o, uri);
85 + g_free(path);
86 + g_free(uri);
87 +
88 + snprintf(html, 1024,
89 + "<html><head><script>" \
90 + "function u(c, t, p) {" \
91 + " document.getElementById('c').innerHTML = c;" \
92 + " document.getElementById('t').innerHTML = t;" \
93 + " document.getElementById('p').innerHTML = p;}" \
94 + "</script></head><body><p>Downloading %s</p>" \
95 + "<p><span id='c'>0</span> / <span id='t'>0</span> " \
96 + "(<span id='p'>0</span>%%)</p></body></html>",
97 + filename);
98 + webkit_web_view_load_string(n->view, html, NULL, NULL, NULL);
99 +
100 + g_signal_connect(o, "notify::progress", G_CALLBACK(download), n);
101 + g_signal_connect(o, "notify::status", G_CALLBACK(download), n);
102 + webkit_download_start(o);
103 + n->title = g_strdup_printf("Downloading %s", filename);
104 + n->progress = 0;
105 + update(n);
106 +
107 + return TRUE;
108 }
109
110 gboolean