mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-02 08:54:53 +01:00
changed how reseting of plugins and instances work
This commit is contained in:
parent
7c101b7e02
commit
30c36283ac
3 changed files with 39 additions and 36 deletions
|
|
@ -26,8 +26,8 @@ class PublisherController:
|
|||
dbcon.install()
|
||||
self.dbcon = dbcon
|
||||
|
||||
self._reset_callback_refs = set()
|
||||
self._on_create_callback_refs = set()
|
||||
self._instances_refresh_callback_refs = set()
|
||||
self._plugins_refresh_callback_refs = set()
|
||||
|
||||
self.creators = {}
|
||||
|
||||
|
|
@ -37,15 +37,16 @@ class PublisherController:
|
|||
|
||||
self.instances = []
|
||||
|
||||
self._in_reset = False
|
||||
self._resetting_plugins = False
|
||||
self._resetting_instances = False
|
||||
|
||||
def add_on_reset_callback(self, callback):
|
||||
def add_instances_refresh_callback(self, callback):
|
||||
ref = weakref.WeakMethod(callback)
|
||||
self._reset_callback_refs.add(ref)
|
||||
self._instances_refresh_callback_refs.add(ref)
|
||||
|
||||
def add_on_create_callback(self, callback):
|
||||
def add_plugins_refresh_callback(self, callback):
|
||||
ref = weakref.WeakMethod(callback)
|
||||
self._on_create_callback_refs.add(ref)
|
||||
self._plugins_refresh_callback_refs.add(ref)
|
||||
|
||||
def _trigger_callbacks(self, callbacks, *args, **kwargs):
|
||||
# Trigger reset callbacks
|
||||
|
|
@ -61,16 +62,8 @@ class PublisherController:
|
|||
callbacks.remove(ref)
|
||||
|
||||
def reset(self):
|
||||
if self._in_reset:
|
||||
return
|
||||
|
||||
self._in_reset = True
|
||||
self._reset()
|
||||
|
||||
# Trigger reset callbacks
|
||||
self._trigger_callbacks(self._reset_callback_refs)
|
||||
|
||||
self._in_reset = False
|
||||
self._reset_plugin()
|
||||
self._reset_instances()
|
||||
|
||||
def _get_publish_plugins_with_attr_for_family(self, family):
|
||||
if family not in self._attr_plugins_by_family:
|
||||
|
|
@ -81,8 +74,13 @@ class PublisherController:
|
|||
|
||||
return self._attr_plugins_by_family[family]
|
||||
|
||||
def _reset(self):
|
||||
def _reset_plugin(self):
|
||||
"""Reset to initial state."""
|
||||
if self._resetting_plugins:
|
||||
return
|
||||
|
||||
self._resetting_plugins = True
|
||||
|
||||
# Reset publish plugins
|
||||
self._attr_plugins_by_family = {}
|
||||
|
||||
|
|
@ -117,6 +115,16 @@ class PublisherController:
|
|||
|
||||
self.creators = creators
|
||||
|
||||
self._resetting_plugins = False
|
||||
|
||||
self._trigger_callbacks(self._plugins_refresh_callback_refs)
|
||||
|
||||
def _reset_instances(self):
|
||||
if self._resetting_instances:
|
||||
return
|
||||
|
||||
self._resetting_instances = True
|
||||
|
||||
# Collect instances
|
||||
host_instances = self.host.list_instances()
|
||||
instances = []
|
||||
|
|
@ -124,7 +132,7 @@ class PublisherController:
|
|||
family = instance_data["family"]
|
||||
# Prepare publish plugins with attribute definitions
|
||||
|
||||
creator = creators.get(family)
|
||||
creator = self.creators.get(family)
|
||||
attr_plugins = self._get_publish_plugins_with_attr_for_family(
|
||||
family
|
||||
)
|
||||
|
|
@ -135,6 +143,10 @@ class PublisherController:
|
|||
|
||||
self.instances = instances
|
||||
|
||||
self._resetting_instances = False
|
||||
|
||||
self._trigger_callbacks(self._instances_refresh_callback_refs)
|
||||
|
||||
def get_family_attribute_definitions(self, instances):
|
||||
output = []
|
||||
_attr_defs = {}
|
||||
|
|
@ -198,16 +210,9 @@ class PublisherController:
|
|||
# QUESTION Force to return instances or call `list_instances` on each
|
||||
# creation? (`list_instances` may slow down...)
|
||||
creator = self.creators[family]
|
||||
result = creator.create(subset_name, instance_data, options)
|
||||
if result and not isinstance(result, (list, tuple)):
|
||||
result = [result]
|
||||
creator.create(subset_name, instance_data, options)
|
||||
|
||||
for instance in result:
|
||||
self.instances.append(instance)
|
||||
|
||||
self._trigger_callbacks(self._on_create_callback_refs)
|
||||
|
||||
return result
|
||||
self._reset_instances()
|
||||
|
||||
def save_instance_changes(self):
|
||||
update_list = []
|
||||
|
|
@ -221,3 +226,5 @@ class PublisherController:
|
|||
|
||||
def remove_instances(self, instances):
|
||||
self.host.remove_instances(instances)
|
||||
|
||||
self._reset_instances()
|
||||
|
|
|
|||
|
|
@ -476,7 +476,7 @@ class CreateDialog(QtWidgets.QDialog):
|
|||
)
|
||||
variant_hints_menu.triggered.connect(self._on_variant_action)
|
||||
|
||||
controller.add_on_reset_callback(self._on_control_reset)
|
||||
controller.add_plugins_refresh_callback(self._on_plugins_refresh)
|
||||
|
||||
self.asset_name_input = asset_name_input
|
||||
self.subset_name_input = subset_name_input
|
||||
|
|
@ -580,7 +580,7 @@ class CreateDialog(QtWidgets.QDialog):
|
|||
index = self.family_model.index(0, 0)
|
||||
self.family_view.setCurrentIndex(index)
|
||||
|
||||
def _on_control_reset(self):
|
||||
def _on_plugins_refresh(self):
|
||||
# Trigger refresh only if is visible
|
||||
if self.isVisible():
|
||||
self.refresh()
|
||||
|
|
|
|||
|
|
@ -135,8 +135,7 @@ class PublisherWindow(QtWidgets.QWidget):
|
|||
|
||||
creator_window = CreateDialog(controller, self)
|
||||
|
||||
controller.add_on_reset_callback(self._on_control_reset)
|
||||
controller.add_on_create_callback(self._on_control_create)
|
||||
controller.add_instances_refresh_callback(self._on_instances_refresh)
|
||||
|
||||
reset_btn.clicked.connect(self._on_reset_clicked)
|
||||
|
||||
|
|
@ -289,10 +288,7 @@ class PublisherWindow(QtWidgets.QWidget):
|
|||
# Force to change instance and refresh details
|
||||
self._on_subset_change()
|
||||
|
||||
def _on_control_create(self):
|
||||
self._refresh_instances()
|
||||
|
||||
def _on_control_reset(self):
|
||||
def _on_instances_refresh(self):
|
||||
self._refresh_instances()
|
||||
|
||||
def _on_subset_change(self, *_args):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue