fix: debounce automatic meeting stops

This commit is contained in:
2026-08-26 10:13:39 +02:00
parent 79b2f61dfe
commit aed34f6d28
3 changed files with 24 additions and 7 deletions
+19 -2
View File
@@ -200,7 +200,9 @@ private final class LocalRecordingController {
static let shared = LocalRecordingController()
private let recordingManager = RecordingSessionManager.shared
private let stopGraceNanoseconds: UInt64 = 10_000_000_000
private var isStopping = false
private var pendingStopTask: Task<Void, Never>?
private init() {}
@@ -237,6 +239,12 @@ private final class LocalRecordingController {
}
func startRecording() throws -> [String: Any] {
if let pendingStopTask {
pendingStopTask.cancel()
self.pendingStopTask = nil
isStopping = false
return statusPayload()
}
if isStopping || recordingManager.isProcessing {
throw LocalRecordingError.processing
}
@@ -258,14 +266,22 @@ private final class LocalRecordingController {
return statusPayload()
}
isStopping = true
Task { [weak self] in
pendingStopTask = Task { [weak self] in
try? await Task.sleep(nanoseconds: self?.stopGraceNanoseconds ?? 0)
guard !Task.isCancelled else { return }
await self?.finishRecording()
}
return statusPayload()
}
func cancelRecording() -> [String: Any] {
guard !isStopping else { return statusPayload() }
if let pendingStopTask {
pendingStopTask.cancel()
self.pendingStopTask = nil
isStopping = false
} else if isStopping {
return statusPayload()
}
let meetingID = recordingManager.activeMeetingId
recordingManager.cancelRecording()
if let meetingID,
@@ -277,6 +293,7 @@ private final class LocalRecordingController {
}
private func finishRecording() async {
pendingStopTask = nil
let meetingID = recordingManager.activeMeetingId
let chunks = await recordingManager.stopRecording()
guard let meetingID,