Introduction
Introduction Statistics Contact Development Disclaimer Help
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
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.