Add basic XCF file support

This commit is contained in:
Paul Friederichsen 2023-07-09 07:27:47 -05:00
parent 64f946c58f
commit c5eaa9a843
4 changed files with 10 additions and 3 deletions

View File

@ -744,7 +744,7 @@ class ThumbnailCache( object ):
self._special_thumbs = {} self._special_thumbs = {}
names = [ 'hydrus', 'pdf', 'psd', 'clip', 'sai', 'krita', 'svg', 'audio', 'video', 'zip' ] names = [ 'hydrus', 'pdf', 'psd', 'clip', 'sai', 'krita', 'xcf', 'svg', 'audio', 'video', 'zip' ]
bounding_dimensions = self._controller.options[ 'thumbnail_dimensions' ] bounding_dimensions = self._controller.options[ 'thumbnail_dimensions' ]
thumbnail_scale_type = self._controller.new_options.GetInteger( 'thumbnail_scale_type' ) thumbnail_scale_type = self._controller.new_options.GetInteger( 'thumbnail_scale_type' )
@ -862,6 +862,7 @@ class ThumbnailCache( object ):
elif mime == HC.APPLICATION_PSD: return self._special_thumbs[ 'psd' ] elif mime == HC.APPLICATION_PSD: return self._special_thumbs[ 'psd' ]
elif mime == HC.APPLICATION_SAI2: return self._special_thumbs[ 'sai' ] elif mime == HC.APPLICATION_SAI2: return self._special_thumbs[ 'sai' ]
elif mime == HC.APPLICATION_KRITA: return self._special_thumbs[ 'krita' ] elif mime == HC.APPLICATION_KRITA: return self._special_thumbs[ 'krita' ]
elif mime == HC.APPLICATION_XCF: return self._special_thumbs[ 'xcf' ]
elif mime == HC.IMAGE_SVG: return self._special_thumbs[ 'svg' ] elif mime == HC.IMAGE_SVG: return self._special_thumbs[ 'svg' ]
elif mime in HC.ARCHIVES: return self._special_thumbs[ 'zip' ] elif mime in HC.ARCHIVES: return self._special_thumbs[ 'zip' ]
else: return self._special_thumbs[ 'hydrus' ] else: return self._special_thumbs[ 'hydrus' ]

View File

