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:
Francesco Siddi 2018-07-25 15:01:39 +02:00
parent 62d16fff35
commit 973dafcc3a
2 changed files with 58 additions and 3 deletions

View File

@ -68,7 +68,7 @@ class FlamencoManagerGroup(PropertyGroup):
items=available_managers,
name='Flamenco Manager',
description='Which Flamenco Manager to use for jobs',
update=project_specific.store,
update=project_specific.updated_manager,
)
status = EnumProperty(
@ -89,6 +89,7 @@ class FlamencoManagerGroup(PropertyGroup):
@available_managers.setter
def available_managers(self, new_managers):
self['available_managers'] = new_managers
project_specific.updated_manager()
class FlamencoPollMixin:
@ -676,6 +677,24 @@ class FLAMENCO_PT_render(bpy.types.Panel, FlamencoPollMixin):
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.label('Job Type:')
labeled_row.prop(context.scene, 'flamenco_render_job_type', text='')

View File

@ -63,6 +63,12 @@ def handle_project_update(_=None, _2=None):
log.debug('setting flamenco manager to %s', manager_id)
try:
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:
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:
ps[name] = getattr(prefs, name)
ps['flamenco_manager'] = prefs.flamenco_manager.manager
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
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):
from pprint import pformat
@ -100,6 +123,19 @@ def store(_=None, _2=None):
else:
ps_to_log = ps
log.debug('saving project-specific settings:\n%s', pformat(ps_to_log))
all_settings[project_id] = ps
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()