In the iOS SimpleChatbot, fix @MainActor-related warnings (which would be errors in Swift 6). The delegate methods aren't contractually guaranteed to run on the main thread, so we can't mark them as @MainActor.

This commit is contained in:
Paul Kompfner
2025-01-09 17:34:31 -05:00
parent 216979c377
commit 3239249feb

View File

@@ -127,55 +127,73 @@ extension CallContainerModel:RTVIClientDelegate, LLMHelperDelegate {
} }
func onTransportStateChanged(state: TransportState) { func onTransportStateChanged(state: TransportState) {
Task { @MainActor in
self.handleEvent(eventName: "onTransportStateChanged", eventValue: state) self.handleEvent(eventName: "onTransportStateChanged", eventValue: state)
self.voiceClientStatus = state.description self.voiceClientStatus = state.description
self.isInCall = ( state == .connecting || state == .connected || state == .ready || state == .authenticating ) self.isInCall = ( state == .connecting || state == .connected || state == .ready || state == .authenticating )
} }
}
@MainActor
func onBotReady(botReadyData: BotReadyData) { func onBotReady(botReadyData: BotReadyData) {
Task { @MainActor in
self.handleEvent(eventName: "onBotReady.") self.handleEvent(eventName: "onBotReady.")
self.isBotReady = true self.isBotReady = true
if let expirationTime = self.rtviClientIOS?.expiry() { if let expirationTime = self.rtviClientIOS?.expiry() {
self.startTimer(withExpirationTime: expirationTime) self.startTimer(withExpirationTime: expirationTime)
} }
} }
}
@MainActor
func onConnected() { func onConnected() {
Task { @MainActor in
self.isMicEnabled = self.rtviClientIOS?.isMicEnabled ?? false self.isMicEnabled = self.rtviClientIOS?.isMicEnabled ?? false
} }
}
func onDisconnected() { func onDisconnected() {
Task { @MainActor in
self.stopTimer() self.stopTimer()
self.isBotReady = false self.isBotReady = false
} }
}
func onRemoteAudioLevel(level: Float, participant: Participant) { func onRemoteAudioLevel(level: Float, participant: Participant) {
Task { @MainActor in
self.remoteAudioLevel = level self.remoteAudioLevel = level
} }
}
func onUserAudioLevel(level: Float) { func onUserAudioLevel(level: Float) {
Task { @MainActor in
self.localAudioLevel = level self.localAudioLevel = level
} }
}
func onUserTranscript(data: Transcript) { func onUserTranscript(data: Transcript) {
Task { @MainActor in
if (data.final ?? false) { if (data.final ?? false) {
self.handleEvent(eventName: "onUserTranscript", eventValue: data.text) self.handleEvent(eventName: "onUserTranscript", eventValue: data.text)
} }
} }
}
func onBotTranscript(data: String) { func onBotTranscript(data: String) {
Task { @MainActor in
self.handleEvent(eventName: "onBotTranscript", eventValue: data) self.handleEvent(eventName: "onBotTranscript", eventValue: data)
} }
}
func onError(message: String) { func onError(message: String) {
Task { @MainActor in
self.handleEvent(eventName: "onError", eventValue: message) self.handleEvent(eventName: "onError", eventValue: message)
self.showError(message: message) self.showError(message: message)
} }
}
func onTracksUpdated(tracks: Tracks) { func onTracksUpdated(tracks: Tracks) {
Task { @MainActor in
self.handleEvent(eventName: "onTracksUpdated", eventValue: tracks) self.handleEvent(eventName: "onTracksUpdated", eventValue: tracks)
} }
}
} }