Fixed storing & loading project+manager-specific settings
The problem was that there was too much storing done in an on-change handler, causing things to be overwritten. By splitting up some functionality and properly marking the "we're now loading" bits of code, its' solved.
This commit is contained in:
parent
d8c5c4eecd
commit
80155ed4f4
@ -66,12 +66,35 @@ def available_managers(self, context):
|
|||||||
return [(p['_id'], p['name'], '') for p in mngrs]
|
return [(p['_id'], p['name'], '') for p in mngrs]
|
||||||
|
|
||||||
|
|
||||||
|
def manager_updated(self: 'FlamencoManagerGroup', context):
|
||||||
|
from ..blender import preferences
|
||||||
|
|
||||||
|
flamenco_manager_id = self.manager
|
||||||
|
log.debug('manager updated to %r', flamenco_manager_id)
|
||||||
|
|
||||||
|
prefs = preferences()
|
||||||
|
project_id = prefs.project.project
|
||||||
|
ps = prefs.get('project_settings', {}).get(project_id, {})
|
||||||
|
|
||||||
|
# Load per-project, per-manager settings for the current Manager.
|
||||||
|
try:
|
||||||
|
pppm = ps['flamenco_managers_settings'][flamenco_manager_id]
|
||||||
|
except KeyError:
|
||||||
|
# No settings for this manager, so nothing to do.
|
||||||
|
return
|
||||||
|
|
||||||
|
with project_specific.mark_as_loading():
|
||||||
|
prefs.flamenco_job_file_path = pppm['file_path']
|
||||||
|
prefs.flamenco_job_output_path = pppm['output_path']
|
||||||
|
prefs.flamenco_job_output_strip_components = pppm['output_strip_components']
|
||||||
|
|
||||||
|
|
||||||
class FlamencoManagerGroup(PropertyGroup):
|
class FlamencoManagerGroup(PropertyGroup):
|
||||||
manager = EnumProperty(
|
manager = EnumProperty(
|
||||||
items=available_managers,
|
items=available_managers,
|
||||||
name='Flamenco Manager',
|
name='Flamenco Manager',
|
||||||
description='Which Flamenco Manager to use for jobs',
|
description='Which Flamenco Manager to use for jobs',
|
||||||
update=project_specific.store,
|
update=manager_updated,
|
||||||
)
|
)
|
||||||
|
|
||||||
status = EnumProperty(
|
status = EnumProperty(
|
||||||
|
@ -10,18 +10,21 @@ PROJECT_SPECIFIC_SIMPLE_PROPS = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
project_settings_loading = False
|
project_settings_loading = 0 # counter, if > 0 then we're loading stuff.
|
||||||
|
|
||||||
|
|
||||||
@contextlib.contextmanager
|
@contextlib.contextmanager
|
||||||
def mark_as_loading():
|
def mark_as_loading():
|
||||||
"""Sets project_settings_loading=True while the context is active."""
|
"""Sets project_settings_loading > 0 while the context is active.
|
||||||
|
|
||||||
|
A counter is used to allow for nested mark_as_loading() contexts.
|
||||||
|
"""
|
||||||
global project_settings_loading
|
global project_settings_loading
|
||||||
project_settings_loading = True
|
project_settings_loading += 1
|
||||||
try:
|
try:
|
||||||
yield
|
yield
|
||||||
finally:
|
finally:
|
||||||
project_settings_loading = False
|
project_settings_loading -= 1
|
||||||
|
|
||||||
|
|
||||||
def handle_project_update(_=None, _2=None):
|
def handle_project_update(_=None, _2=None):
|
||||||
@ -76,20 +79,10 @@ def handle_project_update(_=None, _2=None):
|
|||||||
if flamenco_manager_id:
|
if flamenco_manager_id:
|
||||||
log.debug('setting flamenco manager to %s', flamenco_manager_id)
|
log.debug('setting flamenco manager to %s', flamenco_manager_id)
|
||||||
try:
|
try:
|
||||||
|
# This will trigger a load of Project+Manager-specfic settings.
|
||||||
prefs.flamenco_manager.manager = flamenco_manager_id
|
prefs.flamenco_manager.manager = flamenco_manager_id
|
||||||
except TypeError:
|
except TypeError:
|
||||||
log.warning('manager %s for this project could not be found', flamenco_manager_id)
|
log.warning('manager %s for this project could not be found', flamenco_manager_id)
|
||||||
else:
|
|
||||||
# Load per-project, per-manager settings for the current Manager.
|
|
||||||
try:
|
|
||||||
pppm = ps['flamenco_managers_settings'][flamenco_manager_id]
|
|
||||||
except KeyError:
|
|
||||||
# No settings for this manager, so nothing to do.
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
prefs.flamenco_job_file_path = pppm['file_path']
|
|
||||||
prefs.flamenco_job_output_path = pppm['output_path']
|
|
||||||
prefs.flamenco_job_output_strip_components = pppm['output_strip_components']
|
|
||||||
elif prefs.flamenco_manager.available_managers:
|
elif prefs.flamenco_manager.available_managers:
|
||||||
prefs.flamenco_manager.manager = prefs.flamenco_manager.available_managers[0]
|
prefs.flamenco_manager.manager = prefs.flamenco_manager.available_managers[0]
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user