[Bf-blender-cvs] [7b84fa5] asset-experiments: Various minor cleanup & fixes from review.

Bastien Montagne noreply at git.blender.org
Fri Jun 19 13:20:12 CEST 2015


Commit: 7b84fa592790430b73419b96c867f85fba8108f3
Author: Bastien Montagne
Date:   Fri Jun 19 13:01:39 2015 +0200
Branches: asset-experiments
https://developer.blender.org/rB7b84fa592790430b73419b96c867f85fba8108f3

Various minor cleanup & fixes from review.

===================================================================

M	release/scripts/modules/bl_previews_utils/bl_previews_render.py
M	release/scripts/startup/bl_operators/file.py
M	release/scripts/startup/bl_ui/space_filebrowser.py
M	source/blender/blenlib/BLI_fileops.h
M	source/blender/blenlib/intern/BLI_filelist.c
M	source/blender/editors/space_file/filelist.c

===================================================================

diff --git a/release/scripts/modules/bl_previews_utils/bl_previews_render.py b/release/scripts/modules/bl_previews_utils/bl_previews_render.py
index 673f182..801dbbf 100644
--- a/release/scripts/modules/bl_previews_utils/bl_previews_render.py
+++ b/release/scripts/modules/bl_previews_utils/bl_previews_render.py
@@ -152,9 +152,12 @@ def do_previews(do_objects, do_groups, do_scenes, do_data_intern):
         )
 
     def render_context_delete(render_context):
-        # Do not crash here, too much things can go wrong...
+        # We use try/except blocks here to avoid crash, too much things can go wrong, and we want to leave the current
+        # .blend as clean as possible!
+        success = True
+
+        scene = bpy.data.scenes[render_context.scene]
         try:
-            scene = bpy.data.scenes[render_context.scene]
             if render_context.backup_scene is None:
                 scene.world = None
                 scene.camera = None
@@ -166,40 +169,63 @@ def do_previews(do_objects, do_groups, do_scenes, do_data_intern):
                 scene = None
             else:
                 rna_backup_restore(scene, render_context.backup_scene)
-            if render_context.world is not None:
+        except Exception as e:
+            print("ERROR:", e)
+            success = False
+
+        if render_context.world is not None:
+            try:
                 world = bpy.data.worlds[render_context.world]
                 if render_context.backup_world is None:
                     if scene is not None:
                         scene.world = None
+                    world.user_clear()
                     bpy.data.worlds.remove(world)
                 else:
                     rna_backup_restore(world, render_context.backup_world)
-            if render_context.camera:
+            except Exception as e:
+                print("ERROR:", e)
+                success = False
+
+        if render_context.camera:
+            try:
                 camera = bpy.data.objects[render_context.camera]
                 if render_context.backup_camera is None:
                     if scene is not None:
                         scene.camera = None
+                    camera.user_clear()
                     bpy.data.objects.remove(camera)
                     bpy.data.cameras.remove(bpy.data.cameras[render_context.camera_data])
                 else:
                     rna_backup_restore(camera, render_context.backup_camera)
                     rna_backup_restore(bpy.data.cameras[render_context.camera_data], render_context.backup_camera_data)
-            if render_context.lamp:
+            except Exception as e:
+                print("ERROR:", e)
+                success = False
+
+        if render_context.lamp:
+            try:
                 lamp = bpy.data.objects[render_context.lamp]
                 if render_context.backup_lamp is None:
+                    lamp.user_clear()
                     bpy.data.objects.remove(lamp)
                     bpy.data.lamps.remove(bpy.data.lamps[render_context.lamp_data])
                 else:
                     rna_backup_restore(lamp, render_context.backup_lamp)
                     rna_backup_restore(bpy.data.lamps[render_context.lamp_data], render_context.backup_lamp_data)
+            except Exception as e:
+                print("ERROR:", e)
+                success = False
+
+        try:
+            image = bpy.data.images[render_context.image]
+            image.user_clear()
+            bpy.data.images.remove(image)
         except Exception as e:
             print("ERROR:", e)
-            return False
+            success = False
 
-        image = bpy.data.images[render_context.image]
-        image.user_clear()
-        bpy.data.images.remove(image)
-        return True
+        return success
 
     def objects_render_engine_guess(obs):
         for obname in obs:
diff --git a/release/scripts/startup/bl_operators/file.py b/release/scripts/startup/bl_operators/file.py
index f27df20..a6a6982 100644
--- a/release/scripts/startup/bl_operators/file.py
+++ b/release/scripts/startup/bl_operators/file.py
@@ -36,24 +36,55 @@ class WM_OT_previews_batch_generate(Operator):
 
     # -----------
     # File props.
-    files = CollectionProperty(type=bpy.types.OperatorFileListElement, options={'HIDDEN', 'SKIP_SAVE'})
+    files = CollectionProperty(
+            type=bpy.types.OperatorFileListElement,
+            options={'HIDDEN', 'SKIP_SAVE'},
+            )
 
-    directory = StringProperty(maxlen=1024, subtype='FILE_PATH', options={'HIDDEN', 'SKIP_SAVE'})
+    directory = StringProperty(
+            maxlen=1024,
+            subtype='FILE_PATH',
+            options={'HIDDEN', 'SKIP_SAVE'},
+            )
 
     # Show only images/videos, and directories!
