Todo T36849: support XDG thumbnail management standard

This commit is contained in:
Campbell Barton 2014-04-07 08:42:08 +10:00
parent 1194037327
commit be8b4b8b0c

@ -66,9 +66,22 @@
# include "utfconv.h" # include "utfconv.h"
#endif #endif
#if defined(WIN32) || defined(__APPLE__)
/* pass */
#else
# define USE_FREEDESKTOP
#endif
/* '$HOME/.cache/thumbnails' or '$HOME/.thumbnails' */
#ifdef USE_FREEDESKTOP
# define THUMBNAILS "thumbnails"
#else
# define THUMBNAILS ".thumbnails"
#endif
#define URI_MAX (FILE_MAX * 3 + 8) #define URI_MAX (FILE_MAX * 3 + 8)
static int get_thumb_dir(char *dir, ThumbSize size) static bool get_thumb_dir(char *dir, ThumbSize size)
{ {
char *s = dir; char *s = dir;
const char *subdir; const char *subdir;
@ -78,20 +91,30 @@ static int get_thumb_dir(char *dir, ThumbSize size)
SHGetSpecialFolderPathW(0, dir_16, CSIDL_PROFILE, 0); SHGetSpecialFolderPathW(0, dir_16, CSIDL_PROFILE, 0);
conv_utf_16_to_8(dir_16, dir, FILE_MAX); conv_utf_16_to_8(dir_16, dir, FILE_MAX);
s += strlen(dir); s += strlen(dir);
#elif defined(USE_FREEDESKTOP)
const char *home_cache = getenv("XDG_CACHE_HOME");
const char *home = home_cache ? home_cache : getenv("HOME");
#else #else
const char *home = getenv("HOME"); const char *home = getenv("HOME");
#endif
if (!home) return 0; if (!home) return 0;
s += BLI_strncpy_rlen(s, home, FILE_MAX); s += BLI_strncpy_rlen(s, home, FILE_MAX);
#ifdef USE_FREEDESKTOP
if (!home_cache) {
s += BLI_strncpy_rlen(s, "/.cache", FILE_MAX - (s - dir));
}
#endif #endif
switch (size) { switch (size) {
case THB_NORMAL: case THB_NORMAL:
subdir = "/.thumbnails/normal/"; subdir = "/" THUMBNAILS "/normal/";
break; break;
case THB_LARGE: case THB_LARGE:
subdir = "/.thumbnails/large/"; subdir = "/" THUMBNAILS "/large/";
break; break;
case THB_FAIL: case THB_FAIL:
subdir = "/.thumbnails/fail/blender/"; subdir = "/" THUMBNAILS "/fail/blender/";
break; break;
default: default:
return 0; /* unknown size */ return 0; /* unknown size */
@ -103,6 +126,9 @@ static int get_thumb_dir(char *dir, ThumbSize size)
return 1; return 1;
} }
#undef THUMBNAILS
/** ----- begin of adapted code from glib --- /** ----- begin of adapted code from glib ---
* The following code is adapted from function g_escape_uri_string from the gnome glib * The following code is adapted from function g_escape_uri_string from the gnome glib
* Source: http://svn.gnome.org/viewcvs/glib/trunk/glib/gconvert.c?view=markup * Source: http://svn.gnome.org/viewcvs/glib/trunk/glib/gconvert.c?view=markup