Introduction
Introduction Statistics Contact Development Disclaimer Help
surf-0.5-download.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
surf-0.5-download.diff (6076B)
---
1 diff --git a/config.def.h b/config.def.h
2 index 1cba4d7..3065c73 100644
3 --- a/config.def.h
4 +++ b/config.def.h
5 @@ -11,6 +11,7 @@ static char *progress_proxy_untrust = "#FF6600";
6 static char *stylefile = "~/.surf/style.css";
7 static char *scriptfile = "~/.surf/script.js";
8 static char *cookiefile = "~/.surf/cookies.txt";
9 +static char *downdir = "/tmp";
10 static time_t sessiontime = 3600;
11 static char *cafile = "/etc/ssl/certs/ca-certificates.crt";
12 static char *strictssl = FALSE; /* Refuse untrusted SSL connection…
13 diff --git a/surf.c b/surf.c
14 index c9fa08d..4d589aa 100644
15 --- a/surf.c
16 +++ b/surf.c
17 @@ -114,6 +114,7 @@ static void destroyclient(Client *c);
18 static void destroywin(GtkWidget* w, Client *c);
19 static void die(const char *errstr, ...);
20 static void drawindicator(Client *c);
21 +static void download(WebKitDownload *o, GParamSpec *pspec, Client *c);
22 static void eval(Client *c, const Arg *arg);
23 static gboolean exposeindicator(GtkWidget *w, GdkEventExpose *e, Client…
24 static void find(Client *c, const Arg *arg);
25 @@ -289,6 +290,50 @@ cookiejar_set_property(GObject *self, guint prop_id…
26 flock(COOKIEJAR(self)->lock, LOCK_UN);
27 }
28
29 +struct client_size_tuple {
30 + Client* c;
31 + gint s;
32 +};
33 +
34 +static void
35 +late_download_update(WebKitWebView* view, GParamSpec *pspec, struct cli…
36 + char script[1024]; char* s= script;
37 + snprintf(script, 1024, "c(%d, %d)", t->s, t->s);
38 + const Arg a= {.v = (void*) &s};
39 + eval(t->c, &a);
40 + free(t);
41 +}
42 +
43 +static void
44 +download(WebKitDownload *o, GParamSpec *pspec, Client *c) {
45 + WebKitDownloadStatus status;
46 + char script[2048]; char* s= script;
47 +
48 + status = webkit_download_get_status(o);
49 + if(status == WEBKIT_DOWNLOAD_STATUS_STARTED || status == WEBKIT…
50 + snprintf(script, 2048, "u(%d, %d, %d)",
51 + (gint)webkit_download_get_current_size(o),
52 + (gint)webkit_download_get_total_size(o),
53 + (gint)(webkit_download_get_progress(o) * 100));
54 + const Arg a= {.v = (void*) &s};
55 + eval(c, &a);
56 + }
57 + else if (status == WEBKIT_DOWNLOAD_STATUS_FINISHED){
58 + if( webkit_web_view_get_load_status(c->view) == WEBKIT_…
59 + snprintf(script, 2048, "c(%d, %d)",
60 + (gint)webkit_download_get_current_size(…
61 + (gint)webkit_download_get_total_size(o)…
62 + const Arg a= {.v = (void*) &s};
63 + eval(c, &a);
64 + }
65 + else {
66 + struct client_size_tuple* t= calloc(1, sizeof(s…
67 + t->c= c; t->s= (gint)webkit_download_get_curren…
68 + g_signal_connect(c->view, "document-load-finish…
69 + }
70 + }
71 +}
72 +
73 static void
74 evalscript(JSContextRef js, char *script, char* scriptname) {
75 JSStringRef jsscript, jsscriptname;
76 @@ -496,12 +541,105 @@ geturi(Client *c) {
77
78 static gboolean
79 initdownload(WebKitWebView *view, WebKitDownload *o, Client *c) {
80 - Arg arg;
81 + gchar *uri, *path;
82 + const gchar *filename;
83 + Client *n;
84 + const char template[] =
85 +"<html>" \
86 +"<head>" \
87 +"<title>Download - %s</title>" \
88 +"<script>" \
89 +"function formText(x){" \
90 +" if(x >= 1073741824) { return (Math.floor(x/10737418.24)/100) + \"G\…
91 +" else if(x >= 1048576){ return (Math.floor(x/10485.76)/100) + \"M\"; …
92 +" else if(x >= 1024) { return (Math.floor(x/10.24)/100) + \"k\"; }" \
93 +" else { return x+\"b\"; }" \
94 +"}" \
95 +"function updateText(c,t){" \
96 +" txt= formText(c) + \"/\" + formText(t);" \
97 +" DLTEXT.textContent= txt;" \
98 +" /* center text in bar */" \
99 +" DLTEXT.setAttribute('x', 102-4.4*txt.length)" \
100 +"}" \
101 +"function c(c, t){" \
102 +" DLGRAD.setAttribute('x2', 230);" \
103 +" DLGRAD.setAttribute('x1', 205);" \
104 +" updateText(c,t);" \
105 +" document.getElementById('stop1').setAttribute('style', \"stop-color:…
106 +"}" \
107 +"function u(c,t,p){" \
108 +" DLGRAD.setAttribute('x2', Math.floor(p*205/100) + 25);" \
109 +" DLGRAD.setAttribute('x1', Math.floor(p*205/100));" \
110 +" updateText(c,t);" \
111 +"}" \
112 +"</script>" \
113 +"</head>" \
114 +"<body>" \
115 +"<center>" \
116 +"<h2>Downloading</h2>" \
117 +"<h3>%s</h3>" \
118 +"to %s<br/>" \
119 +"<svg" \
120 +" xmlns:cc=\"http://creativecommons.org/ns#\"" \
121 +" xmlns:svg=\"http://www.w3.org/2000/svg\"" \
122 +" xmlns=\"http://www.w3.org/2000/svg\"" \
123 +" xmlns:xlink=\"http://www.w3.org/1999/xlink\"" \
124 +" width=\"210\"" \
125 +" height=\"60\"" \
126 +" id=\"download\">" \
127 +" <defs>" \
128 +" <linearGradient" \
129 +" id=\"dlgradient\"" \
130 +" x1=\"0\"" \
131 +" y1=\"0\"" \
132 +" x2=\"25\"" \
133 +" y2=\"0\"" \
134 +" gradientUnits=\"userSpaceOnUse\">" \
135 +" <stop style=\"stop-color:#00ff00;\" offset=\"0\" id=\"stop1\" />…
136 +" <stop style=\"stop-color:#00ff00;stop-opacity:0;\" offset=\"1\" …
137 +" </linearGradient>" \
138 +" </defs>" \
139 +" <rect" \
140 +" style=\"fill:url(#dlgradient);stroke:#000000;stroke-width:3\"" \
141 +" id=\"rect2985\"" \
142 +" width=\"200\"" \
143 +" height=\"50\"" \
144 +" x=\"5\"" \
145 +" y=\"5\"" \
146 +" ry=\"25\" />" \
147 +" <text id=\"dltext\" x=\"92\" y=\"35\">0/0</text>" \
148 +"</svg>" \
149 +"</center>" \
150 +"<script>" \
151 +"DLGRAD= document.getElementById('dlgradient');" \
152 +"DLTEXT= document.getElementById('dltext');" \
153 +"</script>" \
154 +"</body>" \
155 +"</html>";
156 + char html[sizeof(template)+2048];
157 + filename = webkit_download_get_suggested_filename(o);
158 +
159 + path = g_build_filename(downdir, filename, NULL);
160 + uri = g_filename_to_uri(path, NULL, NULL);
161 +
162 + webkit_download_set_destination_uri(o, uri);
163 + webkit_download_start(o);
164 +
165 + n = newclient();
166 + snprintf(html, sizeof(template)+2048, template, filename, filen…
167 + webkit_web_view_load_string(n->view, html, NULL, NULL, NULL);
168 +
169 + g_signal_connect(o, "notify::progress", G_CALLBACK(download), n…
170 + g_signal_connect(o, "notify::status", G_CALLBACK(download), n);
171 +
172 + n->title = g_strdup_printf("Downloading %s", filename);
173 + n->progress = 0;
174 + update(n);
175 +
176 + g_free(path);
177 + g_free(uri);
178
179 - updatewinid(c);
180 - arg = (Arg)DOWNLOAD((char *)webkit_download_get_uri(o), geturi(…
181 - spawn(c, &arg);
182 - return FALSE;
183 + return TRUE;
184 }
185
186 static void
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.