-    filter_blender = BoolProperty(default=True, options={'HIDDEN', 'SKIP_SAVE'})
-    filter_folder = BoolProperty(default=True, options={'HIDDEN', 'SKIP_SAVE'})
+    filter_blender = BoolProperty(
+            default=True,
+            options={'HIDDEN', 'SKIP_SAVE'},
+            )
+    filter_folder = BoolProperty(
+            default=True,
+            options={'HIDDEN', 'SKIP_SAVE'},
+            )
 
     # -----------
     # Own props.
-    use_scenes = BoolProperty(default=True, name="Scenes", description="Generate scenes' previews")
-    use_groups = BoolProperty(default=True, name="Groups", description="Generate groups' previews")
-    use_objects = BoolProperty(default=True, name="Objects", description="Generate objects' previews")
-    use_intern_data = BoolProperty(default=True, name="Mat/Tex/...",
-                                   description="Generate 'internal' previews (materials, textures, images, etc.)")
-
-    use_trusted = BoolProperty(default=False, name="Trusted Blend Files",
-                               description="Enable python evaluation for selected files")
+    use_scenes = BoolProperty(
+            default=True,
+            name="Scenes",
+            description="Generate scenes' previews",
+            )
+    use_groups = BoolProperty(
+            default=True,
+            name="Groups",
+            description="Generate groups' previews",
+            )
+    use_objects = BoolProperty(
+            default=True,
+            name="Objects",
+            description="Generate objects' previews",
+            )
+    use_intern_data = BoolProperty(
+            default=True,
+            name="Mat/Tex/...",
+            description="Generate 'internal' previews (materials, textures, images, etc.)",
+            )
+
+    use_trusted = BoolProperty(
+            default=False,
+            name="Trusted Blend Files",
+            description="Enable python evaluation for selected files",
+            )
 
     def invoke(self, context, event):
         context.window_manager.fileselect_add(self)
@@ -72,30 +103,30 @@ class WM_OT_previews_batch_generate(Operator):
         context.window_manager.progress_update(0)
         for i, fn in enumerate(self.files):
             blen_path = os.path.join(self.directory, fn.name)
-            cmmd = [
+            cmd = [
                 bpy.app.binary_path,
                 "--background",
                 "--factory-startup",
                 "-noaudio",
             ]
             if self.use_trusted:
-                cmmd.append("--enable-autoexec")
-            cmmd += [
+                cmd.append("--enable-autoexec")
+            cmd.extend([
                 blen_path,
                 "--python",
                 os.path.join(os.path.dirname(preview_render.__file__), "bl_previews_render.py"),
                 "--",
-            ]
+            ])
             if not self.use_scenes:
-                cmmd.append('--no_scenes')
+                cmd.append('--no_scenes')
             if not self.use_groups:
-                cmmd.append('--no_groups')
+                cmd.append('--no_groups')
             if not self.use_objects:
-                cmmd.append('--no_objects')
+                cmd.append('--no_objects')
             if not self.use_intern_data:
-                cmmd.append('--no_data_intern')
-            if subprocess.call(cmmd):
-                self.report({'ERROR'}, "Previews generation process failed for file '%s'!" % blend_path)
+                cmd.append('--no_data_intern')
+            if subprocess.call(cmd):
+                self.report({'ERROR'}, "Previews generation process failed for file '%s'!" % blen_path)
                 context.window_manager.progress_end()
                 return {'CANCELLED'}
             context.window_manager.progress_update(i + 1)
@@ -112,24 +143,54 @@ class WM_OT_previews_batch_clear(Operator):
 
     # -----------
     # File props.
-    files = CollectionProperty(type=bpy.types.OperatorFileListElement, options={'HIDDEN', 'SKIP_SAVE'})
+    files = CollectionProperty(
+            type=bpy.types.OperatorFileListElement,
+            options={'HIDDEN', 'SKIP_SAVE'},
+            )
 
-    directory = StringProperty(maxlen=1024, subtype='FILE_PATH', options={'HIDDEN', 'SKIP_SAVE'})
+    directory = StringProperty(
+            maxlen=1024,
+            subtype='FILE_PATH',
+            options={'HIDDEN', 'SKIP_SAVE'},
+            )
 
     # Show only images/videos, and directories!
-    filter_blender = BoolProperty(default=True, options={'HIDDEN', 'SKIP_SAVE'})
-    filter_folder = BoolProperty(default=True, options={'HIDDEN', 'SKIP_SAVE'})
+    filter_blender = BoolProperty(
+            default=True,
+            options={'HIDDEN', 'SKIP_SAVE'},
+            )
+    filter_folder = BoolProperty(
+            default=True,
+            options={'HIDDEN', 'SKIP_SAVE'},
+            )
 
     # -----------
     # Own props.
-    use_scenes = BoolProperty(default=True, name="Scenes", description="Clear scenes' previews")
-    use_groups = BoolProperty(default=True, name="Groups", description="Clear groups' previews")
-    use_objects = BoolProperty(default=True, name="Objects", description="Clear objects' previews")
-    use_intern_data = BoolProperty(default=True, name="Mat/Tex/...",
-                                   description="Clear 'internal' previews (materials, textures, images, e

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list