summaryrefslogtreecommitdiff
path: root/src/thumbnail.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/thumbnail.c')
-rw-r--r--src/thumbnail.c67
1 files changed, 45 insertions, 22 deletions
diff --git a/src/thumbnail.c b/src/thumbnail.c
index 43168c4..d400507 100644
--- a/src/thumbnail.c
+++ b/src/thumbnail.c
@@ -582,21 +582,39 @@ int feh_thumbnail_get_thumbnail(Imlib_Image * image, feh_file * file,
return status;
}
+static char *feh_thumbnail_get_prefix()
+{
+ char *dir = NULL, *home, *xdg_cache_home;
+
+ // TODO: perhaps make sure that either of those paths aren't /-terminated
+
+ xdg_cache_home = getenv("XDG_CACHE_HOME");
+ if (xdg_cache_home && xdg_cache_home[0] == '/') {
+ dir = estrjoin("/", xdg_cache_home, "thumbnails", td.cache_dir, NULL);
+ } else {
+ home = getenv("HOME");
+ if (home && home[0] == '/') {
+ dir = estrjoin("/", home, ".cache/thumbnails", td.cache_dir, NULL);
+ }
+ }
+
+ return dir;
+}
+
char *feh_thumbnail_get_name(char *uri)
{
- char *home = NULL, *thumb_file = NULL, *md5_name = NULL;
+ char *prefix, *thumb_file = NULL, *md5_name;
/* FIXME: make sure original file isn't under ~/.thumbnails */
- md5_name = feh_thumbnail_get_name_md5(uri);
-
- home = getenv("HOME");
- if (home) {
- thumb_file = estrjoin("/", home, ".thumbnails", td.cache_dir, md5_name, NULL);
+ prefix = feh_thumbnail_get_prefix();
+ if (prefix) {
+ md5_name = feh_thumbnail_get_name_md5(uri);
+ thumb_file = estrjoin("/", prefix, md5_name, NULL);
+ free(md5_name);
+ free(prefix);
}
- free(md5_name);
-
return thumb_file;
}
@@ -847,31 +865,36 @@ int feh_thumbnail_setup_thumbnail_dir(void)
{
int status = 0;
struct stat sb;
- char *dir, *dir_thumbnails, *home;
+ char *dir, *p;
- home = getenv("HOME");
- if (home != NULL) {
- dir = estrjoin("/", home, ".thumbnails", td.cache_dir, NULL);
+ dir = feh_thumbnail_get_prefix();
+ if (dir) {
if (!stat(dir, &sb)) {
if (S_ISDIR(sb.st_mode))
status = 1;
else
weprintf("%s should be a directory", dir);
} else {
- dir_thumbnails = estrjoin("/", home, ".thumbnails", NULL);
+ for (p = dir + 1; *p; p++) {
+ if (*p != '/') {
+ continue;
+ }
- if (stat(dir_thumbnails, &sb) != 0) {
- if (mkdir(dir_thumbnails, 0700) == -1)
- weprintf("unable to create directory %s", dir_thumbnails);
+ *p = 0;
+ if (stat(dir, &sb) != 0) {
+ if (mkdir(dir, 0700) == -1) {
+ weprintf("unable to create directory %s", dir);
+ }
+ }
+ *p = '/';
}
- free(dir_thumbnails);
-
- if (mkdir(dir, 0700) == -1)
- weprintf("unable to create directory %s", dir);
- else
- status = 1;
+ if (stat(dir, &sb) != 0) {
+ if (mkdir(dir, 0700) == -1) {
+ weprintf("unable to create directory %s", dir);
+ }
+ }
}
free(dir);
}