Store some flamenco job preferences on a per-manager basis
Managers often require distinct input and output path, which can now be saved and loaded from the User Preferences, as well as in the Flamenco panel.
This commit is contained in:
parent
62d16fff35
commit
973dafcc3a
@ -68,7 +68,7 @@ class FlamencoManagerGroup(PropertyGroup):
|
|||||||
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=project_specific.updated_manager,
|
||||||
)
|
)
|
||||||
|
|
||||||
status = EnumProperty(
|
status = EnumProperty(
|
||||||
@ -89,6 +89,7 @@ class FlamencoManagerGroup(PropertyGroup):
|
|||||||
@available_managers.setter
|
@available_managers.setter
|
||||||
def available_managers(self, new_managers):
|
def available_managers(self, new_managers):
|
||||||
self['available_managers'] = new_managers
|
self['available_managers'] = new_managers
|
||||||
|
project_specific.updated_manager()
|
||||||
|
|
||||||
|
|
||||||
class FlamencoPollMixin:
|
class FlamencoPollMixin:
|
||||||
@ -676,6 +677,24 @@ class FLAMENCO_PT_render(bpy.types.Panel, FlamencoPollMixin):
|
|||||||
|
|
||||||
prefs = preferences()
|
prefs = preferences()
|
||||||
|
|
||||||
|
labeled_row = layout.split(0.25, align=True)
|
||||||
|
labeled_row.label('Manager:')
|
||||||
|
prop_btn_row = labeled_row.row(align=True)
|
||||||
|
|
||||||
|
bcp = prefs.flamenco_manager
|
||||||
|
if bcp.status in {'NONE', 'IDLE'}:
|
||||||
|
if not bcp.available_managers or not bcp.manager:
|
||||||
|
prop_btn_row.operator('flamenco.managers',
|
||||||
|
text='Find Flamenco Managers',
|
||||||
|
icon='FILE_REFRESH')
|
||||||
|
else:
|
||||||
|
prop_btn_row.prop(bcp, 'manager', text='')
|
||||||
|
prop_btn_row.operator('flamenco.managers',
|
||||||
|
text='',
|
||||||
|
icon='FILE_REFRESH')
|
||||||
|
else:
|
||||||
|
prop_btn_row.label('Fetching available managers.')
|
||||||
|
|
||||||
labeled_row = layout.split(0.25, align=True)
|
labeled_row = layout.split(0.25, align=True)
|
||||||
labeled_row.label('Job Type:')
|
labeled_row.label('Job Type:')
|
||||||
labeled_row.prop(context.scene, 'flamenco_render_job_type', text='')
|
labeled_row.prop(context.scene, 'flamenco_render_job_type', text='')
|
||||||
|
@ -63,6 +63,12 @@ def handle_project_update(_=None, _2=None):
|
|||||||
log.debug('setting flamenco manager to %s', manager_id)
|
log.debug('setting flamenco manager to %s', manager_id)
|
||||||
try:
|
try:
|
||||||
prefs.flamenco_manager.manager = manager_id
|
prefs.flamenco_manager.manager = manager_id
|
||||||
|
if 'flamenco_managers_settings' in ps and \
|
||||||
|
prefs.flamenco_manager.manager in ps['flamenco_managers_settings']:
|
||||||
|
mps = ps['flamenco_managers_settings'][prefs.flamenco_manager.manager]
|
||||||
|
setattr(prefs, 'flamenco_job_file_path', mps['file_path'])
|
||||||
|
setattr(prefs, 'flamenco_job_output_path', mps['output_path'])
|
||||||
|
setattr(prefs, 'flamenco_job_output_strip_components', mps['output_strip_components'])
|
||||||
except TypeError:
|
except TypeError:
|
||||||
log.warning('manager %s for this project could not be found', manager_id)
|
log.warning('manager %s for this project could not be found', manager_id)
|
||||||
|
|
||||||
@ -91,7 +97,24 @@ def store(_=None, _2=None):
|
|||||||
|
|
||||||
for name in PROJECT_SPECIFIC_SIMPLE_PROPS:
|
for name in PROJECT_SPECIFIC_SIMPLE_PROPS:
|
||||||
ps[name] = getattr(prefs, name)
|
ps[name] = getattr(prefs, name)
|
||||||
|
|
||||||
|
if ps['flamenco_manager'] != prefs.flamenco_manager.manager:
|
||||||
|
# In this case we want to load the manager settings, not save them
|
||||||
|
# This is done in update_manager (connected to the FlamencoManagerGroup.manager update handle)
|
||||||
ps['flamenco_manager'] = prefs.flamenco_manager.manager
|
ps['flamenco_manager'] = prefs.flamenco_manager.manager
|
||||||
|
else:
|
||||||
|
# If the manager did not change, update its settings
|
||||||
|
if 'flamenco_managers_settings' not in ps:
|
||||||
|
ps['flamenco_managers_settings'] = {}
|
||||||
|
if prefs.flamenco_manager.manager not in ps['flamenco_managers_settings']:
|
||||||
|
ps['flamenco_managers_settings'][prefs.flamenco_manager.manager] = {}
|
||||||
|
|
||||||
|
ps['flamenco_managers_settings'][prefs.flamenco_manager.manager]['file_path'] = getattr(
|
||||||
|
prefs, 'flamenco_job_file_path')
|
||||||
|
ps['flamenco_managers_settings'][prefs.flamenco_manager.manager]['output_path'] = getattr(
|
||||||
|
prefs, 'flamenco_job_output_path')
|
||||||
|
ps['flamenco_managers_settings'][prefs.flamenco_manager.manager]['output_strip_components'] = getattr(
|
||||||
|
prefs, 'flamenco_job_output_strip_components')
|
||||||
|
|
||||||
if log.isEnabledFor(logging.DEBUG):
|
if log.isEnabledFor(logging.DEBUG):
|
||||||
from pprint import pformat
|
from pprint import pformat
|
||||||
@ -100,6 +123,19 @@ def store(_=None, _2=None):
|
|||||||
else:
|
else:
|
||||||
ps_to_log = ps
|
ps_to_log = ps
|
||||||
log.debug('saving project-specific settings:\n%s', pformat(ps_to_log))
|
log.debug('saving project-specific settings:\n%s', pformat(ps_to_log))
|
||||||
|
|
||||||
all_settings[project_id] = ps
|
all_settings[project_id] = ps
|
||||||
prefs['project_settings'] = all_settings
|
prefs['project_settings'] = all_settings
|
||||||
|
|
||||||
|
|
||||||
|
def updated_manager(_=None, _2=None):
|
||||||
|
"""When the manager selector in FlamencoManagerGroup is updated.
|
||||||
|
|
||||||
|
If a new manager is selected:
|
||||||
|
- store the manager id in the flamenco_manager key
|
||||||
|
- load the configuration of such manager in the settings fields
|
||||||
|
"""
|
||||||
|
global project_settings_loading
|
||||||
|
if project_settings_loading:
|
||||||
|
return
|
||||||
|
store()
|
||||||
|
handle_project_update()
|
||||||
|
Reference in New Issue
Block a user