Blender V4.3
thumbs.cc File Reference
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include "MEM_guardedalloc.h"
#include "BKE_blendfile.hh"
#include "BLI_fileops.h"
#include "BLI_ghash.h"
#include "BLI_hash_md5.hh"
#include "BLI_path_utils.hh"
#include "BLI_string.h"
#include "BLI_string_utils.hh"
#include "BLI_system.h"
#include "BLI_threads.h"
#include "BLI_utildefines.h"
#include "DNA_space_types.h"
#include "IMB_imbuf.hh"
#include "IMB_imbuf_types.hh"
#include "IMB_metadata.hh"
#include "IMB_thumbs.hh"
#include <cctype>
#include <cstring>
#include <ctime>
#include <sys/stat.h>
#include <sys/types.h>

Go to the source code of this file.

Classes

struct  IMBThumbLocks
 

Macros

#define USE_FREEDESKTOP
 
#define THUMBNAILS   "thumbnails"
 
#define URI_MAX   (FILE_MAX * 3 + 8)
 
#define ACCEPTABLE(a)   ((a) >= 32 && (a) < 128 && (acceptable[(a)-32] & mask))
 

Functions

static bool get_thumb_dir (char *dir, ThumbSize size)
 
static bool thumbhash_from_path (const char *, ThumbSource source, char *r_hash)
 
static bool uri_from_filename (const char *path, char *uri)
 
static bool thumbpathname_from_uri (const char *uri, char *r_path, const int path_maxncpy, char *r_name, int name_maxncpy, ThumbSize size)
 
static void thumbname_from_uri (const char *uri, char *thumb, const int thumb_maxncpy)
 
static bool thumbpath_from_uri (const char *uri, char *path, const int path_maxncpy, ThumbSize size)
 
void IMB_thumb_makedirs ()
 
static ImBufthumb_create_ex (const char *file_path, const char *uri, const char *thumb, const bool use_hash, const char *hash, const char *blen_group, const char *blen_id, ThumbSize size, ThumbSource source, ImBuf *img)
 
static ImBufthumb_create_or_fail (const char *file_path, const char *uri, const char *thumb, const bool use_hash, const char *hash, const char *blen_group, const char *blen_id, ThumbSize size, ThumbSource source)
 
ImBufIMB_thumb_create (const char *filepath, ThumbSize size, ThumbSource source, ImBuf *img)
 
ImBufIMB_thumb_read (const char *file_or_lib_path, ThumbSize size)
 
void IMB_thumb_delete (const char *file_or_lib_path, ThumbSize size)
 
ImBufIMB_thumb_manage (const char *file_or_lib_path, ThumbSize size, ThumbSource source)
 
void IMB_thumb_locks_acquire ()
 
void IMB_thumb_locks_release ()
 
void IMB_thumb_path_lock (const char *path)
 
void IMB_thumb_path_unlock (const char *path)
 

Variables

static struct IMBThumbLocks thumb_locks = {nullptr}
 

Escape URI String

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 released under the Gnu General Public License.

enum  eUnsafeCharacterSet {
  UNSAFE_ALL = 0x1 , UNSAFE_ALLOW_PLUS = 0x2 , UNSAFE_PATH = 0x8 , UNSAFE_HOST = 0x10 ,
  UNSAFE_SLASHES = 0x20
}
 
static const uchar acceptable [96]
 
static const char hex [17] = "0123456789abcdef"
 
static void escape_uri_string (const char *string, char *escaped_string, const int escaped_string_size, const eUnsafeCharacterSet mask)
 

Macro Definition Documentation

◆ ACCEPTABLE

#define ACCEPTABLE ( a)    ((a) >= 32 && (a) < 128 && (acceptable[(a)-32] & mask))

Referenced by escape_uri_string().

◆ THUMBNAILS

#define THUMBNAILS   "thumbnails"

Definition at line 64 of file thumbs.cc.

Referenced by get_thumb_dir().

◆ URI_MAX

◆ USE_FREEDESKTOP

#define USE_FREEDESKTOP

Definition at line 59 of file thumbs.cc.

Enumeration Type Documentation

◆ eUnsafeCharacterSet

Enumerator
UNSAFE_ALL 
UNSAFE_ALLOW_PLUS 
UNSAFE_PATH 
UNSAFE_HOST 
UNSAFE_SLASHES 

Definition at line 132 of file thumbs.cc.

Function Documentation

◆ escape_uri_string()

static void escape_uri_string ( const char * string,
char * escaped_string,
const int escaped_string_size,
const eUnsafeCharacterSet mask )
static

Definition at line 163 of file thumbs.cc.

References ACCEPTABLE, BLI_assert, and hex.

Referenced by uri_from_filename().

◆ get_thumb_dir()

static bool get_thumb_dir ( char * dir,
ThumbSize size )
static

◆ IMB_thumb_create()

ImBuf * IMB_thumb_create ( const char * filepath,
ThumbSize size,
ThumbSource source,
ImBuf * img )

Create thumbnail for file and returns new ImBuf for thumbnail.

Parameters
filepathFile path (but not a library path!) to the thumbnail to be created.

Definition at line 485 of file thumbs.cc.

References thumb_create_ex(), THUMB_DEFAULT_HASH, thumbname_from_uri(), uri_from_filename(), and URI_MAX.

Referenced by wm_file_write().

◆ IMB_thumb_delete()

void IMB_thumb_delete ( const char * file_or_lib_path,
ThumbSize size )

Delete all thumbs for the file.

