From 9a14eef55e3c3ed375d5d3d40b1eec41b6dd40dd Mon Sep 17 00:00:00 2001 From: lucas lelievre Date: Mon, 10 Mar 2025 03:02:40 +0100 Subject: [PATCH] BVH Status and Paused tracking is not presisted in gui (#1332) --- gui/src/components/BVHButton.tsx | 13 ++++++++++-- .../ClearDriftCompensationButton.tsx | 7 ++++++- gui/src/components/TrackingPauseButton.tsx | 15 ++++++++------ gui/src/components/WidgetsComponent.tsx | 6 +++--- .../dev/slimevr/protocol/rpc/RPCHandler.kt | 20 +++++++++++++++++++ solarxr-protocol | 2 +- 6 files changed, 50 insertions(+), 13 deletions(-) diff --git a/gui/src/components/BVHButton.tsx b/gui/src/components/BVHButton.tsx index cc24d84af..97b62afdd 100644 --- a/gui/src/components/BVHButton.tsx +++ b/gui/src/components/BVHButton.tsx @@ -1,5 +1,5 @@ import { useLocalization } from '@fluent/react'; -import { useState } from 'react'; +import { useEffect, useState } from 'react'; import { RecordBVHRequestT, RecordBVHStatusT, @@ -8,12 +8,17 @@ import { import { useWebsocketAPI } from '@/hooks/websocket-api'; import { BigButton } from './commons/BigButton'; import { RecordIcon } from './commons/icon/RecordIcon'; +import classNames from 'classnames'; export function BVHButton(props: React.HTMLAttributes) { const { l10n } = useLocalization(); const { useRPCPacket, sendRPCPacket } = useWebsocketAPI(); const [recording, setRecording] = useState(false); + useEffect(() => { + sendRPCPacket(RpcMessage.RecordBVHStatusRequest, new RecordBVHRequestT()); + }, []); + const toggleBVH = () => { const record = new RecordBVHRequestT(); record.stop = recording; @@ -29,7 +34,11 @@ export function BVHButton(props: React.HTMLAttributes) { text={l10n.getString(recording ? 'bvh-recording' : 'bvh-start_recording')} icon={} onClick={toggleBVH} - className={props.className} + className={classNames( + props.className, + 'border', + recording ? 'border-status-critical' : 'border-transparent' + )} > ); } diff --git a/gui/src/components/ClearDriftCompensationButton.tsx b/gui/src/components/ClearDriftCompensationButton.tsx index fb033c5e9..a71fcd4a7 100644 --- a/gui/src/components/ClearDriftCompensationButton.tsx +++ b/gui/src/components/ClearDriftCompensationButton.tsx @@ -4,7 +4,11 @@ import { useWebsocketAPI } from '@/hooks/websocket-api'; import { BigButton } from './commons/BigButton'; import { TrashIcon } from './commons/icon/TrashIcon'; -export function ClearDriftCompensationButton() { +export function ClearDriftCompensationButton({ + disabled, +}: { + disabled: boolean; +}) { const { l10n } = useLocalization(); const { sendRPCPacket } = useWebsocketAPI(); @@ -18,6 +22,7 @@ export function ClearDriftCompensationButton() { text={l10n.getString('widget-drift_compensation-clear')} icon={} onClick={clearDriftCompensation} + disabled={disabled} > {} diff --git a/gui/src/components/TrackingPauseButton.tsx b/gui/src/components/TrackingPauseButton.tsx index 8b7c0a041..db15b2201 100644 --- a/gui/src/components/TrackingPauseButton.tsx +++ b/gui/src/components/TrackingPauseButton.tsx @@ -1,5 +1,5 @@ import { useLocalization } from '@fluent/react'; -import { useState } from 'react'; +import { useEffect, useState } from 'react'; import { SetPauseTrackingRequestT, RpcMessage, @@ -10,6 +10,7 @@ import { useWebsocketAPI } from '@/hooks/websocket-api'; import { BigButton } from './commons/BigButton'; import { PlayIcon } from './commons/icon/PlayIcon'; import { PauseIcon } from './commons/icon/PauseIcon'; +import classNames from 'classnames'; export function TrackingPauseButton( props: React.HTMLAttributes @@ -30,10 +31,12 @@ export function TrackingPauseButton( } ); - sendRPCPacket( - RpcMessage.TrackingPauseStateRequest, - new TrackingPauseStateRequestT() - ); + useEffect(() => { + sendRPCPacket( + RpcMessage.TrackingPauseStateRequest, + new TrackingPauseStateRequestT() + ); + }, []); return ( : } onClick={toggleTracking} - className={props.className} + className={classNames(props.className, 'min-h-24')} > ); } diff --git a/gui/src/components/WidgetsComponent.tsx b/gui/src/components/WidgetsComponent.tsx index 08dd382ed..b5fe3649f 100644 --- a/gui/src/components/WidgetsComponent.tsx +++ b/gui/src/components/WidgetsComponent.tsx @@ -52,9 +52,9 @@ export function WidgetsComponent() { - {driftCompensationEnabled && ( - - )} +
diff --git a/server/core/src/main/java/dev/slimevr/protocol/rpc/RPCHandler.kt b/server/core/src/main/java/dev/slimevr/protocol/rpc/RPCHandler.kt index 19165b7c8..db7764a9f 100644 --- a/server/core/src/main/java/dev/slimevr/protocol/rpc/RPCHandler.kt +++ b/server/core/src/main/java/dev/slimevr/protocol/rpc/RPCHandler.kt @@ -87,6 +87,15 @@ class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler + this.onBVHStatusRequest( + conn, + messageHeader, + ) + } + registerPacketListener( RpcMessage.SkeletonResetAllRequest, ) { conn: GenericConnection, messageHeader: RpcMessageHeader -> @@ -300,6 +309,17 @@ class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler