Jump to content


  • Posts

  • Joined

  • Last visited

EHonda's Achievements

  1. Hi all, I know that ftrack has a great feature Actions, that allows you to add new functionalities to ftrack (besides that it requires ftrack-connect). https://www.ftrack.com/en/actions Also, I know that there is a way to create custom widgets using Create React App. https://help.ftrack.com/en/articles/4490918-creating-a-custom-widget-with-react But I'm wondering if there is a way to customize ftrack's default page's context menu. Sorry for the analogy, but Shotgrid has a functionality that allows users to add custom items in the context menu, and it was really handy and helpful. https://support.shotgunsoftware.com/hc/en-us/articles/219031318-Creating-custom-Action-Menu-Items Is there any way that I could add custom items in the context menu in ftrack? Thanks for any help. Best Regards, Honda
  2. Hi Steve, Thanks for the snippet! It works like a charm! The session.call with 'action': '_get_tempdata' argument was simply mind-blowing. Is there any resource or documentation to learn more about that kind of function? The legacy and new API entity type names conversion seems to be simple. I'm planning to follow the information in the link below: https://ftrack-python-api.rtd.ftrack.com/en/stable/example/manage_custom_attribute_configuration.html#entity-types Best Regards, Honda
  3. Hi all, I was testing ftrack integration with RV and encountered some difficulties to handle the data between them. Hope that someone knows any workarounds. Before anything, the long story short: Is it possible to query real entityId and entityType from tempdata? To explain what I tested and what are my thoughts, I made an simple graph showing a flow chart of how ftrack-RV integration works. It is important to say that those tests are based on how RV works in Windows 10 environment with an normal RV installation. --- Windows 10 RV 7.5.1 ftrack-connect 1.1.2 --- ,─────, ( ftrack ) '─────' ├───────────────────────────────────────────────────────┐ ↓ ↓ ┌──────────┐ ┌─────┐ │ play in RV button │ │ Actions │ └──────────┘ └─────┘ │ ↓ ↓ ┌───────────┐ ┌─────────┐ │ ftrack Connect -> RV │ │ RVLINK protocol │ └───────────┘ └─────────┘ ↓ │ ,────────────────────────────────────────, ↓ ( "C:\Program Files\Shotgun\RV-7.5.1\bin\rv.exe" rvlink://baked/...(assetVersion) ) defined in ftrack_connect_rv_hook.py ┌──────────────────────────────┐ '────────────────────────────────────────' │ call registry HKEY_CLASSES_ROOT\rvlink\shell\open\command │ └──────────────────────────────┘ │ ↓ ┌──────────────────────────────────────────────────┐ │ "C:\Program Files\Shotgun\RV-7.5.1\bin\rvpush.exe" -tag rvlink url "rvlink://baked/...(tempdata)" │ or whatever is in the registry └──────────────────────────────────────────────────┘ │ / \ < rvpush could find a rv.exe instance with networkTag rvlink already running? \ / │ ├───────────────┐ │ │ │ YES │ NO ↓ │ ,─────────────────, │ ( connect to already running rv.exe )│ '─────────────────' │ / \ < RVPUSH_RV_EXECUTABLE_PATH is defined? \ / │ ├─────┐ │ │ │ YES │ NO │ ↓ │ ,────────────────────────────────────────────────────, │ ( "C:\Program Files\Shotgun\RV-7.5.1\bin\rv.exe" -networkTag rvlink -network rvlink://baked/...(tempdata) ) ↓ '────────────────────────────────────────────────────' ,────────────────, ( call RVPUSH_RV_EXECUTABLE_PATH ) '────────────────' When a user selects an AssetVersion and pushes the "play selection in RV button", a rvlink protocol is called, rvpush.exe runs and rv.exe is launched. In this chain of executions, the rvlink url(passed to rv.exe as an argument) includes a tempdata information, instead of the information from selected entity. This tempdata info is read by RV, passed to FtrackMode.generateUrl, which generates and returns an temporary url. something like below: https://DOMAIN.ftrackapp.com/widget?view=freview_nav_v1&itemId=freview&theme=dark&auth_token=AUTHTOKEN&entityId=ENTITYID&entityType=tempdata This url is accessible from any browser, but I couldn't query entityId nor entityType of the item selected in the ftrack's webUI. On the other hand, when launching RV using Actions and ftrack-connect, real entityId and entityType are passed to RV, allowing me to handle those information easily. However, it has its cons: a.) to use it, I need an running instance of ftrack-connect b.) it always launches a new instance of RV About b.), customizing ftrack_rv_hook.ApplicationLauncher._getApplicationLaunchCommand function seems to solve the problem. Here is a sample code that shows how I implemented a custom launch process. def _getApplicationLaunchCommand(self, application, context=None): command = None if sys.platform in ('win32', ): # command = [application['path']] # ======================================================================================== # # CUSTOM LAUNCH PROCESS environment = self._getApplicationEnvironment(application, context) server = environment.get('FTRACK_SERVER') event = environment.get('FTRACK_CONNECT_EVENT') event_decode = base64.b64decode(event) event_obj = json.loads(event_decode) selection = event_obj.get('selection', '') rvlink_str = "-flags ModeManagerPreload=ftrack ftrackUrl=%s params='%s'" % ( server, selection ) rvlink_encoded = codecs.encode(rvlink_str, 'hex') # do not use normal command that calls rv.exe # instead, call an instance of cmd, start a rvlink protocol and call rvpush command = [ "cmd.exe", "/c", 'start', "", "rvlink://baked/%s" % rvlink_encoded ] # ======================================================================================== # else: self.logger.warning( 'Unable to find launch command for {0} on this platform.' .format(application['identifier']) ) return command With this code, I could call rvlink protocol using ftrack-connect RV launcher, instead of launching new RV instances every time. About a.), the only way I could solve was editing HKEY_CLASSES_ROOT\rvlink\shell\open\command in a way that launches RV with required environment variables. This allows me to launch a RV that mimics a RV instance launched from ftrack-connect, without the need of a running ftrack-connect instance. The problem is that, when calling RV from "play Selection in RV" button, I only have tempdata. As so, solving a.) does not solves my problem at all. I have the same problem as when I launched a ftrack instance without ftrack-connect, indeed. So I return to my first question: Is it possible to query real entityId and entityType from tempdata? I've already checked other posts in the forum: https://forum.ftrack.com/topic/987-ftrack-rv-integration https://forum.ftrack.com/topic/26-installation-guide-for-rv And some helps pages: https://help.ftrack.com/en/articles/1040451-review https://help.ftrack.com/en/articles/1040536-reviewing-in-hiero-player-or-rv Maybe I'm missing something or misunderstanding how integration works. I'll be glad if anyone could correct me or show me any workaround to reach entityId when using ftrack-RV integration without ftrack-connect's Actions. Thanks in advance. Best Regards, Honda
  • Create New...