Skip to content

Commit f685b3c

Browse files
committed
swiftformat
1 parent 928fc11 commit f685b3c

10 files changed

+213
-104
lines changed

ios/.swift-version

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
5.9

ios/.swiftformat

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
--exclude Sources/LiveKit/Protos
2+
--header "/*\n * Copyright {year} LiveKit\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */"
3+
--ifdef no-indent
4+
--disable modifiersOnSameLine

ios/AudioUtils.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
/*
2+
* Copyright 2025 LiveKit
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
117
import AVFoundation
218

319
public class AudioUtils {

ios/LiveKitReactNativeModule.swift

Lines changed: 50 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,44 @@
1-
import livekit_react_native_webrtc
2-
import AVFoundation
1+
/*
2+
* Copyright 2025 LiveKit
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
317
import AVFAudio
18+
import AVFoundation
19+
import livekit_react_native_webrtc
420
import React
521

6-
struct LKEvents {
7-
static let kEventVolumeProcessed = "LK_VOLUME_PROCESSED";
8-
static let kEventMultibandProcessed = "LK_MULTIBAND_PROCESSED";
9-
static let kEventAudioData = "LK_AUDIO_DATA";
22+
enum LKEvents {
23+
static let kEventVolumeProcessed = "LK_VOLUME_PROCESSED"
24+
static let kEventMultibandProcessed = "LK_MULTIBAND_PROCESSED"
25+
static let kEventAudioData = "LK_AUDIO_DATA"
1026
}
1127

1228
@objc(LivekitReactNativeModule)
1329
public class LivekitReactNativeModule: RCTEventEmitter {
14-
1530
// This cannot be initialized in init as self.bridge is given afterwards.
16-
private var _audioRendererManager: AudioRendererManager? = nil
31+
private var _audioRendererManager: AudioRendererManager?
1732
public var audioRendererManager: AudioRendererManager {
18-
get {
19-
if _audioRendererManager == nil {
20-
_audioRendererManager = AudioRendererManager(bridge: self.bridge)
21-
}
22-
23-
return _audioRendererManager!
33+
if _audioRendererManager == nil {
34+
_audioRendererManager = AudioRendererManager(bridge: bridge)
2435
}
36+
37+
return _audioRendererManager!
2538
}
2639

2740
@objc
28-
public override init() {
41+
override public init() {
2942
super.init()
3043
let config = RTCAudioSessionConfiguration()
3144
config.category = AVAudioSession.Category.playAndRecord.rawValue
@@ -37,7 +50,7 @@ public class LivekitReactNativeModule: RCTEventEmitter {
3750

3851
@objc
3952
override public static func requiresMainQueueSetup() -> Bool {
40-
return false
53+
false
4154
}
4255

4356
@objc
@@ -61,8 +74,8 @@ public class LivekitReactNativeModule: RCTEventEmitter {
6174
let rtcConfig = RTCAudioSessionConfiguration()
6275
rtcConfig.category = AVAudioSession.Category.playAndRecord.rawValue
6376

64-
if (defaultOutput == "earpiece") {
65-
rtcConfig.categoryOptions = [.allowAirPlay, .allowBluetooth, .allowBluetoothA2DP];
77+
if defaultOutput == "earpiece" {
78+
rtcConfig.categoryOptions = [.allowAirPlay, .allowBluetooth, .allowBluetoothA2DP]
6679
rtcConfig.mode = AVAudioSession.Mode.voiceChat.rawValue
6780
} else {
6881
rtcConfig.categoryOptions = [.allowAirPlay, .allowBluetooth, .allowBluetoothA2DP, .defaultToSpeaker]
@@ -119,17 +132,17 @@ public class LivekitReactNativeModule: RCTEventEmitter {
119132
}
120133

121134
@objc(getAudioOutputsWithResolver:withRejecter:)
122-
public func getAudioOutputs(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock){
135+
public func getAudioOutputs(resolve: RCTPromiseResolveBlock, reject _: RCTPromiseRejectBlock) {
123136
resolve(["default", "force_speaker"])
124137
}
125138

126139
@objc(selectAudioOutput:withResolver:withRejecter:)
127140
public func selectAudioOutput(_ deviceId: String, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
128141
let session = AVAudioSession.sharedInstance()
129142
do {
130-
if (deviceId == "default") {
143+
if deviceId == "default" {
131144
try session.overrideOutputAudioPort(.none)
132-
} else if (deviceId == "force_speaker") {
145+
} else if deviceId == "force_speaker" {
133146
try session.overrideOutputAudioPort(.speaker)
134147
}
135148
} catch {
@@ -154,15 +167,15 @@ public class LivekitReactNativeModule: RCTEventEmitter {
154167
session.unlockForConfiguration()
155168
}
156169

157-
if let appleAudioCategory = appleAudioCategory {
170+
if let appleAudioCategory {
158171
config.category = AudioUtils.audioSessionCategoryFromString(appleAudioCategory).rawValue
159172
}
160173

161-
if let appleAudioCategoryOptions = appleAudioCategoryOptions {
174+
if let appleAudioCategoryOptions {
162175
config.categoryOptions = AudioUtils.audioSessionCategoryOptionsFromStrings(appleAudioCategoryOptions)
163176
}
164177

165-
if let appleAudioMode = appleAudioMode {
178+
if let appleAudioMode {
166179
config.mode = AudioUtils.audioSessionModeFromString(appleAudioMode).rawValue
167180
}
168181

@@ -173,41 +186,40 @@ public class LivekitReactNativeModule: RCTEventEmitter {
173186
reject("setAppleAudioConfiguration", "Error setting category: \(error.localizedDescription)", error)
174187
return
175188
}
176-
177189
}
178190

179191
@objc(createAudioSinkListener:trackId:)
180192
public func createAudioSinkListener(_ pcId: NSNumber, trackId: String) -> String {
181193
let renderer = AudioSinkRenderer(eventEmitter: self)
182-
let reactTag = self.audioRendererManager.registerRenderer(renderer)
194+
let reactTag = audioRendererManager.registerRenderer(renderer)
183195
renderer.reactTag = reactTag
184-
self.audioRendererManager.attach(renderer: renderer, pcId: pcId, trackId: trackId)
196+
audioRendererManager.attach(renderer: renderer, pcId: pcId, trackId: trackId)
185197

186198
return reactTag
187199
}
188200

189201
@objc(deleteAudioSinkListener:pcId:trackId:)
190202
public func deleteAudioSinkListener(_ reactTag: String, pcId: NSNumber, trackId: String) -> Any? {
191-
self.audioRendererManager.detach(rendererByTag: reactTag, pcId: pcId, trackId: trackId)
192-
self.audioRendererManager.unregisterRenderer(forReactTag: reactTag)
203+
audioRendererManager.detach(rendererByTag: reactTag, pcId: pcId, trackId: trackId)
204+
audioRendererManager.unregisterRenderer(forReactTag: reactTag)
193205

194206
return nil
195207
}
196208

197209
@objc(createVolumeProcessor:trackId:)
198210
public func createVolumeProcessor(_ pcId: NSNumber, trackId: String) -> String {
199211
let renderer = VolumeAudioRenderer(intervalMs: 40.0, eventEmitter: self)
200-
let reactTag = self.audioRendererManager.registerRenderer(renderer)
212+
let reactTag = audioRendererManager.registerRenderer(renderer)
201213
renderer.reactTag = reactTag
202-
self.audioRendererManager.attach(renderer: renderer, pcId: pcId, trackId: trackId)
214+
audioRendererManager.attach(renderer: renderer, pcId: pcId, trackId: trackId)
203215

204216
return reactTag
205217
}
206218

207219
@objc(deleteVolumeProcessor:pcId:trackId:)
208220
public func deleteVolumeProcessor(_ reactTag: String, pcId: NSNumber, trackId: String) -> Any? {
209-
self.audioRendererManager.detach(rendererByTag: reactTag, pcId: pcId, trackId: trackId)
210-
self.audioRendererManager.unregisterRenderer(forReactTag: reactTag)
221+
audioRendererManager.detach(rendererByTag: reactTag, pcId: pcId, trackId: trackId)
222+
audioRendererManager.unregisterRenderer(forReactTag: reactTag)
211223

212224
return nil
213225
}
@@ -226,17 +238,17 @@ public class LivekitReactNativeModule: RCTEventEmitter {
226238
intervalMs: intervalMs,
227239
eventEmitter: self
228240
)
229-
let reactTag = self.audioRendererManager.registerRenderer(renderer)
241+
let reactTag = audioRendererManager.registerRenderer(renderer)
230242
renderer.reactTag = reactTag
231-
self.audioRendererManager.attach(renderer: renderer, pcId: pcId, trackId: trackId)
243+
audioRendererManager.attach(renderer: renderer, pcId: pcId, trackId: trackId)
232244

233245
return reactTag
234246
}
235247

236248
@objc(deleteMultibandVolumeProcessor:pcId:trackId:)
237249
public func deleteMultibandVolumeProcessor(_ reactTag: String, pcId: NSNumber, trackId: String) -> Any? {
238-
self.audioRendererManager.detach(rendererByTag: reactTag, pcId: pcId, trackId: trackId)
239-
self.audioRendererManager.unregisterRenderer(forReactTag: reactTag)
250+
audioRendererManager.detach(rendererByTag: reactTag, pcId: pcId, trackId: trackId)
251+
audioRendererManager.unregisterRenderer(forReactTag: reactTag)
240252

241253
return nil
242254
}
@@ -250,7 +262,7 @@ public class LivekitReactNativeModule: RCTEventEmitter {
250262
}
251263

252264
override public func supportedEvents() -> [String]! {
253-
return [
265+
[
254266
LKEvents.kEventVolumeProcessed,
255267
LKEvents.kEventMultibandProcessed,
256268
LKEvents.kEventAudioData,

ios/Logging.swift

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,20 @@
1+
/*
2+
* Copyright 2025 LiveKit
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
117
public func lklog(_ object: Any, functionName: String = #function, fileName: String = #file, lineNumber: Int = #line) {
2-
let className = (fileName as NSString).lastPathComponent
3-
print("\(className).\(functionName):\(lineNumber) : \(object)\n")
18+
let className = (fileName as NSString).lastPathComponent
19+
print("\(className).\(functionName):\(lineNumber) : \(object)\n")
420
}

ios/audio/AudioRendererManager.swift

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,85 @@
1+
/*
2+
* Copyright 2025 LiveKit
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
117
import livekit_react_native_webrtc
218

319
@objc
420
public class AudioRendererManager: NSObject {
521
private let bridge: RCTBridge
622
public private(set) var renderers: [String: RTCAudioRenderer] = [:]
7-
23+
824
init(bridge: RCTBridge) {
925
self.bridge = bridge
1026
}
11-
27+
1228
@objc
1329
public func registerRenderer(_ audioRenderer: RTCAudioRenderer) -> String {
1430
let reactTag = NSUUID().uuidString
15-
self.renderers[reactTag] = audioRenderer
31+
renderers[reactTag] = audioRenderer
1632
return reactTag
1733
}
18-
34+
1935
@objc
2036
public func unregisterRenderer(forReactTag: String) {
21-
self.renderers.removeValue(forKey: forReactTag)
37+
renderers.removeValue(forKey: forReactTag)
2238
}
23-
39+
2440
@objc
2541
public func unregisterRenderer(_ audioRenderer: RTCAudioRenderer) {
26-
self.renderers = self.renderers.filter({ $0.value !== audioRenderer })
42+
renderers = renderers.filter { $0.value !== audioRenderer }
2743
}
28-
44+
2945
@objc
3046
public func attach(renderer: RTCAudioRenderer, pcId: NSNumber, trackId: String) {
31-
let webrtcModule = self.bridge.module(for: WebRTCModule.self) as! WebRTCModule
47+
let webrtcModule = bridge.module(for: WebRTCModule.self) as! WebRTCModule
3248
guard let track = webrtcModule.track(forId: trackId, pcId: pcId) as? RTCAudioTrack
3349
else {
3450
lklog("couldn't find audio track: pcId: \(pcId), trackId: \(trackId)")
3551
return
3652
}
37-
38-
if (pcId == -1) {
39-
LKAudioProcessingManager.sharedInstance().addLocalAudioRenderer(renderer);
53+
54+
if pcId == -1 {
55+
LKAudioProcessingManager.sharedInstance().addLocalAudioRenderer(renderer)
4056
} else {
4157
track.add(renderer)
4258
}
4359
}
44-
60+
4561
@objc
46-
public func detach(rendererByTag reactTag:String, pcId: NSNumber, trackId: String){
47-
guard let renderer = self.renderers[reactTag]
62+
public func detach(rendererByTag reactTag: String, pcId: NSNumber, trackId: String) {
63+
guard let renderer = renderers[reactTag]
4864
else {
4965
lklog("couldn't find renderer: tag: \(reactTag)")
5066
return
5167
}
52-
68+
5369
detach(renderer: renderer, pcId: pcId, trackId: trackId)
5470
}
55-
71+
5672
@objc
5773
public func detach(renderer: RTCAudioRenderer, pcId: NSNumber, trackId: String) {
58-
let webrtcModule = self.bridge.module(for: WebRTCModule.self) as! WebRTCModule
74+
let webrtcModule = bridge.module(for: WebRTCModule.self) as! WebRTCModule
5975
guard let track = webrtcModule.track(forId: trackId, pcId: pcId) as? RTCAudioTrack
6076
else {
6177
lklog("couldn't find audio track: pcId: \(pcId), trackId: \(trackId)")
6278
return
6379
}
64-
65-
if (pcId == -1) {
66-
LKAudioProcessingManager.sharedInstance().removeLocalAudioRenderer(renderer);
80+
81+
if pcId == -1 {
82+
LKAudioProcessingManager.sharedInstance().removeLocalAudioRenderer(renderer)
6783
} else {
6884
track.remove(renderer)
6985
}

0 commit comments

Comments
 (0)