[Bf-blender-cvs] [f5428b32139] soc-2017-package_manager: Fix a number of issues caused by new repository representation

gandalf3 noreply at git.blender.org
Tue Aug 29 03:53:54 CEST 2017


Commit: f5428b32139333b7aea9bfa89a2ba96b13a9a203
Author: gandalf3
Date:   Mon Aug 28 18:05:07 2017 -0700
Branches: soc-2017-package_manager
https://developer.blender.org/rBf5428b32139333b7aea9bfa89a2ba96b13a9a203

Fix a number of issues caused by new repository representation

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

M	release/scripts/modules/bpkg/__init__.py
M	release/scripts/modules/bpkg/display.py
M	release/scripts/modules/bpkg/types.py
M	release/scripts/startup/bl_operators/package.py
M	release/scripts/startup/bl_ui/__init__.py
M	release/scripts/startup/bl_ui/properties_package.py
M	release/scripts/startup/bl_ui/space_userpref.py

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

diff --git a/release/scripts/modules/bpkg/__init__.py b/release/scripts/modules/bpkg/__init__.py
index d57b52d7a62..7068fc15200 100644
--- a/release/scripts/modules/bpkg/__init__.py
+++ b/release/scripts/modules/bpkg/__init__.py
@@ -41,7 +41,8 @@ def refresh_repository_props():
         repo_prop.name = repo.name
         repo_prop.enabled = True  
         repo_prop.url = repo.url
-        repo_prop.file = repo.file
+        print(str(repo.filepath))
+        repo_prop.filepath = str(repo.filepath)
 
 def get_installed_packages(refresh=False) -> list:
     """Get list of packages installed on disk"""
diff --git a/release/scripts/modules/bpkg/display.py b/release/scripts/modules/bpkg/display.py
index b489d171385..98d7ec177c6 100644
--- a/release/scripts/modules/bpkg/display.py
+++ b/release/scripts/modules/bpkg/display.py
@@ -11,8 +11,8 @@ def repository_items(self, context) -> list:
     """Return displayed repository enum items"""
     import bpy
     try:
-        repos = context.window_manager.package_repositories
-    except AttributeError:
+        repos = context.window_manager['package_repositories']
+    except KeyError:
         return []
     repolist = []
     for repo in repos:
diff --git a/release/scripts/modules/bpkg/types.py b/release/scripts/modules/bpkg/types.py
index cebbe2e35fc..077f0516dc0 100644
--- a/release/scripts/modules/bpkg/types.py
+++ b/release/scripts/modules/bpkg/types.py
@@ -406,7 +406,7 @@ class Repository:
         self.name = str()
         self.url = url if url is not None else str()
         self.packages = list()
-        self.file = Path()
+        self.filepath = Path()
         self._headers = dict()
 
     def refresh(self, storage_path: Path, progress_callback=None):# {{{
@@ -582,8 +582,8 @@ class Repository:
                 raise exceptions.BadRepositoryException(err) from err
             if repo.url is None or len(repo.url) == 0:
                 raise exceptions.BadRepositoryException("Repository missing URL")
-            repo.file = repo_file
 
+        repo.filepath = path
         cls.log.debug("Repository read from %s", path)
         return repo
 
diff --git a/release/scripts/startup/bl_operators/package.py b/release/scripts/startup/bl_operators/package.py
index c4afacb110b..e907f03d269 100644
--- a/release/scripts/startup/bl_operators/package.py
+++ b/release/scripts/startup/bl_operators/package.py
@@ -306,7 +306,7 @@ else:
             wm = context.window_manager
             self.repositories = wm.package_repositories
             if len(self.repositories) == 0:
-                self.report({'ERROR'}, "No repositories to refresh")
+                bpkg.tag_reindex()
                 return {'CANCELLED'}
 
             PACKAGE_OT_refresh._running = True
@@ -367,6 +367,7 @@ else:
         def _subproc_success(self, success: messages.Success):
             self.report({'INFO'}, 'Finished refreshing lists')
             bpkg.refresh_repository_props()
+            bpkg.tag_reindex()
             self.quit()
 
         def _subproc_aborted(self, aborted: messages.Aborted):
@@ -417,11 +418,15 @@ else:
                 self.report({'ERROR'}, "Repository URL not specified")
                 return {'CANCELLED'}
 
+            for repo in wm.package_repositories:
+                if repo['url'] == self.url:
+                    self.report({'ERROR'}, "Repository already added")
+                    return {'CANCELLED'}
+
             repo = wm.package_repositories.add()
             repo.url = bpkg.utils.sanitize_repository_url(self.url)
 
-            bpy.ops.package.refresh()
-
+            # bpy.ops.package.refresh()
             context.area.tag_redraw()
             return {'FINISHED'}
 
@@ -432,30 +437,39 @@ else:
         def execute(self, context):
             wm = context.window_manager
             try:
-                repo = wm['package_repositories'][wm.package_active_repository]
-            except IndexError:
+                repo = wm.package_repositories[wm.package_active_repository]
+            except AttributeError:
                 return {'CANCELLED'}
 
-            filename = bpkg.utils.format_filename(repo['name']) + ".json"
-            path = (bpkg.get_repo_storage_path() / filename)
-            wm.package_repositories.remove(wm.package_active_repository)
-            if not path.exists():
-                raise ValueError("Failed find repository file")
-            path.unlink()
-            bpkg.tag_reindex()
+            try:
+                filepath = Path(repo['filepath'])
+            except KeyError:
+                pass
+            else:
+                if not filepath.exists():
+                    raise ValueError("Failed find repository file")
+                filepath.unlink()
 
