summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAwal Garg <awalgarg@gmail.com>2020-03-30 13:14:18 +0530
committerAwal Garg <awalgarg@gmail.com>2020-03-30 13:14:18 +0530
commitd2311c2332722ac0401e3441d9834c8b02491a82 (patch)
tree50f902c1b200b6d6552035b1df66eb3bb83d1e36
parentb89cf18dab68008de86d7461e800aae5e9d515b0 (diff)
Enable re-using downloaded http cache
-rw-r--r--src/imlib.c18
-rw-r--r--src/options.c4
-rw-r--r--src/options.h1
3 files changed, 21 insertions, 2 deletions
diff --git a/src/imlib.c b/src/imlib.c
index b9f071a..1786876 100644
--- a/src/imlib.c
+++ b/src/imlib.c
@@ -258,10 +258,13 @@ int feh_load_image(Imlib_Image * im, feh_file * file)
file->ed = exif_get_data(tmpname);
#endif
}
- if ((image_source != SRC_HTTP) || !opt.keep_http)
+ if ((image_source != SRC_HTTP) || (!opt.keep_http && !opt.use_http_cache))
unlink(tmpname);
+ else if (opt.use_http_cache && !opt.keep_http)
+ add_file_to_rm_filelist(tmpname);
- free(tmpname);
+ if (image_source != SRC_HTTP && !opt.use_http_cache)
+ free(tmpname);
}
if ((err) || (!im)) {
@@ -542,6 +545,8 @@ static char *feh_magick_load_image(char *filename)
#ifdef HAVE_LIBCURL
+gib_hash* http_cache = NULL;
+
#if LIBCURL_VERSION_NUM >= 0x072000 /* 07.32.0 */
static int curl_quit_function(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow)
#else
@@ -576,6 +581,13 @@ static char *feh_http_load_image(char *url)
char *basename;
char *path = NULL;
+ if (opt.use_http_cache) {
+ if (!http_cache)
+ http_cache = gib_hash_new();
+ if ((sfn = gib_hash_get(http_cache, url)) != NULL)
+ return sfn;
+ }
+
if (opt.keep_http) {
if (opt.output_dir)
path = opt.output_dir;
@@ -648,6 +660,8 @@ static char *feh_http_load_image(char *url)
free(ebuff);
fclose(sfp);
+ if (opt.use_http_cache)
+ gib_hash_set(http_cache, url, sfn);
return sfn;
} else {
weprintf("open url: fdopen failed:");
diff --git a/src/options.c b/src/options.c
index aae10c2..98b3eed 100644
--- a/src/options.c
+++ b/src/options.c
@@ -431,6 +431,7 @@ static void feh_parse_option_array(int argc, char **argv, int finalrun)
{"auto-reload" , 0, 0, 248},
#endif
{"class" , 1, 0, 249},
+ {"use-http-cache", 0, 0, 250},
{0, 0, 0, 0}
};
int optch = 0, cmdx = 0;
@@ -827,6 +828,9 @@ static void feh_parse_option_array(int argc, char **argv, int finalrun)
case 249:
opt.x11_class = estrdup(optarg);
break;
+ case 250:
+ opt.use_http_cache = 1;
+ break;
default:
break;
}
diff --git a/src/options.h b/src/options.h
index 93474a9..74ef33f 100644
--- a/src/options.h
+++ b/src/options.h
@@ -49,6 +49,7 @@ struct __fehoptions {
unsigned char aspect;
unsigned char stretch;
unsigned char keep_http;
+ unsigned char use_http_cache;
unsigned char borderless;
unsigned char randomize;
unsigned char jump_on_resort;