sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

commit 741c07a7432bd896536c683c08d369f33a6bf11f
parent abdaf79c9b35bf21f02f8dff3e8a0b1aff4f3297
Author: danoloan10 <danoloan10@tutanota.com>
Date:   Thu, 19 Sep 2019 18:44:42 +0200

Added dlconsole patch to surf

This patch adds built-in downloads with a customizable console display

Diffstat:
Asurf.suckless.org/patches/dlconsole/index.md | 24++++++++++++++++++++++++
Asurf.suckless.org/patches/dlconsole/surf-dlconsole-20190919-d068a38.diff | 226+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 250 insertions(+), 0 deletions(-)

diff --git a/surf.suckless.org/patches/dlconsole/index.md b/surf.suckless.org/patches/dlconsole/index.md @@ -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@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 @@ -0,0 +1,226 @@ +From 0ea5ecb238b932c533413b912b7981a737af56cf Mon Sep 17 00:00:00 2001 +From: danoloan10 <danoloan10@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 +@@ -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. +@@ -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) */ +@@ -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 +@@ -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); +@@ -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]; +@@ -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)); + +@@ -1079,6 +1088,8 @@ cleanup(void) + g_free(scriptfile); + g_free(stylefile); + g_free(cachedir); ++ g_free(dldir); ++ g_free(dlstatus); + XCloseDisplay(dpy); + } + +@@ -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); + } + } + +@@ -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) +@@ -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\n", ++ 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 +