diff --git a/bpkg/__init__.py b/bpkg/__init__.py index 6dc5c89..4b5262b 100644 --- a/bpkg/__init__.py +++ b/bpkg/__init__.py @@ -284,8 +284,7 @@ class BPKG_OT_refresh(SubprocMixin, bpy.types.Operator): self.quit() def _subproc_repository_result(self, result: subproc.RepositoryResult): - prefs = bpy.context.user_preferences.addons[__package__].preferences - prefs['repo'] = result.repository + bpy.context.window_manager['package_repo'] = result.repository self.report({'INFO'}, 'Package list retrieved successfully') self.quit() @@ -443,7 +442,7 @@ class USERPREF_PT_packages(bpy.types.Panel): return False - # use two lists as a simple way of putting matches from the start on top + # use two lists as a simple way of putting "matches from the beginning" on top contains = [] startswith = [] @@ -544,21 +543,22 @@ class USERPREF_PT_packages(bpy.types.Panel): row.scale_y = 10 try: - #TODO either store repos in windowmanager and reload from disk every time, or store them in the .blend. Not both - repo = context.user_preferences.addons[__package__].preferences['repo'] + repo = wm['package_repo'] except KeyError: center_message(pkgzone, "Loading Repositories...") import pathlib # TODO: read repository synchronously for now; can't run an operator to do async monitoring from draw code - prefs = bpy.context.user_preferences.addons[__package__].preferences storage_path = pathlib.Path(bpy.utils.user_resource('CONFIG', 'packages', create=True)) - res = subproc._load_repo(storage_path) - prefs['repo'] = res.to_dict(sort=True, ids=True) + try: + res = subproc._load_repo(storage_path) + wm['package_repo'] = res.to_dict(sort=True, ids=True) + except FileNotFoundError: + wm['package_repo'] = None return if repo is None: - center_message(pkgzone, "No repository found. Add one in the addon preferences.") + center_message(pkgzone, "No repositories found.") return filters = { @@ -586,15 +586,13 @@ class WM_OT_package_toggle_expand(bpy.types.Operator): ) def execute(self, context): - repo = context.user_preferences.addons[__package__].preferences.get('repo') + repo = context.window_manager.get('package_repo') if not repo: return {'CANCELLED'} - pkg_id = self.package_id - for pkg in repo['packages']: - if pkg.get('id') == pkg_id: + if pkg.get('id') == self.package_id: # if pkg['expand'] is unset, it's not expanded pkg['expand'] = not pkg.get('expand', False) diff --git a/bpkg/subproc.py b/bpkg/subproc.py index 64d739b..aad3303 100644 --- a/bpkg/subproc.py +++ b/bpkg/subproc.py @@ -310,10 +310,7 @@ class Repository: """ Read repository from a json file at `path`. """ - try: - repo_file = path.open('r', encoding='utf-8') - except IOError as err: - raise BadRepository from err + repo_file = path.open('r', encoding='utf-8') with repo_file: try: @@ -513,14 +510,12 @@ def refresh(pipe_to_blender, storage_path: pathlib.Path, repository_url: str): log = logging.getLogger(__name__ + '.refresh') repo_path = storage_path / 'repo.json' - try: + if repo_path.exists(): repo = Repository.from_file(repo_path) - except BadRepository as err: - log.warning("Failed to read existing repository: %s. Continuing download.", err) - repo = Repository(repository_url) - - if repo.url != repository_url: - # We're getting a new repository + if repo.url != repository_url: + # We're getting a new repository + repo = Repository(repository_url) + else: repo = Repository(repository_url) try: