| surf-0.4.1-download.diff - sites - public wiki contents of suckless.org | |
| git clone git://git.suckless.org/sites | |
| Log | |
| Files | |
| 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… | |
| 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… | |
| 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), NU… | |
| 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 |