Parameters
file_or_lib_pathFile path or library-ID path (e.g. /a/b.blend/Material/MyMaterial) to the thumbnail to be deleted.

Definition at line 515 of file thumbs.cc.

References BLI_delete(), BLI_exists(), BLI_path_ncmp, FILE_MAX, thumbpath_from_uri(), uri_from_filename(), and URI_MAX.

Referenced by IMB_thumb_manage(), and wm_file_write().

◆ IMB_thumb_locks_acquire()

◆ IMB_thumb_locks_release()

◆ IMB_thumb_makedirs()

void IMB_thumb_makedirs ( )

Create the necessary directories to store the thumbnails.

Definition at line 298 of file thumbs.cc.

References BLI_dir_create_recursive(), FILE_MAX, get_thumb_dir(), THB_FAIL, THB_LARGE, and THB_NORMAL.

Referenced by ED_file_init().

◆ IMB_thumb_manage()

ImBuf * IMB_thumb_manage ( const char * file_or_lib_path,
ThumbSize size,
ThumbSource source )

Create the thumb if necessary and manage failed and old thumbs. Will not attempt to (re)create thumbnails of offline files. In this case only a preexisting thumbnail is returned, or null if none was found.

Parameters
file_or_lib_pathFile path or library-ID path (e.g. /a/b.blend/Material/MyMaterial) to the thumbnail to be created/managed.

Definition at line 533 of file thumbs.cc.

References BKE_blendfile_library_path_explode(), BLI_delete(), BLI_exists(), BLI_file_attributes(), BLI_file_older(), BLI_path_ncmp, BLI_stat(), FILE_ATTR_OFFLINE, FILE_MAX, FILE_MAX_LIBEXTRA, IB_metadata, IB_rect, IMB_freeImBuf(), imb_freerectfloatImBuf(), IMB_loadiffname(), IMB_metadata_get_field(), IMB_rect_from_float(), IMB_thumb_delete(), ImBuf::metadata, STREQ, THB_FAIL, THB_LARGE, THB_NORMAL, THB_SOURCE_BLEND, thumb_create_or_fail(), thumbhash_from_path(), thumbpath_from_uri(), thumbpathname_from_uri(), uri_from_filename(), and URI_MAX.

Referenced by BKE_previewimg_ensure(), file_draw_tooltip_custom_func(), and filelist_cache_preview_runf().

◆ IMB_thumb_path_lock()

◆ IMB_thumb_path_unlock()

◆ IMB_thumb_read()

ImBuf * IMB_thumb_read ( const char * file_or_lib_path,
ThumbSize size )

Read thumbnail for file and returns new ImBuf for thumbnail.

Parameters
file_or_lib_pathFile path or library-ID path (e.g. /a/b.blend/Material/MyMaterial) to the thumbnail to be read.

Definition at line 499 of file thumbs.cc.

References FILE_MAX, IB_metadata, IB_rect, IMB_loadiffname(), thumbpath_from_uri(), uri_from_filename(), and URI_MAX.

Referenced by file_draw_tooltip_custom_func(), and uiTemplateRecentFiles_tooltip_func().

◆ thumb_create_ex()

◆ thumb_create_or_fail()

static ImBuf * thumb_create_or_fail ( const char * file_path,
const char * uri,
const char * thumb,
const bool use_hash,
const char * hash,
const char * blen_group,
const char * blen_id,
ThumbSize size,
ThumbSource source )
static

Definition at line 458 of file thumbs.cc.

References hash, IMB_freeImBuf(), THB_FAIL, and thumb_create_ex().

Referenced by IMB_thumb_manage().

◆ thumbhash_from_path()

static bool thumbhash_from_path ( const char * ,
ThumbSource source,
char * r_hash )
static

Definition at line 204 of file thumbs.cc.

References IMB_thumb_load_font_get_hash(), and THB_SOURCE_FONT.

Referenced by IMB_thumb_manage().

◆ thumbname_from_uri()

static void thumbname_from_uri ( const char * uri,
char * thumb,
const int thumb_maxncpy )
static

Definition at line 288 of file thumbs.cc.

References THB_FAIL, and thumbpathname_from_uri().

Referenced by IMB_thumb_create().

◆ thumbpath_from_uri()

static bool thumbpath_from_uri ( const char * uri,
char * path,
const int path_maxncpy,
ThumbSize size )
static

Definition at line 293 of file thumbs.cc.

References thumbpathname_from_uri().

Referenced by IMB_thumb_delete(), IMB_thumb_manage(), and IMB_thumb_read().

◆ thumbpathname_from_uri()

static bool thumbpathname_from_uri ( const char * uri,
char * r_path,
const int path_maxncpy,
char * r_name,
int name_maxncpy,
ThumbSize size )
static

◆ uri_from_filename()

static bool uri_from_filename ( const char * path,
char * uri )
static

Variable Documentation

◆ acceptable

const uchar acceptable[96]
static
Initial value:
= {
0x00,0x3F,0x20,0x20,0x28,0x00,0x2C,0x3F,0x3F,0x3F,0x3F,0x2A,0x28,0x3F,0x3F,0x1C,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x38,0x20,0x20,0x2C,0x20,0x20,
0x38,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x20,0x20,0x20,0x20,0x3F,
0x20,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x20,0x20,0x20,0x3F,0x20,
}

Definition at line 142 of file thumbs.cc.

◆ hex

const char hex[17] = "0123456789abcdef"
static

◆ thumb_locks