The Thumbnailers Cache Format ============================= Date: 2006-08-08 Author: Benedikt Meurer <benny@xfce.org> Revision: $Rev$ Motivation ---------- In order to avoid a dependency of libthunar-vfs-1.so on GConf and in order to stay flexible wrt thumbnailers w/o adding more overhead to libthunar-vfs-1.so (and thereby to all applications using the library), the available thumbnailers for the ThunarVfsThumbFactory are determined by a separate utility program, named thunar-vfs-update-thumbnailers-cache-1, which is installed to the $(libexecdir). This program generates a thumbnailers.cache file in the users home directory, in $XDG_CACHE_HOME/Thunar/ (usually ~/.cache/Thunar/), which is a binary file that lists all mime types for a thumbnailer is available. For each thumbnailer the command required to run it is specified, where the command can contain various special parameters that are substituted when the command is run. This thumbnailers.cache is generated initially when the thumbnail factory is loaded and no cache file is present, and afterwards the utility is run every 5 minutes to check if new thumbnailers are available (or existing thumbnailers have been removed). Special Thumbnailer Parameters ------------------------------ The following special parameters are supported in thumbnailer commands and will be substituted when ThunarVfsThumbFactory runs the command: %u The URL of the input file for which to create a thumbnail. %i The absolute path to the input file. %o The absolute path to the output file where to save the generated thumbnail to (as PNG image). %s The desired size of the thumbnail in pixel (usually 128 or 256). %% Will be substituted with a single '%'. The thunar-vfs-update-thumbnailers-cache-1 Utility -------------------------------------------------- When compiled with support for GConf, the utility will first query all available thumbnailers that have been registered with GConf. Otherwise, the utility checks for several well-known thumbnailers (i.e. evince-thumbnailer, ...) and adds them if the programs were found on the system. Afterwards the available gdk-pixbuf formats will be queried and for each of the returned mime types, the thunar-vfs-pixbuf-thumbnailer-1 will be registered. If any such mime type was already registered by a thumbnailer queried from the GConf database, the pixbuf thumbnailer will overwrite the previously registered one. The last step is to add all internal thumbnails (again overwriting previously registered thumbnailers). The thumbnailers.cache File Format ---------------------------------- The thumbnailers.cache file is a binary file, that maps mime types to thumbnai- ler commands. The file format is designed to be mmap()ed into processes using the thumbnailers.cache. All numbers are 32bit integers in big endian. All strings are zero-terminated ASCII strings. The current version of the file format is 1.0. Newer versions will either be backward compatible with the current format or use a new file name. The file starts with a header that contains the file format version, the number of mime types stored in the file and the offset of the thumbnailers table: Bits Meaning ---- ------- 32 FORMAT MAJOR VERSION (currently 1) 32 FORMAT MINOR VERSION (currently 0) 32 NUMER OF MIME TYPES (and thereby NUMBER OF THUMBNAILERS) 32 OFFSET OF THE THUMBNAILERS TABLE Next comes the table of mime types, where each entry contains the length of the mime type in bytes (excluding the trailing zero) and the offset (relative to the cache file start) where the name of the mime type is stored. The mime types are sorted by strlen() and strcmp(), which means that binary search can be used to find a mime type, trying the length first (so string comparisons are reduced to a minimum to make the search cache-friendly) and performing a string comparison when the lengths are equal (see thunar_vfs_thumb_factory_cache_lookup() for an example implementation of the search). Bits Meaning ---- ------- 32 LENGTH OF MIME TYPE STRING 32 OFFSET OF MIME TYPE STRING Once you successfully detected a mime type, you can use the index of the mime type in the table above to locate the thumbnailer command for this mime type. Therefore determine the OFFSET OF THE THUMBNAILERS TABLE (at offset 12 in the cache) and look at that offset plus the index * 4 for the offset of the thumb- nailer command string. Bits Meaning ---- ------- 32 OFFSET OF THUMBNAILER STRING Afterwards substitute the special parameters as mentioned in "Special Thumbnai- ler Parameters" above.