Skip to content

Commit 4883ad4

Browse files
committed
Update API
1 parent 5dfdc12 commit 4883ad4

File tree

12 files changed

+137
-37
lines changed

12 files changed

+137
-37
lines changed

DemoApp/Sources/Views/CallView/CallingView/SimpleCallingView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ struct SimpleCallingView: View {
202202
return
203203
}
204204
let call = streamVideo.call(callType: callType, callId: callId)
205-
await call.updateClientCapabilities(clientCapabilities)
205+
await call.enableClientCapabilities(clientCapabilities)
206206
}
207207

208208
private func parseURLIfRequired(_ text: String) {

DocumentationTests/DocumentationTests/DocumentationTests/05-ui-cookbook/25-incoming-video-state.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import Combine
77
fileprivate func content() {
88
asyncContainer {
99
let call = streamVideo.call(callType: "default", callId: "my-call-id")
10-
await call.updateClientCapabilities([])
10+
await call.disableClientCapabilities([.subscriberVideoPause])
1111
}
1212

1313
container {

Sources/StreamVideo/Call.swift

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1389,14 +1389,32 @@ public class Call: @unchecked Sendable, WSEventsSubscriber {
13891389
proximity.remove(policy)
13901390
}
13911391

1392-
// MARK: - ClientCapabilities
1392+
// MARK: - Client Capabilities
13931393

1394-
/// Updates the set of client capabilities for the call.
1394+
/// Enables a set of client capabilities for the call.
13951395
///
1396-
/// - Parameter clientCapabilities: A set of client capabilities that influence
1397-
/// subscription logic (e.g., support for paused tracks).
1398-
public func updateClientCapabilities(_ clientCapabilities: Set<ClientCapability>) async {
1399-
await callController.updateClientCapabilities(clientCapabilities)
1396+
/// Use this to activate one or more client capabilities for the current call
1397+
/// session. Enabling capabilities may affect how features such as paused tracks,
1398+
/// bandwidth management, or other optional behaviors work for this call.
1399+
///
1400+
/// - Parameter capabilities: The set of capabilities to enable.
1401+
public func enableClientCapabilities(
1402+
_ capabilities: Set<ClientCapability>
1403+
) async {
1404+
await callController.enableClientCapabilities(capabilities)
1405+
}
1406+
1407+
/// Disables a set of client capabilities for the call.
1408+
///
1409+
/// Use this to deactivate one or more client capabilities for the current call
1410+
/// session. Disabling capabilities can limit or remove optional features
1411+
/// associated with those capabilities.
1412+
///
1413+
/// - Parameter capabilities: The set of capabilities to disable.
1414+
public func disableClientCapabilities(
1415+
_ capabilities: Set<ClientCapability>
1416+
) async {
1417+
await callController.disableClientCapabilities(capabilities)
14001418
}
14011419

14021420
// MARK: - Internal

Sources/StreamVideo/Controllers/CallController.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -505,8 +505,14 @@ class CallController: @unchecked Sendable {
505505
try webRTCCoordinator.callKitActivated(audioSession)
506506
}
507507

508-
func updateClientCapabilities(_ capabilities: Set<ClientCapability>) async {
509-
await webRTCCoordinator.updateClientCapabilities(capabilities)
508+
// MARK: - Client Capabilities
509+
510+
func enableClientCapabilities(_ capabilities: Set<ClientCapability>) async {
511+
await webRTCCoordinator.enableClientCapabilities(capabilities)
512+
}
513+
514+
func disableClientCapabilities(_ capabilities: Set<ClientCapability>) async {
515+
await webRTCCoordinator.disableClientCapabilities(capabilities)
510516
}
511517

512518
// MARK: - private

Sources/StreamVideo/WebRTC/v2/WebRTCCoordinator.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -436,8 +436,12 @@ final class WebRTCCoordinator: @unchecked Sendable {
436436
try stateAdapter.audioSession.callKitActivated(audioSession)
437437
}
438438

439-
func updateClientCapabilities(_ capabilities: Set<ClientCapability>) async {
440-
await stateAdapter.set(clientCapabilities: capabilities)
439+
func enableClientCapabilities(_ capabilities: Set<ClientCapability>) async {
440+
await stateAdapter.enableClientCapabilities(capabilities)
441+
}
442+
443+
func disableClientCapabilities(_ capabilities: Set<ClientCapability>) async {
444+
await stateAdapter.disableClientCapabilities(capabilities)
441445
}
442446

443447
// MARK: - Private

Sources/StreamVideo/WebRTC/v2/WebRTCStateAdapter.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,8 +220,14 @@ actor WebRTCStateAdapter: ObservableObject, StreamAudioSessionAdapterDelegate {
220220
statsAdapter?.isTracingEnabled = value
221221
}
222222

223-
func set(clientCapabilities value: Set<ClientCapability>) {
224-
self.clientCapabilities = value
223+
// MARK: - Client Capabilities
224+
225+
func enableClientCapabilities(_ capabilities: Set<ClientCapability>) {
226+
self.clientCapabilities = self.clientCapabilities.union(capabilities)
227+
}
228+
229+
func disableClientCapabilities(_ capabilities: Set<ClientCapability>) {
230+
self.clientCapabilities = self.clientCapabilities.subtracting(capabilities)
225231
}
226232

227233
// MARK: - Session Management

StreamVideoTests/Call/Call_Tests.swift

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -537,19 +537,37 @@ final class Call_Tests: StreamVideoTestCase {
537537
XCTAssert(call?.state.broadcasting == false)
538538
}
539539

540-
// MARK: - updateClientCapabilities
540+
// MARK: - enableClientCapabilities
541541

542-
func test_updateClientCapabilities_correctlyUpdatesStateAdapter() async throws {
542+
func test_enableClientCapabilities_correctlyUpdatesStateAdapter() async throws {
543543
let mockCallController = MockCallController()
544544
let call = MockCall(.dummy(callController: mockCallController))
545545
call.stub(for: \.state, with: .init())
546546

547-
await call.updateClientCapabilities([.subscriberVideoPause])
547+
await call.enableClientCapabilities([.subscriberVideoPause])
548548

549549
XCTAssertEqual(
550550
mockCallController.recordedInputPayload(
551551
Set<ClientCapability>.self,
552-
for: .updateClientCapabilities
552+
for: .enableClientCapabilities
553+
)?.first,
554+
[.subscriberVideoPause]
555+
)
556+
}
557+
558+
// MARK: - disableClientCapabilities
559+
560+
func test_disableClientCapabilities_correctlyUpdatesStateAdapter() async throws {
561+
let mockCallController = MockCallController()
562+
let call = MockCall(.dummy(callController: mockCallController))
563+
call.stub(for: \.state, with: .init())
564+
565+
await call.disableClientCapabilities([.subscriberVideoPause])
566+
567+
XCTAssertEqual(
568+
mockCallController.recordedInputPayload(
569+
Set<ClientCapability>.self,
570+
for: .disableClientCapabilities
553571
)?.first,
554572
[.subscriberVideoPause]
555573
)

StreamVideoTests/Controllers/CallController_Tests.swift

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -659,15 +659,28 @@ final class CallController_Tests: StreamVideoTestCase, @unchecked Sendable {
659659
XCTAssertEqual(call.state.anonymousParticipantCount, 0)
660660
}
661661

662-
func test_updateClientCapabilities_correctlyUpdatesStateAdapter() async throws {
663-
await subject.updateClientCapabilities([.subscriberVideoPause])
662+
// MARK: - enableClientCapabilities
663+
664+
func test_enableClientCapabilities_correctlyUpdatesStateAdapter() async throws {
665+
await subject.enableClientCapabilities([.subscriberVideoPause])
664666

665667
await assertEqualAsync(
666668
await mockWebRTCCoordinatorFactory.mockCoordinatorStack.coordinator.stateAdapter.clientCapabilities,
667669
[.subscriberVideoPause]
668670
)
669671
}
670672

673+
// MARK: - disableClientCapabilities
674+
675+
func test_disableClientCapabilities_correctlyUpdatesStateAdapter() async throws {
676+
await subject.disableClientCapabilities([.subscriberVideoPause])
677+
678+
await assertEqualAsync(
679+
await mockWebRTCCoordinatorFactory.mockCoordinatorStack.coordinator.stateAdapter.clientCapabilities,
680+
[]
681+
)
682+
}
683+
671684
// MARK: - Private helpers
672685

673686
private func assertTransitionToStage(

StreamVideoTests/Mock/MockCallController.swift

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ final class MockCallController: CallController, Mockable, @unchecked Sendable {
1212
case setDisconnectionTimeout
1313
case observeWebRTCStateUpdated
1414
case changeVideoState
15-
case updateClientCapabilities
15+
case enableClientCapabilities
16+
case disableClientCapabilities
1617
}
1718

1819
enum MockFunctionInputKey: Payloadable {
@@ -30,7 +31,9 @@ final class MockCallController: CallController, Mockable, @unchecked Sendable {
3031

3132
case changeVideoState(Bool)
3233

33-
case updateClientCapabilities(Set<ClientCapability>)
34+
case enableClientCapabilities(Set<ClientCapability>)
35+
36+
case disableClientCapabilities(Set<ClientCapability>)
3437

3538
var payload: Any {
3639
switch self {
@@ -42,7 +45,9 @@ final class MockCallController: CallController, Mockable, @unchecked Sendable {
4245
return ()
4346
case let .changeVideoState(value):
4447
return value
45-
case let .updateClientCapabilities(value):
48+
case let .enableClientCapabilities(value):
49+
return value
50+
case let .disableClientCapabilities(value):
4651
return value
4752
}
4853
}
@@ -121,8 +126,17 @@ final class MockCallController: CallController, Mockable, @unchecked Sendable {
121126
.append(.changeVideoState(isEnabled))
122127
}
123128

124-
override func updateClientCapabilities(_ capabilities: Set<ClientCapability>) async {
125-
stubbedFunctionInput[.updateClientCapabilities]?
126-
.append(.updateClientCapabilities(capabilities))
129+
override func enableClientCapabilities(
130+
_ capabilities: Set<ClientCapability>
131+
) async {
132+
stubbedFunctionInput[.enableClientCapabilities]?
133+
.append(.enableClientCapabilities(capabilities))
134+
}
135+
136+
override func disableClientCapabilities(
137+
_ capabilities: Set<ClientCapability>
138+
) async {
139+
stubbedFunctionInput[.disableClientCapabilities]?
140+
.append(.disableClientCapabilities(capabilities))
127141
}
128142
}

StreamVideoTests/WebRTC/v2/StateMachine/Stages/WebRTCCoordinatorStateMachine_JoiningStageTests.swift

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,10 +114,6 @@ final class WebRTCCoordinatorStateMachine_JoiningStageTests: XCTestCase, @unchec
114114
.stateAdapter
115115
.set(sfuAdapter: mockCoordinatorStack.sfuStack.adapter)
116116

117-
await mockCoordinatorStack
118-
.coordinator
119-
.updateClientCapabilities([.subscriberVideoPause])
120-
121117
try await assertTransition(
122118
from: .connected,
123119
expectedTarget: .disconnected,

0 commit comments

Comments
 (0)