From f29b44da07eac8ea98431b40bccfa1ae26bcffa8 Mon Sep 17 00:00:00 2001 From: chyoo Date: Thu, 13 Aug 2026 17:35:15 +0900 Subject: [PATCH] patch.. --- package.json | 2 +- src/main/index.ts | 4 ++-- .../workspace/WorkspaceRosConnectionsView.tsx | 15 ++++++++++++--- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index d4790a4..fad1209 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lms", - "version": "1.1.14", + "version": "1.1.15", "description": "Autonomy Studio LMS Electron app", "main": "./out/main/index.js", "author": { diff --git a/src/main/index.ts b/src/main/index.ts index 920bfbc..81a31ba 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -1237,7 +1237,7 @@ async function collectLocalRosGraph(): Promise { const names = (await runCommandOutput('docker', ['ps', '--format', '{{.Names}}'], undefined, undefined, 8_000)) .split('\n').map((line) => line.trim()).filter(Boolean) const containerName = pickRosGraphProbeContainer(names) - if (!containerName) return { topics: [], message: '실행 중인 ROS 컨테이너가 없습니다.' } + if (!containerName) return { topics: [] } const output = await runCommandOutput('docker', ['exec', containerName, 'bash', '-lc', rosGraphProbeCommand()], undefined, undefined, 12_000) return parseRosGraphSnapshot(output) } catch (error) { @@ -1251,7 +1251,7 @@ async function collectRemoteRosGraph(targetInput: RemoteWorkspaceTarget): Promis const names = (await runSshOutput(target, 'timeout 8s docker ps --format "{{.Names}}" 2>/dev/null || true', 15_000)) .split('\n').map((line) => line.trim()).filter(Boolean) const containerName = pickRosGraphProbeContainer(names) - if (!containerName) return { topics: [], message: '실행 중인 ROS 컨테이너가 없습니다.' } + if (!containerName) return { topics: [] } const output = await runSshOutput(target, `timeout 12s docker exec ${quoteShellSingle(containerName)} bash -lc ${quoteShellSingle(rosGraphProbeCommand())}`, 20_000) return parseRosGraphSnapshot(output) } catch (error) { diff --git a/src/renderer/src/features/workspace/WorkspaceRosConnectionsView.tsx b/src/renderer/src/features/workspace/WorkspaceRosConnectionsView.tsx index 082f7e5..a1f9128 100644 --- a/src/renderer/src/features/workspace/WorkspaceRosConnectionsView.tsx +++ b/src/renderer/src/features/workspace/WorkspaceRosConnectionsView.tsx @@ -133,6 +133,15 @@ function summarizeEndpoints(endpoints: RosEndpoint[]): string { return endpoints.length === 1 ? truncatedFirstNode : `${truncatedFirstNode} 외 ${endpoints.length - 1}` } +function uniqueEndpoints(endpoints: RosEndpoint[]): RosEndpoint[] { + const nodes = new Set() + return endpoints.filter((endpoint) => { + if (nodes.has(endpoint.node)) return false + nodes.add(endpoint.node) + return true + }) +} + function RuntimeLane({ title, modules, @@ -372,8 +381,8 @@ export default function WorkspaceRosConnectionsView({ const fallbackSubscribers = rosModules .filter((module) => module.subscribers.some((entry) => entry.name === item.name)) .map(({ module }) => ({ node: getModuleNodeName(module), type: item.type })) - const publishers = graphTopic?.publishers ?? fallbackPublishers - const subscribers = graphTopic?.subscribers ?? fallbackSubscribers + const publishers = uniqueEndpoints(graphTopic?.publishers ?? fallbackPublishers) + const subscribers = uniqueEndpoints(graphTopic?.subscribers ?? fallbackSubscribers) return { topic: { name: item.name, type: graphTopic?.types[0] ?? item.type }, publishers, @@ -546,7 +555,7 @@ export default function WorkspaceRosConnectionsView({ ) }) : ( -
+
실행 모듈에서 확인된 토픽이 없습니다.
)}