fixed autoscroll, second case, update received messages, resend text for information if voice message sendet

This commit is contained in:
duffyduck 2026-03-29 12:09:17 +02:00
parent 8fb95b884f
commit 8c1dac86d5
16 changed files with 57 additions and 6 deletions

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
#Sun Mar 29 11:54:43 CEST 2026
#Sun Mar 29 12:08:20 CEST 2026
base.2=/home/duffy/Dokumente/programmierung/ARIA-AGENT/android/android/app/build/intermediates/dex/release/mergeDexRelease/classes2.dex
path.2=classes2.dex
base.1=/home/duffy/Dokumente/programmierung/ARIA-AGENT/android/android/app/build/intermediates/global_synthetics_dex/release/classes.dex

View File

@ -96,6 +96,24 @@ const ChatScreen: React.FC = () => {
// RVS-Nachrichten abonnieren
useEffect(() => {
const unsubMessage = rvs.onMessage((message: RVSMessage) => {
// STT-Ergebnis: Spracheingabe-Placeholder mit transkribiertem Text ersetzen
if (message.type === 'stt_result') {
const sttText = (message.payload.text as string) || '';
if (sttText) {
setMessages(prev => prev.map(m =>
m.sender === 'user' && m.text.includes('Spracheingabe wird verarbeitet')
? { ...m, text: sttText }
: m
));
} else {
// Keine Sprache erkannt — Placeholder entfernen
setMessages(prev => prev.filter(m =>
!(m.sender === 'user' && m.text.includes('Spracheingabe wird verarbeitet'))
));
}
return;
}
if (message.type === 'chat') {
// Nur Nachrichten von ARIA anzeigen — eigene Nachrichten werden lokal hinzugefuegt
const sender = (message.payload.sender as string) || '';
@ -207,9 +225,14 @@ const ChatScreen: React.FC = () => {
// Auto-Scroll bei neuen Nachrichten
useEffect(() => {
if (messages.length > 0) {
// Laengerer Delay damit FlatList fertig gerendert hat
setTimeout(() => {
flatListRef.current?.scrollToEnd({ animated: false });
}, 300);
// Nochmal animiert fuer den Fall dass sich die Hoehe geaendert hat
setTimeout(() => {
flatListRef.current?.scrollToEnd({ animated: true });
}, 100);
}, 600);
}
}, [messages]);

View File

@ -1047,9 +1047,27 @@ class ARIABridge:
if text.strip():
logger.info("[rvs] STT Ergebnis: '%s'", text[:80])
# STT-Ergebnis zurueck an die App senden (zur Anzeige, nicht nochmal verarbeiten)
await self._send_to_rvs({
"type": "stt_result",
"payload": {
"text": text,
"sender": "user",
},
"timestamp": int(asyncio.get_event_loop().time() * 1000),
})
await self.send_to_core(text, source="app-voice")
else:
logger.info("[rvs] Keine Sprache erkannt — ignoriert")
await self._send_to_rvs({
"type": "stt_result",
"payload": {
"text": "",
"error": "Keine Sprache erkannt",
"sender": "user",
},
"timestamp": int(asyncio.get_event_loop().time() * 1000),
})
except Exception:
logger.exception("[rvs] Audio-Verarbeitung fehlgeschlagen")

View File

@ -501,7 +501,9 @@
}
if (msg.type === 'rvs_chat') {
const p = msg.msg.payload || {};
addChat('received', p.text || '?', `via RVS (${p.sender || '?'})`);
const sender = p.sender || '?';
const chatType = (sender === 'aria') ? 'received' : 'sent';
addChat(chatType, p.text || '?', `via RVS (${sender})`);
return;
}
if (msg.type === 'proxy_result') {

View File

@ -338,6 +338,14 @@ function handleGatewayMessage(msg) {
log("info", "gateway", `ANTWORT: "${text.slice(0, 200)}"`);
if (pipelineActive) pipelineEnd(true, `"${text.slice(0, 120)}"`);
broadcast({ type: "chat_final", text, payload });
// Antwort auch an RVS weiterleiten → App bekommt ARIAs Antworten
if (rvsWs && rvsWs.readyState === WebSocket.OPEN && text) {
rvsWs.send(JSON.stringify({
type: "chat",
payload: { text, sender: "aria" },
timestamp: Date.now(),
}));
}
return;
}