[Bf-blender-cvs] [e524370158b] asset-engine: Add way to remove Amber repo, and initial step fro previews.

Bastien Montagne noreply at git.blender.org
Mon Oct 23 17:55:25 CEST 2017


Commit: e524370158ba15c2d7726960c9201bb3371a4e4a
Author: Bastien Montagne
Date:   Mon Oct 23 17:54:58 2017 +0200
Branches: asset-engine
https://developer.blender.org/rBe524370158ba15c2d7726960c9201bb3371a4e4a

Add way to remove Amber repo, and initial step fro previews.

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

M	release/scripts/startup/bl_operators/amber/operators.py
M	release/scripts/startup/bl_operators/amber/repository.py
M	release/scripts/startup/bl_operators/amber/ui.py
M	release/scripts/startup/bl_operators/amber/utils.py

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

diff --git a/release/scripts/startup/bl_operators/amber/operators.py b/release/scripts/startup/bl_operators/amber/operators.py
index 6ad86140f2d..2bb5d788dcb 100644
--- a/release/scripts/startup/bl_operators/amber/operators.py
+++ b/release/scripts/startup/bl_operators/amber/operators.py
@@ -101,6 +101,55 @@ class AmberOpsRepositoryAdd(Operator, AmberOpsEditing):
         return {'FINISHED'}
 
 
+class AmberOpsRepositoryRemove(Operator, AmberOpsEditing):
+    """Remove an Amber repository from this listing, and delete its db and preview files (*not* the data itself) """
+    """(WARNING! No undo!)"""
+    bl_idname = "amber.repository_remove"
+    bl_label = "Remove Repository"
+    bl_options = set()
+
+    def execute(self, context):
+        ae = context.space_data.asset_engine
+        repo_pg = ae.repositories_pg.repositories[ae.repositories_pg.repository_index_active]
+        repo_path = repo_pg.path
+        repo_uuid = repo_pg.uuid[:]
+        db_path = os.path.join(repo_path, utils.AMBER_DB_NAME)
+        preview_path = os.path.join(repo_path, utils.AMBER_PREVIEW_STORAGE)
+        data_path = os.path.join(repo_path, utils.AMBER_LOCAL_STORAGE)
+
+        if not os.path.exists(db_path):
+            self.report({'INFO'}, "No Amber repository found at '%s'" % repo_path)
+            return {'CANCELLED'}
+
+        repo = AmberDataRepository.ls_repo(db_path)
+
+        if os.path.isdir(preview_path):
+            for asset in repo.assets.items:
+                if asset.preview_path:
+                    asset_preview_path = os.abspath(os.path.join(repo_path, asset.preview_path))
+                    if os.path.isfile(asset_preview_path) and os.path.commonpath((preview_path, asset_preview_path)) == preview_path:
+                        os.remove(asset_preview_path)
+                # TODO allow also removing of asset .blend files? would rather not, dangerous option imho...
+
+            if not os.listdir(preview_path):
+                os.rmdir(preview_path)
+
+        if os.path.isdir(data_path):
+            if not os.listdir(data_path):
+                os.rmdir(data_path)
+
+        ae.repositories_pg.repositories.remove(ae.repositories_pg.repository_index_active)
+
+        os.remove(db_path)
+
+        bpy.ops.file.refresh()
+
+        return {'FINISHED'}
+
+    def invoke(self, context, event):
+        return context.window_manager.invoke_confirm(self, event)
+
+
 class AmberOpsAssetAdd(Operator, AmberOpsEditing):
     """Add an Amber asset to the repository (WARNING! No undo!)"""
     bl_idname = "amber.asset_add"
@@ -315,6 +364,7 @@ class AmberOpsTagDelete(Operator, AmberOpsEditing):
 
 classes = (
     AmberOpsRepositoryAdd,
+    AmberOpsRepositoryRemove,
     AmberOpsAssetAdd,
     AmberOpsAssetDelete,
     AmberOpsAssetTagAdd,
diff --git a/release/scripts/startup/bl_operators/amber/repository.py b/release/scripts/startup/bl_operators/amber/repository.py
index 6d8ae00a412..90896b5fc8a 100644
--- a/release/scripts/startup/bl_operators/amber/repository.py
+++ b/release/scripts/startup/bl_operators/amber/repository.py
@@ -464,6 +464,7 @@ class AmberDataAsset():
         self.uuid = (0, 0, 0, 0)
         self.file_type = ''
         self.blender_type = ''
+        self.preview_path = ""
         self.tags = {}
         self.variants = {}
         self.variant_default = None
@@ -485,6 +486,7 @@ class AmberDataAsset():
             asset.file_type = ent["file_type"]
             asset.blender_type = ent["blen_type"]
 
+            asset.preview_path = ent["preview_path"]
             asset.tags = set(ent["tags"])
 
             AmberDataAssetVariant.from_dict(asset.variants, ent["variants"])
@@ -498,6 +500,7 @@ class AmberDataAsset():
                 "description": asset.description,
                 "file_type": asset.file_type,
                 "blen_type": asset.blender_type,
+                "preview_path": asset.preview_path,
                 "tags": list(asset.tags),
                 "variants": AmberDataAssetVariant.to_dict(asset.variants),
                 "variant_default": utils.uuid_pack(asset.variant_default.uuid),
@@ -522,6 +525,7 @@ class AmberDataAsset():
             asset.file_type = asset_pg.file_type
             asset.blender_type = asset_pg.blender_type
 
+            asset.preview_path = asset_pg.preview_path
             asset.tags = set(t.name for t in asset_pg.tags)
 
             AmberDataAssetVariant.from_pg(asset.variants, asset_pg.variants)
@@ -544,6 +548,7 @@ class AmberDataAsset():
             asset_pg.file_type = asset.file_type
             asset_pg.blender_type = asset.blender_type
 
+            asset_pg.preview_path = asset.preview_path
             AmberDataTagPG.to_pg(asset_pg.tags, tags, subset=asset.tags, do_clear=False)
 
             AmberDataAssetVariant.to_pg(asset_pg.variants, asset.variants)
@@ -626,7 +631,7 @@ class AmberDataRepository:
 
     @staticmethod
     def update_from_asset_engine(ae):
-        """Generic helper wrapping repository JSON file update when editing withing Blender."""
+        """Generic helper wrapping repository JSON file update when editing within Blender."""
         repository = getattr(ae, "repository", None)
         if repository is None:
             repository = ae.repository = AmberDataRepository()
@@ -766,7 +771,7 @@ class AmberDataRepositoryList:
 
     def to_pg(self, pg):
         for idx, (uuid, (name, path)) in enumerate(self.repositories.items()):
-            print(name, path)
+            print("to_pg", name, path)
             if idx == len(pg.repositories):
                 pg.repositories.add()
             repo_pg = pg.repositories[idx]
@@ -778,7 +783,7 @@ class AmberDataRepositoryList:
             pg.repositories.remove(idx - 1)
 
     def from_pg(self, pg):
-        print([(pg_item.name, pg_item.path) for pg_item in pg.repositories])
+        print("from_pg", [(pg_item.name, pg_item.path) for pg_item in pg.repositories])
         self.repositories = {pg_item.uuid[:]: (pg_item.name, pg_item.path) for pg_item in pg.repositories}
 
 
diff --git a/release/scripts/startup/bl_operators/amber/ui.py b/release/scripts/startup/bl_operators/amber/ui.py
index 93d6aea34ba..7d9b1567566 100644
--- a/release/scripts/startup/bl_operators/amber/ui.py
+++ b/release/scripts/startup/bl_operators/amber/ui.py
@@ -69,6 +69,11 @@ class AMBER_PT_repositories(Panel, AmberPanel):
 
         col = row.column()
         col.operator("AMBER_OT_repository_add", text="", icon='ZOOMIN')
+        col.operator("AMBER_OT_repository_remove", text="", icon='ZOOMOUT')
+
+        repo = ae.repositories_pg.repositories[ae.repositories_pg.repository_index_active]
+        row = self.layout.row()
+        row.prop(repo, "path", text="")
 
 
 class AMBER_UL_tags_filter(UIList):
diff --git a/release/scripts/startup/bl_operators/amber/utils.py b/release/scripts/startup/bl_operators/amber/utils.py
index a2dbd612fc2..adc2b2de11f 100644
--- a/release/scripts/startup/bl_operators/amber/utils.py
+++ b/release/scripts/startup/bl_operators/amber/utils.py
@@ -36,6 +36,7 @@ AMBER_DBK_VERSION = "version"
 AMBER_LIST_FILENAME = "amber_repos.json"
 
 AMBER_LOCAL_STORAGE = "LOCAL_STORAGE"
+AMBER_PREVIEW_STORAGE = "PREVIEWS"
 
 
 BLENDER_TYPES_TO_PATH = {



More information about the Bf-blender-cvs mailing list