Introduction
Introduction Statistics Contact Development Disclaimer Help
surf-dlconsole-20190919-d068a38.diff - sites - public wiki contents of suckless…
git clone git://git.suckless.org/sites
Log
Files
Refs
---
surf-dlconsole-20190919-d068a38.diff (7159B)
---
1 From 0ea5ecb238b932c533413b912b7981a737af56cf Mon Sep 17 00:00:00 2001
2 From: danoloan10 <[email protected]>
3 Date: Thu, 19 Sep 2019 18:25:59 +0200
4 Subject: [PATCH] Basic integrated downloads via console display
5
6 ---
7 config.def.h | 16 ++++---
8 surf.c | 118 +++++++++++++++++++++++++++++++++++++++------------
9 2 files changed, 101 insertions(+), 33 deletions(-)
10
11 diff --git a/config.def.h b/config.def.h
12 index 34265f6..375be93 100644
13 --- a/config.def.h
14 +++ b/config.def.h
15 @@ -6,6 +6,8 @@ static char *styledir = "~/.surf/styles/";
16 static char *certdir = "~/.surf/certificates/";
17 static char *cachedir = "~/.surf/cache/";
18 static char *cookiefile = "~/.surf/cookies.txt";
19 +static char *dldir = "~/dl/";
20 +static char *dlstatus = "~/.surf/dlstatus/";
21
22 /* Webkit default features */
23 /* Highest priority value will be used.
24 @@ -76,13 +78,12 @@ static WebKitFindOptions findopts = WEBKIT_FIND_OPTI…
25 } \
26 }
27
28 -/* DOWNLOAD(URI, referer) */
29 -#define DOWNLOAD(u, r) { \
30 +#define DLSTATUS { \
31 .v = (const char *[]){ "st", "-e", "/bin/sh", "-c",\
32 - "curl -g -L -J -O -A \"$1\" -b \"$2\" -c \"$2\"" \
33 - " -e \"$3\" \"$4\"; read", \
34 - "surf-download", useragent, cookiefile, r, u, NULL \
35 - } \
36 + "while true; do cat $1/* 2>/dev/null || echo \"no hay desca…
37 + "A=; read A; "\
38 + "if [ $A = \"clean\" ]; then rm $1/*; fi; clear; done",\
39 + "surf-dlstatus", dlstatus, NULL } \
40 }
41
42 /* PLUMB(URI) */
43 @@ -180,6 +181,9 @@ static Key keys[] = {
44 { MODKEY|GDK_SHIFT_MASK, GDK_KEY_b, toggle, { .i = Scr…
45 { MODKEY|GDK_SHIFT_MASK, GDK_KEY_t, toggle, { .i = Str…
46 { MODKEY|GDK_SHIFT_MASK, GDK_KEY_m, toggle, { .i = Sty…
47 +
48 + /* download-console */
49 + { MODKEY, GDK_KEY_d, spawndls, { 0 } },
50 };
51
52 /* button definitions */
53 diff --git a/surf.c b/surf.c
54 index 2b54e3c..771858e 100644
55 --- a/surf.c
56 +++ b/surf.c
57 @@ -205,10 +205,6 @@ static void decidenewwindow(WebKitPolicyDecision *d…
58 static void decideresource(WebKitPolicyDecision *d, Client *c);
59 static void insecurecontent(WebKitWebView *v, WebKitInsecureContentEven…
60 Client *c);
61 -static void downloadstarted(WebKitWebContext *wc, WebKitDownload *d,
62 - Client *c);
63 -static void responsereceived(WebKitDownload *d, GParamSpec *ps, Client …
64 -static void download(Client *c, WebKitURIResponse *r);
65 static void webprocessterminated(WebKitWebView *v,
66 WebKitWebProcessTerminationReason r,
67 Client *c);
68 @@ -237,6 +233,17 @@ static void clicknavigate(Client *c, const Arg *a, …
69 static void clicknewwindow(Client *c, const Arg *a, WebKitHitTestResult…
70 static void clickexternplayer(Client *c, const Arg *a, WebKitHitTestRes…
71
72 +/* download-console */
73 +static void downloadstarted(WebKitWebContext *wc, WebKitDownload *d,
74 + Client *c);
75 +static void downloadfailed(WebKitDownload *d, GParamSpec *ps, void *arg…
76 +static void downloadfinished(WebKitDownload *d, GParamSpec *ps, void *a…
77 +static gboolean decidedestination(WebKitDownload *d,
78 + gchar *suggested_filename, void *arg);
79 +static void printprogress(WebKitDownload *d, GParamSpec *ps, void *arg);
80 +static void logdownload(WebKitDownload *d, gchar *tail);
81 +static void spawndls(Client *c, const Arg *a);
82 +
83 static char winid[64];
84 static char togglestats[12];
85 static char pagestats[2];
86 @@ -340,6 +347,8 @@ setup(void)
87 scriptfile = buildfile(scriptfile);
88 cachedir = buildpath(cachedir);
89 certdir = buildpath(certdir);
90 + dlstatus = buildpath(dlstatus);
91 + dldir = buildpath(dldir);
92
93 gdkkb = gdk_seat_get_keyboard(gdk_display_get_default_seat(gdpy…
94
95 @@ -1079,6 +1088,8 @@ cleanup(void)
96 g_free(scriptfile);
97 g_free(stylefile);
98 g_free(cachedir);
99 + g_free(dldir);
100 + g_free(dlstatus);
101 XCloseDisplay(dpy);
102 }
103
104 @@ -1710,8 +1721,7 @@ decideresource(WebKitPolicyDecision *d, Client *c)
105 if (webkit_response_policy_decision_is_mime_type_supported(r)) {
106 webkit_policy_decision_use(d);
107 } else {
108 - webkit_policy_decision_ignore(d);
109 - download(c, res);
110 + webkit_policy_decision_download(d);
111 }
112 }
113
114 @@ -1721,27 +1731,6 @@ insecurecontent(WebKitWebView *v, WebKitInsecureC…
115 c->insecure = 1;
116 }
117
118 -void
119 -downloadstarted(WebKitWebContext *wc, WebKitDownload *d, Client *c)
120 -{
121 - g_signal_connect(G_OBJECT(d), "notify::response",
122 - G_CALLBACK(responsereceived), c);
123 -}
124 -
125 -void
126 -responsereceived(WebKitDownload *d, GParamSpec *ps, Client *c)
127 -{
128 - download(c, webkit_download_get_response(d));
129 - webkit_download_cancel(d);
130 -}
131 -
132 -void
133 -download(Client *c, WebKitURIResponse *r)
134 -{
135 - Arg a = (Arg)DOWNLOAD(webkit_uri_response_get_uri(r), geturi(c)…
136 - spawn(c, &a);
137 -}
138 -
139 void
140 webprocessterminated(WebKitWebView *v, WebKitWebProcessTerminationReaso…
141 Client *c)
142 @@ -1971,6 +1960,81 @@ clickexternplayer(Client *c, const Arg *a, WebKit…
143 spawn(c, &arg);
144 }
145
146 +/* download-console */
147 +
148 +void
149 +downloadstarted(WebKitWebContext *wc, WebKitDownload *d, Client *c)
150 +{
151 + webkit_download_set_allow_overwrite(d, TRUE);
152 + g_signal_connect(G_OBJECT(d), "decide-destination",
153 + G_CALLBACK(decidedestination), NULL);
154 + g_signal_connect(G_OBJECT(d), "notify::estimated-progress",
155 + G_CALLBACK(printprogress), NULL);
156 + g_signal_connect(G_OBJECT(d), "failed",
157 + G_CALLBACK(downloadfailed), NULL);
158 + g_signal_connect(G_OBJECT(d), "finished",
159 + G_CALLBACK(downloadfinished), NULL);
160 +}
161 +
162 +void
163 +downloadfailed(WebKitDownload *d, GParamSpec *ps, void *arg)
164 +{
165 + logdownload(d, " -- FAILED");
166 +}
167 +
168 +void
169 +downloadfinished(WebKitDownload *d, GParamSpec *ps, void *arg)
170 +{
171 + logdownload(d, " -- COMPLETED");
172 +}
173 +
174 +gboolean
175 +decidedestination(WebKitDownload *d, gchar *suggested_filename, void *a…
176 +{
177 + gchar *dest;
178 + dest = g_strdup_printf("file://%s/%s", dldir, suggested_filenam…
179 + webkit_download_set_destination(d, dest);
180 + return TRUE;
181 +}
182 +
183 +void
184 +printprogress(WebKitDownload *d, GParamSpec *ps, void *arg)
185 +{
186 + logdownload(d, "");
187 +}
188 +
189 +void
190 +logdownload(WebKitDownload *d, gchar *tail)
191 +{
192 + gchar *filename, *statfile;
193 + FILE *stat;
194 +
195 + filename = g_path_get_basename(webkit_download_get_destination(…
196 + statfile = g_strdup_printf("%s/%s", dlstatus, filename);
197 +
198 + if ((stat = fopen(statfile, "w")) == NULL) {
199 + perror("dlstatus");
200 + } else {
201 + fprintf(stat, "%s: %d%% (%d.%ds)%s\n",
202 + filename,
203 + (int)(webkit_download_get_estimated_progress(d)…
204 + (int) webkit_download_get_elapsed_time(d),
205 + (int)(webkit_download_get_elapsed_time(d) * 100…
206 + tail);
207 + fclose(stat);
208 + }
209 +
210 + g_free(statfile);
211 + g_free(filename);
212 +}
213 +
214 +void
215 +spawndls(Client *c, const Arg *a)
216 +{
217 + Arg arg = (Arg)DLSTATUS;
218 + spawn(c, &arg);
219 +}
220 +
221 int
222 main(int argc, char *argv[])
223 {
224 --
225 2.22.1
226
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.