From 6105091251b80450d5853dc2e6f1d308a5c78526 Mon Sep 17 00:00:00 2001 From: Paul Friederichsen Date: Thu, 29 Jun 2023 12:30:37 -0500 Subject: [PATCH 1/3] Add support for sai2 files --- hydrus/client/caches/ClientCaches.py | 3 ++- hydrus/core/HydrusConstants.py | 9 +++++++-- hydrus/core/HydrusFileHandling.py | 1 + hydrus/core/HydrusPaths.py | 1 + static/sai.png | Bin 0 -> 56035 bytes 5 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 static/sai.png diff --git a/hydrus/client/caches/ClientCaches.py b/hydrus/client/caches/ClientCaches.py index f2582983..ab59fbb6 100644 --- a/hydrus/client/caches/ClientCaches.py +++ b/hydrus/client/caches/ClientCaches.py @@ -744,7 +744,7 @@ class ThumbnailCache( object ): self._special_thumbs = {} - names = [ 'hydrus', 'pdf', 'psd', 'clip', 'audio', 'video', 'zip' ] + names = [ 'hydrus', 'pdf', 'psd', 'clip', 'sai', 'audio', 'video', 'zip' ] bounding_dimensions = self._controller.options[ 'thumbnail_dimensions' ] thumbnail_scale_type = self._controller.new_options.GetInteger( 'thumbnail_scale_type' ) @@ -860,6 +860,7 @@ class ThumbnailCache( object ): elif mime in HC.VIDEO: return self._special_thumbs[ 'video' ] elif mime == HC.APPLICATION_PDF: return self._special_thumbs[ 'pdf' ] elif mime == HC.APPLICATION_PSD: return self._special_thumbs[ 'psd' ] + elif mime == HC.APPLICATION_SAI2: return self._special_thumbs[ 'sai' ] elif mime in HC.ARCHIVES: return self._special_thumbs[ 'zip' ] else: return self._special_thumbs[ 'hydrus' ] diff --git a/hydrus/core/HydrusConstants.py b/hydrus/core/HydrusConstants.py index 3a04333e..865d757b 100644 --- a/hydrus/core/HydrusConstants.py +++ b/hydrus/core/HydrusConstants.py @@ -713,12 +713,13 @@ UNDETERMINED_MP4 = 50 APPLICATION_CBOR = 51 APPLICATION_WINDOWS_EXE = 52 AUDIO_WAVPACK = 53 +APPLICATION_SAI2 = 54 APPLICATION_OCTET_STREAM = 100 APPLICATION_UNKNOWN = 101 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, 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_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, 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_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 } ) @@ -734,7 +735,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 } -APPLICATIONS = { APPLICATION_FLASH, APPLICATION_PSD, APPLICATION_CLIP, APPLICATION_PDF, APPLICATION_ZIP, APPLICATION_RAR, APPLICATION_7Z } +APPLICATIONS = { APPLICATION_FLASH, APPLICATION_PSD, APPLICATION_CLIP, APPLICATION_SAI2, APPLICATION_PDF, APPLICATION_ZIP, APPLICATION_RAR, APPLICATION_7Z } general_mimetypes_to_mime_groups = { GENERAL_APPLICATION : APPLICATIONS, @@ -791,6 +792,7 @@ mime_enum_lookup = { 'application/x-photoshop' : APPLICATION_PSD, 'image/vnd.adobe.photoshop' : APPLICATION_PSD, 'application/clip' : APPLICATION_CLIP, + 'application/sai2': APPLICATION_SAI2, 'application/octet-stream' : APPLICATION_OCTET_STREAM, 'application/x-yaml' : APPLICATION_YAML, 'PDF document' : APPLICATION_PDF, @@ -850,6 +852,7 @@ mime_string_lookup = { APPLICATION_PDF : 'pdf', APPLICATION_PSD : 'photoshop psd', APPLICATION_CLIP : 'clip', + APPLICATION_SAI2 : 'sai2', APPLICATION_ZIP : 'zip', APPLICATION_RAR : 'rar', APPLICATION_7Z : '7z', @@ -909,6 +912,7 @@ mime_mimetype_string_lookup = { APPLICATION_PDF : 'application/pdf', APPLICATION_PSD : 'application/x-photoshop', APPLICATION_CLIP : 'application/clip', + APPLICATION_SAI2: 'application/sai2', APPLICATION_ZIP : 'application/zip', APPLICATION_RAR : 'application/vnd.rar', APPLICATION_7Z : 'application/x-7z-compressed', @@ -968,6 +972,7 @@ mime_ext_lookup = { APPLICATION_PDF : '.pdf', APPLICATION_PSD : '.psd', APPLICATION_CLIP : '.clip', + APPLICATION_SAI2: '.sai2', APPLICATION_ZIP : '.zip', APPLICATION_RAR : '.rar', APPLICATION_7Z : '.7z', diff --git a/hydrus/core/HydrusFileHandling.py b/hydrus/core/HydrusFileHandling.py index a5f9d875..79d01934 100644 --- a/hydrus/core/HydrusFileHandling.py +++ b/hydrus/core/HydrusFileHandling.py @@ -64,6 +64,7 @@ headers_and_mime.extend( [ ( ( ( 0, b'8BPS\x00\x01' ), ), HC.APPLICATION_PSD ), ( ( ( 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'SAI' ), ), HC.APPLICATION_SAI2 ), ( ( ( 0, b'PK\x03\x04' ), ), HC.APPLICATION_ZIP ), ( ( ( 0, b'PK\x05\x06' ), ), HC.APPLICATION_ZIP ), ( ( ( 0, b'PK\x07\x08' ), ), HC.APPLICATION_ZIP ), diff --git a/hydrus/core/HydrusPaths.py b/hydrus/core/HydrusPaths.py index 181d7657..b53b56b5 100644 --- a/hydrus/core/HydrusPaths.py +++ b/hydrus/core/HydrusPaths.py @@ -23,6 +23,7 @@ mimes_to_default_thumbnail_paths = collections.defaultdict( lambda: os.path.join mimes_to_default_thumbnail_paths[ HC.APPLICATION_PDF ] = os.path.join( HC.STATIC_DIR, 'pdf.png' ) mimes_to_default_thumbnail_paths[ HC.APPLICATION_PSD ] = os.path.join( HC.STATIC_DIR, 'psd.png' ) mimes_to_default_thumbnail_paths[ HC.APPLICATION_CLIP ] = os.path.join( HC.STATIC_DIR, 'clip.png' ) +mimes_to_default_thumbnail_paths[ HC.APPLICATION_SAI2 ] = os.path.join( HC.STATIC_DIR, 'sai.png' ) for mime in HC.AUDIO: diff --git a/static/sai.png b/static/sai.png new file mode 100644 index 0000000000000000000000000000000000000000..099451078a31da948666c17dbd04f1d1d9a53ab0 GIT binary patch literal 56035 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%0DO?2 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

{nQ6ybNV+Ps1!W*BWuVQOjy<#L4_h!!9O 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 Date: Thu, 29 Jun 2023 12:47:19 -0500 Subject: [PATCH 2/3] Use more specific file header for sai2 files --- hydrus/core/HydrusFileHandling.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hydrus/core/HydrusFileHandling.py b/hydrus/core/HydrusFileHandling.py index 79d01934..efebc342 100644 --- a/hydrus/core/HydrusFileHandling.py +++ b/hydrus/core/HydrusFileHandling.py @@ -64,7 +64,7 @@ headers_and_mime.extend( [ ( ( ( 0, b'8BPS\x00\x01' ), ), HC.APPLICATION_PSD ), ( ( ( 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'SAI' ), ), HC.APPLICATION_SAI2 ), + ( ( ( 0, b'SAI-CANVAS' ), ), HC.APPLICATION_SAI2 ), ( ( ( 0, b'PK\x03\x04' ), ), HC.APPLICATION_ZIP ), ( ( ( 0, b'PK\x05\x06' ), ), HC.APPLICATION_ZIP ), ( ( ( 0, b'PK\x07\x08' ), ), HC.APPLICATION_ZIP ), From 0da4d0889fb86dd58ee2fa306ed7950ed97553e9 Mon Sep 17 00:00:00 2001 From: Paul Friederichsen Date: Thu, 29 Jun 2023 13:38:15 -0500 Subject: [PATCH 3/3] Add sai2 support to docs --- docs/getting_started_files.md | 1 + docs/index.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/getting_started_files.md b/docs/getting_started_files.md index a71eaabe..919f898e 100644 --- a/docs/getting_started_files.md +++ b/docs/getting_started_files.md @@ -90,6 +90,7 @@ Now: * **application/pdf** (.pdf) * **application/x-photoshop** (.psd) * **application/clip** (.clip) +* **application/sai2** (.sai2) * **application/vnd.rar** (.rar) * **application/zip** (.zip) * **application/x-7z-compressed** (.7z) diff --git a/docs/index.md b/docs/index.md index 30a088e5..5068509b 100644 --- a/docs/index.md +++ b/docs/index.md @@ -16,7 +16,7 @@ Currently importable filetypes are: * images - jpg, gif (including animated), png (including animated!), tiff, webp, bmp * video - webm, mp4, mpeg, avi, mov, mkv, flv, wmv * audio - mp3, flac, ogg, wma -* misc - swf, pdf, psd, zip, rar, 7z +* misc - swf, pdf, psd, clip, sai2, zip, rar, 7z On the Windows and Linux builds, an MPV window is embedded to play video and audio smoothly. For files like pdf, which cannot currently be viewed in the client, it is easy to launch any file with your OS's default program.