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. 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..efebc342 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-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 ), 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 00000000..09945107 Binary files /dev/null and b/static/sai.png differ