Skip to content

Commit 0ce121c

Browse files
committed
🩹(frontend) make recording statuses more accurate
Link recording statuses to the `isRecording` attribute from the room on the client side. After the refactor, the frontend relied only on recording statuses computed by the backend. However, when egress is started and the backend is notified, the recording is not actually active yet. It takes some time for the egress to join the room and begin recording. Enrich the frontend by combining backend statuses with the room recording state to more accurately reflect when recording is truly active. This avoids missing the first few seconds of audio at the beginning of a recording.
1 parent 5607cf6 commit 0ce121c

2 files changed

Lines changed: 19 additions & 5 deletions

File tree

src/frontend/src/features/recording/components/RecordingStateToast.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { Button as RACButton } from 'react-aria-components'
1212
import { useSidePanel } from '@/features/rooms/livekit/hooks/useSidePanel'
1313
import { useRoomMetadata } from '../hooks/useRoomMetadata'
1414
import { RecordingStatusIcon } from './RecordingStatusIcon'
15+
import { useIsRecording } from '@livekit/components-react'
1516

1617
export const RecordingStateToast = () => {
1718
const { t } = useTranslation('rooms', {
@@ -46,6 +47,7 @@ export const RecordingStateToast = () => {
4647
const isStarting = isTranscriptStarting || isScreenRecordingStarting
4748

4849
const metadata = useRoomMetadata()
50+
const isRecording = useIsRecording()
4951

5052
const key = useMemo(() => {
5153
if (!metadata?.recording_status || !metadata?.recording_mode) {
@@ -56,8 +58,14 @@ export const RecordingStateToast = () => {
5658
return undefined
5759
}
5860

59-
return `${metadata.recording_mode}.${metadata.recording_status}`
60-
}, [metadata, isStarted, isStarting])
61+
let status = metadata.recording_status
62+
63+
if (isStarted && !isRecording) {
64+
status = 'starting'
65+
}
66+
67+
return `${metadata.recording_mode}.${status}`
68+
}, [metadata, isStarted, isStarting, isRecording])
6169

6270
if (!key) return null
6371

src/frontend/src/features/recording/hooks/useRecordingStatuses.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { RecordingMode } from '@/features/recording'
22
import { useRoomMetadata } from './useRoomMetadata'
33
import { useMemo } from 'react'
4+
import { useIsRecording } from '@livekit/components-react'
45

56
export enum RecordingStatus {
67
Starting = 'starting',
@@ -26,13 +27,18 @@ export const useRecordingStatuses = (
2627
mode: RecordingMode
2728
): RecordingStatuses => {
2829
const metadata = useRoomMetadata()
30+
const isRecording = useIsRecording()
2931

3032
return useMemo(() => {
3133
if (metadata && metadata?.recording_mode === mode) {
3234
return {
3335
isAnotherModeStarted: false,
34-
isStarting: metadata.recording_status === RecordingStatus.Starting,
35-
isStarted: metadata.recording_status === RecordingStatus.Started,
36+
isStarting:
37+
metadata.recording_status === RecordingStatus.Starting ||
38+
(metadata.recording_status === RecordingStatus.Started &&
39+
!isRecording),
40+
isStarted:
41+
metadata.recording_status === RecordingStatus.Started && isRecording,
3642
isSaving: metadata.recording_status === RecordingStatus.Saving,
3743
isActive: ACTIVE_STATUSES.includes(
3844
metadata.recording_status as RecordingStatus
@@ -52,5 +58,5 @@ export const useRecordingStatuses = (
5258
isSaving: false,
5359
isActive: false,
5460
}
55-
}, [mode, metadata])
61+
}, [mode, metadata, isRecording])
5662
}

0 commit comments

Comments
 (0)