diff --git a/client/devkit_client/__init__.py b/client/devkit_client/__init__.py index 3cd7e63cb417cde0265355d8693db435883e5860..591de352fbba1dea81f5485da03bd7b359628a81 100644 --- a/client/devkit_client/__init__.py +++ b/client/devkit_client/__init__.py @@ -248,6 +248,10 @@ def locate_external_tools(): return g_external_tools if sys.platform != 'win32': g_external_tools = (None, 'ssh', 'rsync', None) + for tool in g_external_tools: + if tool is not None: + if shutil.which(tool) is None: + raise Exception(f'{tool} not found - please install.') return g_external_tools cygpath = _locate_external_tool('cygpath.exe') diff --git a/client/devkit_client/gui2/gui2.py b/client/devkit_client/gui2/gui2.py index 0e9aa58f002ced9f3e945d28c11937930279da28..e84255fb453af21a54b919bb319366a7ceca910a 100644 --- a/client/devkit_client/gui2/gui2.py +++ b/client/devkit_client/gui2/gui2.py @@ -1076,6 +1076,7 @@ class DevkitsWindow(ToolWindow): self.add_by_ip_text = '' self.add_by_ip_port = '{}'.format(devkit_client.DEFAULT_DEVKIT_SERVICE_HTTP) self.steam_client_args = None + self.first_draw = True # Hook into status updates to refresh the command line arguments self.devkit_commands.signal_steamos_status.connect(self.on_steamos_status) # Indicates whether Valve internal services are available @@ -1203,6 +1204,20 @@ class DevkitsWindow(ToolWindow): return # === draw ========================================================================= + if self.first_draw: + try: + devkit_client.locate_external_tools() + except Exception as e: + failed_future = concurrent.futures.Future() + failed_future.set_exception(e) + self.modal_wait = ModalWait( + self.viewport, + self.toolbar, + 'ERROR', + failed_future + ) + self.first_draw = False + (_, opened) = imgui.begin(self.BUTTON_NAME, True, imgui.WINDOW_NO_COLLAPSE) if not opened: self.visible = False