change claude proxy name and added ws support in adroid app
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
* QR-Scanner fuer Pairing, Moduswahl, GPS-Toggle, Log-Viewer.
|
||||
*/
|
||||
|
||||
import React, { useState, useEffect, useCallback } from 'react';
|
||||
import React, { useState, useEffect, useCallback, useRef } from 'react';
|
||||
import {
|
||||
View,
|
||||
Text,
|
||||
@@ -16,7 +16,7 @@ import {
|
||||
Alert,
|
||||
Platform,
|
||||
} from 'react-native';
|
||||
import rvs, { ConnectionState, RVSMessage, ConnectionConfig } from '../services/rvs';
|
||||
import rvs, { ConnectionState, RVSMessage, ConnectionConfig, ConnectionLogEntry } from '../services/rvs';
|
||||
import ModeSelector from '../components/ModeSelector';
|
||||
import QRScanner from '../components/QRScanner';
|
||||
|
||||
@@ -61,14 +61,29 @@ const SettingsScreen: React.FC = () => {
|
||||
const [logTab, setLogTab] = useState<LogTab>('live');
|
||||
const [logs, setLogs] = useState<LogEntry[]>([]);
|
||||
const [events, setEvents] = useState<EventEntry[]>([]);
|
||||
const [connLog, setConnLog] = useState<ConnectionLogEntry[]>(rvs.getConnectionLog());
|
||||
|
||||
let logIdCounter = 0;
|
||||
|
||||
// RVS-Nachrichten abonnieren (Logs und Events)
|
||||
// Gespeicherte Config in die Felder laden
|
||||
useEffect(() => {
|
||||
const config = rvs.getConfig();
|
||||
if (config) {
|
||||
setManualHost(config.host);
|
||||
setManualPort(String(config.port));
|
||||
setManualToken(config.token);
|
||||
}
|
||||
}, []);
|
||||
|
||||
// RVS-Nachrichten und Verbindungslog abonnieren
|
||||
useEffect(() => {
|
||||
const unsubState = rvs.onStateChange(setConnectionState);
|
||||
setConnectionState(rvs.getState());
|
||||
|
||||
const unsubLog = rvs.onLog((entry) => {
|
||||
setConnLog(prev => [...prev.slice(-99), entry]);
|
||||
});
|
||||
|
||||
const unsubMessage = rvs.onMessage((message: RVSMessage) => {
|
||||
if (message.type === 'log') {
|
||||
const entry: LogEntry = {
|
||||
@@ -101,6 +116,7 @@ const SettingsScreen: React.FC = () => {
|
||||
return () => {
|
||||
unsubState();
|
||||
unsubMessage();
|
||||
unsubLog();
|
||||
};
|
||||
}, []);
|
||||
|
||||
@@ -250,6 +266,47 @@ const SettingsScreen: React.FC = () => {
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
|
||||
{/* === Verbindungslog === */}
|
||||
<Text style={styles.sectionTitle}>Verbindungslog</Text>
|
||||
<View style={styles.card}>
|
||||
<ScrollView
|
||||
style={styles.connLogScroll}
|
||||
nestedScrollEnabled={true}
|
||||
ref={(ref) => {
|
||||
// Auto-Scroll nach unten bei neuen Eintraegen
|
||||
if (ref && connLog.length > 0) {
|
||||
setTimeout(() => ref.scrollToEnd({ animated: false }), 50);
|
||||
}
|
||||
}}
|
||||
>
|
||||
{connLog.length > 0 ? (
|
||||
connLog.slice(-50).map((entry, idx) => (
|
||||
<View key={`cl_${idx}`} style={styles.logEntry}>
|
||||
<Text style={styles.logTime}>{formatTime(entry.timestamp)}</Text>
|
||||
<Text
|
||||
style={[
|
||||
styles.logMessage,
|
||||
entry.level === 'error' && styles.logError,
|
||||
entry.level === 'warn' && styles.logWarn,
|
||||
]}
|
||||
numberOfLines={3}
|
||||
>
|
||||
{entry.message}
|
||||
</Text>
|
||||
</View>
|
||||
))
|
||||
) : (
|
||||
<Text style={styles.emptyLog}>Noch keine Verbindungsversuche</Text>
|
||||
)}
|
||||
</ScrollView>
|
||||
<TouchableOpacity
|
||||
style={styles.clearButton}
|
||||
onPress={() => setConnLog([])}
|
||||
>
|
||||
<Text style={styles.clearButtonText}>Log l{'\u00F6'}schen</Text>
|
||||
</TouchableOpacity>
|
||||
</View>
|
||||
|
||||
{/* === Modus === */}
|
||||
<Text style={styles.sectionTitle}>Betriebsmodus</Text>
|
||||
<View style={styles.card}>
|
||||
@@ -526,6 +583,12 @@ const styles = StyleSheet.create({
|
||||
tabTextActive: {
|
||||
color: '#FFFFFF',
|
||||
},
|
||||
connLogScroll: {
|
||||
maxHeight: 200,
|
||||
backgroundColor: '#0A0A18',
|
||||
borderRadius: 8,
|
||||
padding: 10,
|
||||
},
|
||||
logContainer: {
|
||||
maxHeight: 300,
|
||||
backgroundColor: '#0A0A18',
|
||||
|
||||
Reference in New Issue
Block a user