| 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 |