fix: debounce automatic meeting stops
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user