@ -716,12 +716,13 @@ AUDIO_WAVPACK = 53
APPLICATION_SAI2 = 54 APPLICATION_SAI2 = 54
APPLICATION_KRITA = 55 APPLICATION_KRITA = 55
IMAGE_SVG = 56 IMAGE_SVG = 56
APPLICATION_XCF = 57
APPLICATION_OCTET_STREAM = 100 APPLICATION_OCTET_STREAM = 100
APPLICATION_UNKNOWN = 101 APPLICATION_UNKNOWN = 101
GENERAL_FILETYPES = { GENERAL_APPLICATION, GENERAL_AUDIO, GENERAL_IMAGE, GENERAL_VIDEO, GENERAL_ANIMATION } GENERAL_FILETYPES = { GENERAL_APPLICATION, GENERAL_AUDIO, GENERAL_IMAGE, GENERAL_VIDEO, GENERAL_ANIMATION }
SEARCHABLE_MIMES = { IMAGE_JPEG, IMAGE_PNG, IMAGE_APNG, IMAGE_GIF, IMAGE_WEBP, IMAGE_TIFF, IMAGE_ICON, IMAGE_SVG, APPLICATION_FLASH, VIDEO_AVI, VIDEO_FLV, VIDEO_MOV, VIDEO_MP4, VIDEO_MKV, VIDEO_REALMEDIA, VIDEO_WEBM, VIDEO_OGV, VIDEO_MPEG, APPLICATION_CLIP, APPLICATION_PSD, APPLICATION_SAI2, APPLICATION_KRITA, APPLICATION_PDF, APPLICATION_ZIP, APPLICATION_RAR, APPLICATION_7Z, AUDIO_M4A, AUDIO_MP3, AUDIO_REALMEDIA, AUDIO_OGG, AUDIO_FLAC, AUDIO_WAVE, AUDIO_TRUEAUDIO, AUDIO_WMA, VIDEO_WMV, AUDIO_MKV, AUDIO_MP4, AUDIO_WAVPACK } SEARCHABLE_MIMES = { IMAGE_JPEG, IMAGE_PNG, IMAGE_APNG, IMAGE_GIF, IMAGE_WEBP, IMAGE_TIFF, IMAGE_ICON, IMAGE_SVG, APPLICATION_FLASH, VIDEO_AVI, VIDEO_FLV, VIDEO_MOV, VIDEO_MP4, VIDEO_MKV, VIDEO_REALMEDIA, VIDEO_WEBM, VIDEO_OGV, VIDEO_MPEG, APPLICATION_CLIP, APPLICATION_PSD, APPLICATION_SAI2, APPLICATION_KRITA, APPLICATION_XCF, APPLICATION_PDF, APPLICATION_ZIP, APPLICATION_RAR, APPLICATION_7Z, AUDIO_M4A, AUDIO_MP3, AUDIO_REALMEDIA, AUDIO_OGG, AUDIO_FLAC, AUDIO_WAVE, AUDIO_TRUEAUDIO, AUDIO_WMA, VIDEO_WMV, AUDIO_MKV, AUDIO_MP4, AUDIO_WAVPACK }
STORABLE_MIMES = set( SEARCHABLE_MIMES ).union( { APPLICATION_HYDRUS_UPDATE_CONTENT, APPLICATION_HYDRUS_UPDATE_DEFINITIONS } ) STORABLE_MIMES = set( SEARCHABLE_MIMES ).union( { APPLICATION_HYDRUS_UPDATE_CONTENT, APPLICATION_HYDRUS_UPDATE_DEFINITIONS } )
@ -737,7 +738,7 @@ AUDIO = { AUDIO_M4A, AUDIO_MP3, AUDIO_OGG, AUDIO_FLAC, AUDIO_WAVE, AUDIO_WMA, AU
VIDEO = { VIDEO_AVI, VIDEO_FLV, VIDEO_MOV, VIDEO_MP4, VIDEO_WMV, VIDEO_MKV, VIDEO_REALMEDIA, VIDEO_WEBM, VIDEO_OGV, VIDEO_MPEG } VIDEO = { VIDEO_AVI, VIDEO_FLV, VIDEO_MOV, VIDEO_MP4, VIDEO_WMV, VIDEO_MKV, VIDEO_REALMEDIA, VIDEO_WEBM, VIDEO_OGV, VIDEO_MPEG }
APPLICATIONS = { IMAGE_SVG, APPLICATION_FLASH, APPLICATION_PSD, APPLICATION_CLIP, APPLICATION_SAI2, APPLICATION_KRITA, APPLICATION_PDF, APPLICATION_ZIP, APPLICATION_RAR, APPLICATION_7Z } APPLICATIONS = { IMAGE_SVG, APPLICATION_FLASH, APPLICATION_PSD, APPLICATION_CLIP, APPLICATION_SAI2, APPLICATION_KRITA, APPLICATION_XCF, APPLICATION_PDF, APPLICATION_ZIP, APPLICATION_RAR, APPLICATION_7Z }
general_mimetypes_to_mime_groups = { general_mimetypes_to_mime_groups = {
GENERAL_APPLICATION : APPLICATIONS, GENERAL_APPLICATION : APPLICATIONS,
@ -797,6 +798,7 @@ mime_enum_lookup = {
'application/clip' : APPLICATION_CLIP, 'application/clip' : APPLICATION_CLIP,
'application/sai2': APPLICATION_SAI2, 'application/sai2': APPLICATION_SAI2,
'application/x-krita': APPLICATION_KRITA, 'application/x-krita': APPLICATION_KRITA,
'image/x-xcf' : APPLICATION_XCF,
'application/octet-stream' : APPLICATION_OCTET_STREAM, 'application/octet-stream' : APPLICATION_OCTET_STREAM,
'application/x-yaml' : APPLICATION_YAML, 'application/x-yaml' : APPLICATION_YAML,
'PDF document' : APPLICATION_PDF, 'PDF document' : APPLICATION_PDF,
@ -859,6 +861,7 @@ mime_string_lookup = {
APPLICATION_CLIP : 'clip', APPLICATION_CLIP : 'clip',
APPLICATION_SAI2 : 'sai2', APPLICATION_SAI2 : 'sai2',
APPLICATION_KRITA : 'kra', APPLICATION_KRITA : 'kra',
APPLICATION_XCF : 'xcf',
APPLICATION_ZIP : 'zip', APPLICATION_ZIP : 'zip',
APPLICATION_RAR : 'rar', APPLICATION_RAR : 'rar',
APPLICATION_7Z : '7z', APPLICATION_7Z : '7z',
@ -921,6 +924,7 @@ mime_mimetype_string_lookup = {
APPLICATION_CLIP : 'application/clip', APPLICATION_CLIP : 'application/clip',
APPLICATION_SAI2: 'application/sai2', APPLICATION_SAI2: 'application/sai2',
APPLICATION_KRITA: 'application/x-krita', APPLICATION_KRITA: 'application/x-krita',
APPLICATION_XCF : 'image/x-xcf',
APPLICATION_ZIP : 'application/zip', APPLICATION_ZIP : 'application/zip',
APPLICATION_RAR : 'application/vnd.rar', APPLICATION_RAR : 'application/vnd.rar',
APPLICATION_7Z : 'application/x-7z-compressed', APPLICATION_7Z : 'application/x-7z-compressed',
@ -983,6 +987,7 @@ mime_ext_lookup = {
APPLICATION_CLIP : '.clip', APPLICATION_CLIP : '.clip',
APPLICATION_SAI2: '.sai2', APPLICATION_SAI2: '.sai2',
APPLICATION_KRITA: '.kra', APPLICATION_KRITA: '.kra',
APPLICATION_XCF : '.xcf',
APPLICATION_ZIP : '.zip', APPLICATION_ZIP : '.zip',
APPLICATION_RAR : '.rar', APPLICATION_RAR : '.rar',
APPLICATION_7Z : '.7z', APPLICATION_7Z : '.7z',

View File

@ -67,6 +67,7 @@ headers_and_mime.extend( [
( ( ( 0, b'8BPS\x00\x02' ), ), HC.APPLICATION_PSD ), # PSB, which is basically PSD v2 and does giganto resolution ( ( ( 0, b'8BPS\x00\x02' ), ), HC.APPLICATION_PSD ), # PSB, which is basically PSD v2 and does giganto resolution
( ( ( 0, b'CSFCHUNK' ), ), HC.APPLICATION_CLIP ), ( ( ( 0, b'CSFCHUNK' ), ), HC.APPLICATION_CLIP ),
( ( ( 0, b'SAI-CANVAS' ), ), HC.APPLICATION_SAI2 ), ( ( ( 0, b'SAI-CANVAS' ), ), HC.APPLICATION_SAI2 ),
( ( ( 0, b'gimp xcf ' ), ), HC.APPLICATION_XCF ),
( ( ( 38, b'application/x-krita' ), ), HC.APPLICATION_KRITA ), # important this comes before zip files because this is also a zip file ( ( ( 38, b'application/x-krita' ), ), HC.APPLICATION_KRITA ), # important this comes before zip files because this is also a zip file
( ( ( 42, b'application/x-krita' ), ), HC.APPLICATION_KRITA ), # https://gitlab.freedesktop.org/xdg/shared-mime-info/-/blob/master/data/freedesktop.org.xml.in#L2829 ( ( ( 42, b'application/x-krita' ), ), HC.APPLICATION_KRITA ), # https://gitlab.freedesktop.org/xdg/shared-mime-info/-/blob/master/data/freedesktop.org.xml.in#L2829
( ( ( 58, b'application/x-krita' ), ), HC.APPLICATION_KRITA ), ( ( ( 58, b'application/x-krita' ), ), HC.APPLICATION_KRITA ),

BIN
static/xcf.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB