Store repository on window manager so it isn't saved in the .blend

We store it outside blender in JSON anyway, storing it two places at
once could be confusing. We can move it back into the .blend later if it
seems that would be preferred.
This commit is contained in:
Ellwood Zwovic
2017-07-18 18:25:53 -07:00
parent 816c27f499
commit dae9afd6da
2 changed files with 17 additions and 24 deletions

View File

@@ -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))
try:
res = subproc._load_repo(storage_path)
prefs['repo'] = res.to_dict(sort=True, ids=True)
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)

View File

@@ -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
with repo_file:
try:
@@ -513,15 +510,13 @@ 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
repo = Repository(repository_url)
else:
repo = Repository(repository_url)
try:
repo.refresh()