+            wm.package_repositories.remove(wm.package_active_repository)
+            # bpy.ops.package.refresh()
+            context.area.tag_redraw()
             return {'FINISHED'}
 
     class PACKAGE_OT_edit_repositories(Operator):
         bl_idname = "package.edit_repositories"
         bl_label = "Edit Repositories"
 
+        def check(self, context):
+            # TODO: always refresh settings for now
+            return True
+
         def execute(self, context):
+            bpy.ops.package.refresh()
             return {'FINISHED'}
 
         def invoke(self, context, event):
             wm = context.window_manager
-            return wm.invoke_props_dialog(self)
+            return wm.invoke_props_dialog(self, width=500, height=300)
 
         def draw(self, context):
             layout = self.layout
diff --git a/release/scripts/startup/bl_ui/__init__.py b/release/scripts/startup/bl_ui/__init__.py
index 2a029ee1a25..d58640f4d93 100644
--- a/release/scripts/startup/bl_ui/__init__.py
+++ b/release/scripts/startup/bl_ui/__init__.py
@@ -167,11 +167,6 @@ def register():
 
     WindowManager.package_active_repository = IntProperty()
 
-    WindowManager.package_repository_tab = EnumProperty(
-            items=[('REPOSITORIES', "Repositories", "Add, remove, and edit repositories")],
-            name="Repository tab",
-            )
-
     # done...
 
 
diff --git a/release/scripts/startup/bl_ui/properties_package.py b/release/scripts/startup/bl_ui/properties_package.py
index 4f9090237cc..b9b97d5bf57 100644
--- a/release/scripts/startup/bl_ui/properties_package.py
+++ b/release/scripts/startup/bl_ui/properties_package.py
@@ -4,6 +4,7 @@ from bpy.types import UIList, PropertyGroup
 class RepositoryProperty(PropertyGroup):
     name = bpy.props.StringProperty(name="Name")
     url = bpy.props.StringProperty(name="URL")
+    filepath = bpy.props.StringProperty(name="Filepath")
     status = bpy.props.EnumProperty(name="Status", items=[
             ("OK",        "Okay",              "FILE_TICK"),
             ("NOTFOUND",  "Not found",         "ERROR"),
@@ -13,7 +14,12 @@ class RepositoryProperty(PropertyGroup):
 
 class PACKAGE_UL_repositories(UIList):
     def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
-        layout.prop(item, "url", text="", emboss=False)
+        try:
+            layout.label(text=item['name'] + ":", icon='FILE_TICK')
+        except KeyError: #name not defined while still downloading
+            layout.label(text="", icon='FILE_REFRESH')
+        # TODO: for some reason unembossing the following causes blender to become unresponsive when ctrl clicking the url
+        layout.prop(item, "url", text="")
 
 classes = (
     RepositoryProperty,
diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index da7c2d17211..f876896b927 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -1320,6 +1320,8 @@ class USERPREF_PT_packages(Panel):
     bl_region_type = 'WINDOW'
     bl_options = {'HIDE_HEADER'}
 
+    _started = False
+
     @classmethod
     def poll(cls, context):
         userpref = context.user_preferences
@@ -1339,16 +1341,16 @@ class USERPREF_PT_packages(Panel):
 
         sidebar.operator("package.refresh", text="Check for updates")
         sidebar.label("Repositories")
-        row = sidebar.row()
-        row.prop(wm, "package_repository_filter", expand=True)
+
+        col = sidebar.column(align=True)
+        col.prop(wm, "package_repository_filter")
         # row.template_list("PACKAGE_UL_repositories", "", wm, "package_repositories", wm, "package_active_repository")
         # col = row.column(align=True)
         # col.operator("package.add_repository", text="", icon='ZOOMIN')
         # col.operator("package.remove_repository", text="", icon='ZOOMOUT')
         # sidebar.separator()
 
-        row = sidebar.row()
-        row.operator("package.edit_repositories")
+        col.operator("package.edit_repositories")
 
         sidebar.separator()
         sidebar.label("Category")
@@ -1402,9 +1404,13 @@ class USERPREF_PT_packages(Panel):
 
             def match_repositories(metapkg) -> bool:
                 pkg = metapkg.get_display_version()
-                for repo in pkg.repositories:
-                    if repo.name in filters['repository']:
-                        return True
+                if pkg.installed:
+                    return True
+                if len(pkg.repositories) == 0:
+                    return True
+                pkg_reponames = set(repo.name for repo in pkg.repositories)
+                if len(pkg_reponames.intersection(filters['repository'])) > 0:
+                    return True
                 return False
 
             def match_category(pkg: Package) -> bool:
@@ -1426,7 +1432,7 @@ class USERPREF_PT_packages(Panel):
                 if match_repositories(metapkg)\
                 and match_category(pkg)\
                 and match_support(pkg)\
-                and match_installstate(pkg):
+                and match_installstate(metapkg):
                     if len(filters['search']) == 0:
                         startswith.append(pkgname)
                         continue
@@ -1649,6 +1655,12 @@ class USERPREF_PT_packages(Panel):
             row.alignment='CENTER'
             row.scale_y = 10
 
+
+        if not USERPREF_PT_

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list