[wiki] [sites] Added dlconsole patch to surf || danoloan10
commit 741c07a7432bd896536c683c08d369f33a6bf11f
Author: danoloan10 <danoloan10_AT_tutanota.com>
Date: Thu Sep 19 18:44:42 2019 +0200
Added dlconsole patch to surf
This patch adds built-in downloads with a customizable console display
diff --git a/surf.suckless.org/patches/dlconsole/index.md b/surf.suckless.org/patches/dlconsole/index.md
new file mode 100644
index 00000000..543c018c
--- /dev/null
+++ b/surf.suckless.org/patches/dlconsole/index.md
_AT_@ -0,0 +1,24 @@
+Built-in downloading with console display
+=========================================
+
+Description
+-----------
+
+This patch removes the original downloading method of calling
+an external tool and adds built-in support for downloads, along with
+a simple console display with a list of downloads.
+
+To open the downloads list, press Ctrl+D. This list must be manually
+refreshed: simply press enter to do so. If you enter `clean` as a command,
+the list will be cleared. The shell command called to show the downloads
+is defined by the macro `DLSTATUS` in the `config.def.h` file.
+
+Download
+--------
+
+* [surf-dlconsole-20190919-d068a38.diff](surf-dlconsole-20190919-d068a38.diff) (20190919)
+
+Author
+------
+
+* danoloan10 <danoloan10_AT_gmail.com>
diff --git a/surf.suckless.org/patches/dlconsole/surf-dlconsole-20190919-d068a38.diff b/surf.suckless.org/patches/dlconsole/surf-dlconsole-20190919-d068a38.diff
new file mode 100644
index 00000000..28a49e04
--- /dev/null
+++ b/surf.suckless.org/patches/dlconsole/surf-dlconsole-20190919-d068a38.diff
_AT_@ -0,0 +1,226 @@
+From 0ea5ecb238b932c533413b912b7981a737af56cf Mon Sep 17 00:00:00 2001
+From: danoloan10 <danoloan10_AT_tutanota.com>
+Date: Thu, 19 Sep 2019 18:25:59 +0200
+Subject: [PATCH] Basic integrated downloads via console display
+
+---
+ config.def.h | 16 ++++---
+ surf.c | 118 +++++++++++++++++++++++++++++++++++++++------------
+ 2 files changed, 101 insertions(+), 33 deletions(-)
+
+diff --git a/config.def.h b/config.def.h
+index 34265f6..375be93 100644
+--- a/config.def.h
++++ b/config.def.h
+_AT_@ -6,6 +6,8 @@ static char *styledir = "~/.surf/styles/";
+ static char *certdir = "~/.surf/certificates/";
+ static char *cachedir = "~/.surf/cache/";
+ static char *cookiefile = "~/.surf/cookies.txt";
++static char *dldir = "~/dl/";
++static char *dlstatus = "~/.surf/dlstatus/";
+
+ /* Webkit default features */
+ /* Highest priority value will be used.
+_AT_@ -76,13 +78,12 @@ static WebKitFindOptions findopts = WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE |
+ } \
+ }
+
+-/* DOWNLOAD(URI, referer) */
+-#define DOWNLOAD(u, r) { \
++#define DLSTATUS { \
+ .v = (const char *[]){ "st", "-e", "/bin/sh", "-c",\
+- "curl -g -L -J -O -A \"$1\" -b \"$2\" -c \"$2\"" \
+- " -e \"$3\" \"$4\"; read", \
+- "surf-download", useragent, cookiefile, r, u, NULL \
+- } \
++ "while true; do cat $1/* 2>/dev/null || echo \"no hay descargas\";"\
++ "A=; read A; "\
++ "if [ $A = \"clean\" ]; then rm $1/*; fi; clear; done",\
++ "surf-dlstatus", dlstatus, NULL } \
+ }
+
+ /* PLUMB(URI) */
+_AT_@ -180,6 +181,9 @@ static Key keys[] = {
+ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_b, toggle, { .i = ScrollBars } },
+ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_t, toggle, { .i = StrictTLS } },
+ { MODKEY|GDK_SHIFT_MASK, GDK_KEY_m, toggle, { .i = Style } },
++
++ /* download-console */
++ { MODKEY, GDK_KEY_d, spawndls, { 0 } },
+ };
+
+ /* button definitions */
+diff --git a/surf.c b/surf.c
+index 2b54e3c..771858e 100644
+--- a/surf.c
++++ b/surf.c
+_AT_@ -205,10 +205,6 @@ static void decidenewwindow(WebKitPolicyDecision *d, Client *c);
+ static void decideresource(WebKitPolicyDecision *d, Client *c);
+ static void insecurecontent(WebKitWebView *v, WebKitInsecureContentEvent e,
+ Client *c);
+-static void downloadstarted(WebKitWebContext *wc, WebKitDownload *d,
+- Client *c);
+-static void responsereceived(WebKitDownload *d, GParamSpec *ps, Client *c);
+-static void download(Client *c, WebKitURIResponse *r);
+ static void webprocessterminated(WebKitWebView *v,
+ WebKitWebProcessTerminationReason r,
+ Client *c);
+_AT_@ -237,6 +233,17 @@ static void clicknavigate(Client *c, const Arg *a, WebKitHitTestResult *h);
+ static void clicknewwindow(Client *c, const Arg *a, WebKitHitTestResult *h);
+ static void clickexternplayer(Client *c, const Arg *a, WebKitHitTestResult *h);
+
++/* download-console */
++static void downloadstarted(WebKitWebContext *wc, WebKitDownload *d,
++ Client *c);
++static void downloadfailed(WebKitDownload *d, GParamSpec *ps, void *arg);
++static void downloadfinished(WebKitDownload *d, GParamSpec *ps, void *arg);
++static gboolean decidedestination(WebKitDownload *d,
++ gchar *suggested_filename, void *arg);
++static void printprogress(WebKitDownload *d, GParamSpec *ps, void *arg);
++static void logdownload(WebKitDownload *d, gchar *tail);
++static void spawndls(Client *c, const Arg *a);
++
+ static char winid[64];
+ static char togglestats[12];
+ static char pagestats[2];
+_AT_@ -340,6 +347,8 @@ setup(void)
+ scriptfile = buildfile(scriptfile);
+ cachedir = buildpath(cachedir);
+ certdir = buildpath(certdir);
++ dlstatus = buildpath(dlstatus);
++ dldir = buildpath(dldir);
+
+ gdkkb = gdk_seat_get_keyboard(gdk_display_get_default_seat(gdpy));
+
+_AT_@ -1079,6 +1088,8 @@ cleanup(void)
+ g_free(scriptfile);
+ g_free(stylefile);
+ g_free(cachedir);
++ g_free(dldir);
++ g_free(dlstatus);
+ XCloseDisplay(dpy);
+ }
+
+_AT_@ -1710,8 +1721,7 @@ decideresource(WebKitPolicyDecision *d, Client *c)
+ if (webkit_response_policy_decision_is_mime_type_supported(r)) {
+ webkit_policy_decision_use(d);
+ } else {
+- webkit_policy_decision_ignore(d);
+- download(c, res);
++ webkit_policy_decision_download(d);
+ }
+ }
+
+_AT_@ -1721,27 +1731,6 @@ insecurecontent(WebKitWebView *v, WebKitInsecureContentEvent e, Client *c)
+ c->insecure = 1;
+ }
+
+-void
+-downloadstarted(WebKitWebContext *wc, WebKitDownload *d, Client *c)
+-{
+- g_signal_connect(G_OBJECT(d), "notify::response",
+- G_CALLBACK(responsereceived), c);
+-}
+-
+-void
+-responsereceived(WebKitDownload *d, GParamSpec *ps, Client *c)
+-{
+- download(c, webkit_download_get_response(d));
+- webkit_download_cancel(d);
+-}
+-
+-void
+-download(Client *c, WebKitURIResponse *r)
+-{
+- Arg a = (Arg)DOWNLOAD(webkit_uri_response_get_uri(r), geturi(c));
+- spawn(c, &a);
+-}
+-
+ void
+ webprocessterminated(WebKitWebView *v, WebKitWebProcessTerminationReason r,
+ Client *c)
+_AT_@ -1971,6 +1960,81 @@ clickexternplayer(Client *c, const Arg *a, WebKitHitTestResult *h)
+ spawn(c, &arg);
+ }
+
++/* download-console */
++
++void
++downloadstarted(WebKitWebContext *wc, WebKitDownload *d, Client *c)
++{
++ webkit_download_set_allow_overwrite(d, TRUE);
++ g_signal_connect(G_OBJECT(d), "decide-destination",
++ G_CALLBACK(decidedestination), NULL);
++ g_signal_connect(G_OBJECT(d), "notify::estimated-progress",
++ G_CALLBACK(printprogress), NULL);
++ g_signal_connect(G_OBJECT(d), "failed",
++ G_CALLBACK(downloadfailed), NULL);
++ g_signal_connect(G_OBJECT(d), "finished",
++ G_CALLBACK(downloadfinished), NULL);
++}
++
++void
++downloadfailed(WebKitDownload *d, GParamSpec *ps, void *arg)
++{
++ logdownload(d, " -- FAILED");
++}
++
++void
++downloadfinished(WebKitDownload *d, GParamSpec *ps, void *arg)
++{
++ logdownload(d, " -- COMPLETED");
++}
++
++gboolean
++decidedestination(WebKitDownload *d, gchar *suggested_filename, void *arg)
++{
++ gchar *dest;
++ dest = g_strdup_printf("file://%s/%s", dldir, suggested_filename);
++ webkit_download_set_destination(d, dest);
++ return TRUE;
++}
++
++void
++printprogress(WebKitDownload *d, GParamSpec *ps, void *arg)
++{
++ logdownload(d, "");
++}
++
++void
++logdownload(WebKitDownload *d, gchar *tail)
++{
++ gchar *filename, *statfile;
++ FILE *stat;
++
++ filename = g_path_get_basename(webkit_download_get_destination(d));
++ statfile = g_strdup_printf("%s/%s", dlstatus, filename);
++
++ if ((stat = fopen(statfile, "w")) == NULL) {
++ perror("dlstatus");
++ } else {
++ fprintf(stat, "%s: %d%% (%d.%ds)%s
",
++ filename,
++ (int)(webkit_download_get_estimated_progress(d) * 100),
++ (int) webkit_download_get_elapsed_time(d),
++ (int)(webkit_download_get_elapsed_time(d) * 100),
++ tail);
++ fclose(stat);
++ }
++
++ g_free(statfile);
++ g_free(filename);
++}
++
++void
++spawndls(Client *c, const Arg *a)
++{
++ Arg arg = (Arg)DLSTATUS;
++ spawn(c, &arg);
++}
++
+ int
+ main(int argc, char *argv[])
+ {
+--
+2.22.1
+
Received on Thu Sep 19 2019 - 18:44:49 CEST
This archive was generated by hypermail 2.3.0
: Thu Sep 19 2019 - 18:48:28 CEST