From c6dae784ce313cce0c97dde4fd0270970106e851 Mon Sep 17 00:00:00 2001 From: Jakub Jezek Date: Fri, 23 Apr 2021 18:10:41 +0200 Subject: [PATCH] Hiero: adding callback to fix asset data in our tags if clip name changed --- openpype/hosts/hiero/api/events.py | 25 +++++++++---- openpype/hosts/hiero/api/lib.py | 56 ++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 7 deletions(-) diff --git a/openpype/hosts/hiero/api/events.py b/openpype/hosts/hiero/api/events.py index c02e3e2ac4..3df095f9e4 100644 --- a/openpype/hosts/hiero/api/events.py +++ b/openpype/hosts/hiero/api/events.py @@ -2,7 +2,12 @@ import os import hiero.core.events import avalon.api as avalon from openpype.api import Logger -from .lib import sync_avalon_data_to_workfile, launch_workfiles_app +from .lib import ( + sync_avalon_data_to_workfile, + launch_workfiles_app, + selection_changed_timeline, + before_project_save +) from .tags import add_tags_to_workfile from .menu import update_menu_task_label @@ -78,7 +83,7 @@ def register_hiero_events(): "Registering events for: kBeforeNewProjectCreated, " "kAfterNewProjectCreated, kBeforeProjectLoad, kAfterProjectLoad, " "kBeforeProjectSave, kAfterProjectSave, kBeforeProjectClose, " - "kAfterProjectClose, kShutdown, kStartup" + "kAfterProjectClose, kShutdown, kStartup, kSelectionChanged" ) # hiero.core.events.registerInterest( @@ -91,8 +96,8 @@ def register_hiero_events(): hiero.core.events.registerInterest( "kAfterProjectLoad", afterProjectLoad) - # hiero.core.events.registerInterest( - # "kBeforeProjectSave", beforeProjectSaved) + hiero.core.events.registerInterest( + "kBeforeProjectSave", before_project_save) # hiero.core.events.registerInterest( # "kAfterProjectSave", afterProjectSaved) # @@ -104,10 +109,16 @@ def register_hiero_events(): # hiero.core.events.registerInterest("kShutdown", shutDown) # hiero.core.events.registerInterest("kStartup", startupCompleted) - # workfiles - hiero.core.events.registerEventType("kStartWorkfiles") - hiero.core.events.registerInterest("kStartWorkfiles", launch_workfiles_app) + hiero.core.events.registerInterest( + ("kSelectionChanged", "kTimeline"), selection_changed_timeline) + # workfiles + try: + hiero.core.events.registerEventType("kStartWorkfiles") + hiero.core.events.registerInterest( + "kStartWorkfiles", launch_workfiles_app) + except RuntimeError: + pass def register_events(): """ diff --git a/openpype/hosts/hiero/api/lib.py b/openpype/hosts/hiero/api/lib.py index 553741e56d..1d613aff5a 100644 --- a/openpype/hosts/hiero/api/lib.py +++ b/openpype/hosts/hiero/api/lib.py @@ -912,3 +912,59 @@ def get_sequence_pattern_and_padding(file): return found, padding else: return None, None + +def sync_clip_name_to_data_asset(track_items_list): + # loop trough all selected clips + for track_item in track_items_list: + # ignore if parent track is locked or disabled + if track_item.parent().isLocked(): + continue + if not track_item.parent().isEnabled(): + continue + # ignore if the track item is disabled + if not track_item.isEnabled(): + continue + + # get name and data + ti_name = track_item.name() + data = get_track_item_pype_data(track_item) + + # ignore if no data on the clip or not publish instance + if not data: + continue + if data.get("id") != "pyblish.avalon.instance": + continue + + # fix data if wrong name + if data["asset"] != ti_name: + data["asset"] = ti_name + # remove the original tag + tag = get_track_item_pype_tag(track_item) + track_item.removeTag(tag) + # create new tag with updated data + set_track_item_pype_tag(track_item, data) + print("asset was changed in clip: {}".format(ti_name)) + +def selection_changed_timeline(event): + """Callback on timeline to check if asset in data is the same as clip name. + + Args: + event (hiero.core.Event): timeline event + """ + timeline_editor = event.sender + selection = timeline_editor.selection() + + # run checking function + sync_clip_name_to_data_asset(selection) + + +def before_project_save(event): + track_items = get_track_items( + selected=False, + track_type="video", + check_enabled=True, + check_locked=True, + check_tagged=True) + + # run checking function + sync_clip_name_to_data_asset(track_items) \ No newline at end of file