From 6c27097c96da2ea14b3f846cc1daa53faa27811a Mon Sep 17 00:00:00 2001 From: duffyduck Date: Tue, 21 Jul 2026 01:08:37 +0200 Subject: [PATCH] fix(app): gruener Desktop-Punkt nur bei laufender VM im aktiven Projekt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Badge haing bisher am globalen desktop_status (irgendwo ein Desktop erreichbar) → wurde generell angezeigt. Jetzt aus der projektbezogenen VM-Liste (listProjectVms → running), pid-Guard, 6s-Refresh fuer Start/Stop. Co-Authored-By: Claude Opus 4.8 --- android/src/workspace/WorkspaceScreen.tsx | 25 +++++++++++++++-------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/android/src/workspace/WorkspaceScreen.tsx b/android/src/workspace/WorkspaceScreen.tsx index 40af6f8..0c0225b 100644 --- a/android/src/workspace/WorkspaceScreen.tsx +++ b/android/src/workspace/WorkspaceScreen.tsx @@ -5,13 +5,13 @@ * Cockpit-Modus → Workbench mit Taskleisten-Dock: Chat · Code · Desktop. * * Aktivitaets-Badges am Dock: Editor blau, wenn schon Code-Dateien da sind; - * Desktop gruen, wenn eine VM verbunden ist. + * Desktop gruen NUR, wenn im aktiven Projekt eine VM laeuft. */ import React, { useEffect, useMemo, useState } from 'react'; import projectFocus, { FocusSnapshot } from '../services/projectFocus'; import codeFile from '../services/codeFile'; -import desktop from '../services/desktop'; +import brainApi from '../services/brainApi'; import viewMode, { ViewModeValue } from '../services/viewMode'; import ChatScreen from '../screens/ChatScreen'; import { TileId } from './layout'; @@ -29,7 +29,6 @@ const WorkspaceScreen: React.FC = () => { useEffect(() => projectFocus.subscribe(setFocus), []); const pid = focus.focusedProjectId; - const kind = projectFocus.getProjectKind(pid); // Code-Signal: hat der Spiegel schon Dateien fuer dieses Projekt? useEffect(() => { @@ -39,13 +38,21 @@ const WorkspaceScreen: React.FC = () => { }); }, [pid]); - // Desktop-Signal + einmaliger Check beim Betreten eines Code-Projekts. + // Desktop-Signal: gruener Punkt NUR, wenn im AKTIVEN Projekt wirklich eine VM + // laeuft (nicht generell irgendwo). Quelle ist die projektbezogene VM-Liste; + // leichtes Nachfassen, damit Start/Stop sich zeitnah zeigt. useEffect(() => { - setHasDesktop(desktop.getStatus().available); - const unsub = desktop.subscribeStatus((s) => setHasDesktop(s.available)); - if (kind === 'code') desktop.requestCheck(pid); - return unsub; - }, [pid, kind]); + if (!pid) { setHasDesktop(false); return; } + let alive = true; + const check = () => { + brainApi.listProjectVms(pid) + .then(r => { if (alive) setHasDesktop((r.vms || []).some(v => v.running)); }) + .catch(() => { if (alive) setHasDesktop(false); }); + }; + check(); + const t = setInterval(check, 6000); + return () => { alive = false; clearInterval(t); }; + }, [pid]); const badges = useMemo(() => ({ editor: hasCode ? '#0096FF' : undefined,