synched with trunk at revision 34793
[blender.git] / release / bin / blender-thumbnailer.py
index 8b93eebdeece7c9e673756a1f2ee900028a418d6..be8705601106c04e936fd45fd1fa7b4e6ed8e02d 100755 (executable)
 #
 # ##### END GPL LICENSE BLOCK #####
 
-# <pep8 compliant>
-
 """
 Thumbnailer runs with python 2.6 and 3.x.
 To run automatically with nautilus:
    gconftool --type boolean --set /desktop/gnome/thumbnailers/application@x-blender/enable true
-   gconftool --type string --set /desktop/gnome/thumbnailers/application@x-blender/command "blender-thumbnailer.py %u %o"
+   gconftool --type string --set /desktop/gnome/thumbnailers/application@x-blender/command "blender-thumbnailer.py %i %o"
 """
 
 import struct
 
-
-def open_wrapper_get():
-    """ wrap OS spesific read functionality here, fallback to 'open()'
-    """
-
-    def open_gio(path, mode):
-        g_file = gio.File(path).read()
-        g_file.orig_seek = g_file.seek
-
-        def new_seek(offset, whence=0):
-            return g_file.orig_seek(offset, [1, 0, 2][whence])
-
-        g_file.seek = new_seek
-        return g_file
-
-    try:
-        import gio
-        return open_gio
-    except ImportError:
-        return open
-
-
 def blend_extract_thumb(path):
     import os
-    open_wrapper = open_wrapper_get()
 
     # def MAKE_ID(tag): ord(tag[0])<<24 | ord(tag[1])<<16 | ord(tag[2])<<8 | ord(tag[3])
-    REND = 1145980242  # MAKE_ID(b'REND')
-    TEST = 1414743380  # MAKE_ID(b'TEST')
+    REND = 1145980242 # MAKE_ID(b'REND')
+    TEST = 1414743380 # MAKE_ID(b'TEST')
 
-    blendfile = open_wrapper(path, 'rb')
+    blendfile = open(path, 'rb')
 
     head = blendfile.read(12)
 
-    if head[0:2] == b'\x1f\x8b':  # gzip magic
+    if head[0:2] == b'\x1f\x8b': # gzip magic
         import gzip
         blendfile.close()
-        blendfile = gzip.GzipFile('', 'rb', 0, open_wrapper(path, 'rb'))
+        blendfile = gzip.open(path, 'rb')
         head = blendfile.read(12)
 
     if not head.startswith(b'BLENDER'):
         blendfile.close()
         return None, 0, 0
 
-    is_64_bit = (head[7] == b'-'[0])
+    is_64_bit = (head[7] == b'-')
 
     # true for PPC, false for X86
-    is_big_endian = (head[8] == b'V'[0])
+    is_big_endian = (head[8] == b'V')
 
     # blender pre 2.5 had no thumbs
     if head[9:11] <= b'24':
@@ -91,22 +66,23 @@ def blend_extract_thumb(path):
         if len(bhead) < sizeof_bhead:
             return None, 0, 0
 
-        code, length = struct.unpack(int_endian_pair, bhead[0:8])  # 8 == sizeof(int) * 2
+        code, length = struct.unpack(int_endian_pair, bhead[0:8]) # 8 == sizeof(int) * 2
 
         if code == REND:
             blendfile.seek(length, os.SEEK_CUR)
         else:
             break
-
+            
+    
     if code != TEST:
         return None, 0, 0
 
     try:
-        x, y = struct.unpack(int_endian_pair, blendfile.read(8))  # 8 == sizeof(int) * 2
+        x, y = struct.unpack(int_endian_pair, blendfile.read(8)) # 8 == sizeof(int) * 2
     except struct.error:
         return None, 0, 0
 
-    length -= 8  # sizeof(int) * 2
+    length -= 8 # sizeof(int) * 2
 
     if length != x * y * 4:
         return None, 0, 0
@@ -140,13 +116,13 @@ def write_png(buf, width, height):
 if __name__ == '__main__':
     import sys
 
-    if len(sys.argv) < 3:
+    if len(sys.argv) < 2:
         print("Expected 2 arguments <input.blend> <output.png>")
     else:
         file_in = sys.argv[-2]
 
         buf, width, height = blend_extract_thumb(file_in)
-
+        
         if buf:
             file_out = sys.argv[-1]