-
Notifications
You must be signed in to change notification settings - Fork 26
[Performance]UI Improvements #829
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: fix/performance-improvements
Are you sure you want to change the base?
[Performance]UI Improvements #829
Conversation
Public Interface+ public final class ScreenPropertiesAdapter: @unchecked Sendable
+
+ public private var preferredFramesPerSecond: Int
+ public private var refreshRate: TimeInterval
+ public private var scale: CGFloat
+ extension Publishers
+
+ public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?)-> AnyPublisher<(A, B), Never>
+ public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?,_ c: AnyPublisher<C, Never>?,)-> AnyPublisher<(A, B, C), Never>
+ public protocol TimerProviding
+ public struct CurrentUserScreenSharingIndicatorView: View
+
+ public var body: some View
+ extension ScreenPropertiesAdapter: InjectionKey
+
+ public nonisolated static var currentValue: ScreenPropertiesAdapter
+ public actor SerialActorQueue
+
+ nonisolated public var unownedExecutor: UnownedSerialExecutor
+
+
+ public init(file: StaticString = #file)
+
+
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping Operation)-> QueueTask
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping @Sendable() async -> Void)-> QueueTask
+ @discardableResult public nonisolated func sync(@_inheritActorContext operation: @escaping @Sendable() async throws -> Output)async throws -> Output
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Void)-> QueueTask
+ @discardableResult public nonisolated func sync(@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Output)async throws -> Output
+ public nonisolated func cancelAll()
+
+
+ public final class QueueTask: @unchecked Sendable
+ public struct PublisherSubscriptionView: View
+
+ public var body: some View
+
+
+ public init(initial: Value,publisher: AnyPublisher<Value, Never>?,@ViewBuilder contentProvider: @escaping (Value) -> Content)
- public final class SerialActorQueue: Sendable
-
- public init()
-
-
- public func cancelAll()
- public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
- public func sync(_ block: @Sendable @escaping () async throws -> T)async throws -> T
open class VideoFilter: @unchecked Sendable
- public var filter: (Input) async -> CIImage
+ public var filter: (Input) -> CIImage
- public init(id: String,name: String,filter: @escaping (Input) async -> CIImage)
+ public init(id: String,name: String,filter: @escaping (Input) -> CIImage)
@available(iOS 15.0, *) public final class BlurBackgroundVideoFilter: VideoFilter, @unchecked Sendable
- @available(*, unavailable) override public init(id: String,name: String,filter: @escaping (Input) async -> CIImage)
+ @available(*, unavailable) override public init(id: String,name: String,filter: @escaping (Input) -> CIImage)
@available(iOS 15.0, *) public final class ImageBackgroundVideoFilter: VideoFilter, @unchecked Sendable
- @available(*, unavailable) override public init(id: String,name: String,filter: @escaping (Input) async -> CIImage)
+ @available(*, unavailable) override public init(id: String,name: String,filter: @escaping (Input) -> CIImage)
public struct StatelessHangUpIconView: View
- public weak var call: Call?
+ public var size: CGFloat
- public var size: CGFloat
+ public var actionHandler: ActionHandler?
- public var actionHandler: ActionHandler?
+ public var body: some View
- public var body: some View
+
-
+
-
+ @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
- @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
public final class DisposableBag: @unchecked Sendable
+ public func completed(_ key: String)
public struct CallView: View
- public var body: some View
+ case localVideo, screensharing, participantsView
- public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
+ public var body: some View
+
+
+ public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
- public enum ParticipantAction: Sendable
+ public enum ParticipantAction: Equatable, Sendable
extension Publisher
- public func sinkTask(storeIn disposableBag: DisposableBag? = nil,identifier: String? = nil,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+ public func sinkTask(storeIn disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
- public func sinkTask(queue: SerialActorQueue,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+ public func sinkTask(queue: SerialActorQueue,file: StaticString = #file,function: StaticString = #function,line: UInt = #line,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
extension Task
- public func store(in disposableBag: DisposableBag,key: String = UUID().uuidString)
+ @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async -> Success)
+ @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async throws -> Success)
+
+
+ public func store(in disposableBag: DisposableBag,identifier: String = UUID().uuidString)
- public enum CallingState: Equatable, CustomStringConvertible
+ public enum CallingState: Equatable, CustomStringConvertible, Sendable
public class StreamVideo: ObservableObject, @unchecked Sendable
- public var state: State
+ case ringEventReceived
- public let videoConfig: VideoConfig
+
- public var user: User
+
- public var isHardwareAccelerationAvailable: Bool
+ public var state: State
- public lazy var rejectionReasonProvider: RejectionReasonProviding
+ public let videoConfig: VideoConfig
-
+ public var user: User
-
+ public var isHardwareAccelerationAvailable: Bool
- public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
+ public lazy var rejectionReasonProvider: RejectionReasonProviding
- public func connect()async throws
+ public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
- public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
+
- public func makeCallsController(callsQuery: CallsQuery)-> CallsController
+
- @discardableResult public func setDevice(id: String)async throws -> ModelResponse
+ public func connect()async throws
- @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
+ public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
- @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
+ public func makeCallsController(callsQuery: CallsQuery)-> CallsController
- public func listDevices()async throws -> [Device]
+ @discardableResult public func setDevice(id: String)async throws -> ModelResponse
- public func disconnect()async
+ @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
- public func subscribe()-> AsyncStream<VideoEvent>
+ @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
- public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
+ public func listDevices()async throws -> [Device]
- public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+ public func disconnect()async
- public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+ public func eventPublisher()-> AnyPublisher<VideoEvent, Never>
-
+ public func eventPublisher(for event: WSEvent.Type)-> AnyPublisher<WSEvent, Never>
-
+ public func subscribe()-> AsyncStream<VideoEvent>
- public final class State: ObservableObject, @unchecked Sendable
+ public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
-
+ public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
- @Published public internal var connection: ConnectionStatus
+ public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
- @Published public internal var user: User
+
- @Published public internal var activeCall: Call?
+
- @Published public internal var ringingCall: Call?
+ public final class State: ObservableObject, @unchecked Sendable
+
+ @Published public internal var connection: ConnectionStatus
+ @Published public internal var user: User
+ @Published public internal var activeCall: Call?
+ @Published public internal var ringingCall: Call?
- public struct ParticipantEvent: Sendable
+ public struct ParticipantEvent: Equatable, Sendable
- public struct VideoCallParticipantView: View
+ public struct VideoCallParticipantView: View, Equatable
+
+
+ nonisolated public static func ==(lhs: VideoCallParticipantView<Factory>,rhs: VideoCallParticipantView<Factory>)-> Bool |
SDK Size
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's discuss it a bit further, we should also test it thoroughly.
@@ -123,8 +123,6 @@ public struct CallParticipant: Identifiable, Sendable, Hashable { | |||
lhs.sessionId == rhs.sessionId && | |||
lhs.connectionQuality == rhs.connectionQuality && | |||
lhs.joinedAt == rhs.joinedAt && | |||
lhs.audioLevel == rhs.audioLevel && |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This will probably have an impact on the AI integration, since we rely on the audio level there.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can expose equatable including AudioLevels for AI (closer to the View though and not on the model)
@@ -24,7 +24,7 @@ final class StreamVideoCaptureHandler: NSObject, RTCVideoCapturerDelegate { | |||
|
|||
init( | |||
source: RTCVideoCapturerDelegate, | |||
handleRotation: Bool = true | |||
handleRotation: Bool = false |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why is this changed?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Rewriting the frames has an impact but I just changed it back as it doesn't work correctly when rotating the device.
@@ -26,7 +26,7 @@ open class VideoFilter: @unchecked Sendable { | |||
public let name: String | |||
|
|||
/// Filter closure that takes a CIImage as input and returns a filtered CIImage as output. | |||
public var filter: (Input) async -> CIImage | |||
public var filter: (Input) -> CIImage |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
how big is the impact here? I would prefer to have it async tbh.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's something that we need to change to synchronous for sure (we are overly engineering something that it's not in our control). The frame generation pipeline is from WebRTC and the rendering is on AVFoundation. We are just in the middle doing stuff. I'm reverting it for now to reduce the amount of changes but this one has a big asterisk over it.
import Combine | ||
import SwiftUI | ||
|
||
public struct PublisherSubscriptionView<Value: Equatable, Content: View>: View { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you explain a bit more - how does this view help with performance?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's also discuss it offline but the summary is here:
- Avoids unnecessary view recomputation
- PublisherSubscriptionView isolates publisher observation in a lightweight ViewModel and drives only the local subtree through its contentProvider.
- Unlike onReceive placed in .body, which retriggers the full body recomputation every time the publisher emits, this keeps recomputation localized.
- More efficient than @ObservedObject/@StateObject in deep trees
- @ObservedObject or @StateObject triggers an entire View recomputation even if only a small part of the state changes.
- In contrast, PublisherSubscriptionView only updates the view model’s value, and only that part of the tree inside contentProvider is updated.
- This is crucial in deeply nested views, where updating the parent could result in cascading recomputations.
- Avoids binding propagation overhead
- Using Binding to propagate state deep into the hierarchy introduces multiple @State or @binding layers.
- This increases cognitive load, tightly couples components, and leads to rebuilding multiple views unnecessarily when state changes.
- PublisherSubscriptionView avoids this by scoping observation to exactly where it’s needed, minimizing rebuild impact.
@@ -17,7 +17,7 @@ final class VideoRendererPool: @unchecked Sendable { | |||
/// | |||
/// - Parameter initialCapacity: The initial capacity of the pool (default is 0). | |||
@MainActor | |||
init(initialCapacity: Int = 0) { | |||
init(initialCapacity: Int = 5) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why do we change this? Also, we should update the text above if we go with this change.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Now that rendering is happening in a more controlled way, this is actually seems to have benefits.
viewFactory | ||
.makeCallTopView(viewModel: viewModel) | ||
.presentParticipantEventsNotification(viewModel: viewModel) | ||
PublisherSubscriptionView( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
One thing to consider with custom wrappers is that customers would need to know about it. When they build custom views, they will probably just use observed objects directly.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's ok if customers do it. What's important is that we don't :)
var sharingPopupDismissed: Binding<Bool> | ||
|
||
public var body: some View { | ||
PublisherSubscriptionView( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you need more than one value from the VM, you would need to go back to the standard way, right?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You can combine publishers
0ded658
to
97d9279
Compare
Public Interface+ public struct PublisherSubscriptionView: View
+
+ public var body: some View
+
+
+ public init(initial: Value,publisher: AnyPublisher<Value, Never>?,@ViewBuilder contentProvider: @escaping (Value) -> Content)
+ public final class ScreenPropertiesAdapter: @unchecked Sendable
+
+ public private var preferredFramesPerSecond: Int
+ public private var refreshRate: TimeInterval
+ public private var scale: CGFloat
+ public actor SerialActorQueue
+
+ nonisolated public var unownedExecutor: UnownedSerialExecutor
+
+
+ public init(file: StaticString = #file)
+
+
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping Operation)-> QueueTask
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping @Sendable() async -> Void)-> QueueTask
+ @discardableResult public nonisolated func sync(@_inheritActorContext operation: @escaping @Sendable() async throws -> Output)async throws -> Output
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Void)-> QueueTask
+ @discardableResult public nonisolated func sync(@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Output)async throws -> Output
+ public nonisolated func cancelAll()
+
+
+ public final class QueueTask: @unchecked Sendable
+ public struct CurrentUserScreenSharingIndicatorView: View
+
+ public var body: some View
+ public protocol TimerProviding
+ extension ScreenPropertiesAdapter: InjectionKey
+
+ public nonisolated static var currentValue: ScreenPropertiesAdapter
+ extension Publishers
+
+ public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?)-> AnyPublisher<(A, B), Never>
+ public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?,_ c: AnyPublisher<C, Never>?,)-> AnyPublisher<(A, B, C), Never>
- public final class SerialActorQueue: Sendable
-
- public init()
-
-
- public func cancelAll()
- public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
- public func sync(_ block: @Sendable @escaping () async throws -> T)async throws -> T
- public struct VideoCallParticipantView: View
+ public struct VideoCallParticipantView: View, Equatable
+
+
+ nonisolated public static func ==(lhs: VideoCallParticipantView<Factory>,rhs: VideoCallParticipantView<Factory>)-> Bool
public struct StatelessHangUpIconView: View
- public weak var call: Call?
+ public var size: CGFloat
- public var size: CGFloat
+ public var actionHandler: ActionHandler?
- public var actionHandler: ActionHandler?
+ public var body: some View
- public var body: some View
+
-
+
-
+ @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
- @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
- public enum ParticipantAction: Sendable
+ public enum ParticipantAction: Equatable, Sendable
public class StreamVideo: ObservableObject, @unchecked Sendable
- public var state: State
+ case ringEventReceived
- public let videoConfig: VideoConfig
+
- public var user: User
+
- public var isHardwareAccelerationAvailable: Bool
+ public var state: State
- public lazy var rejectionReasonProvider: RejectionReasonProviding
+ public let videoConfig: VideoConfig
-
+ public var user: User
-
+ public var isHardwareAccelerationAvailable: Bool
- public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
+ public lazy var rejectionReasonProvider: RejectionReasonProviding
- public func connect()async throws
+ public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
- public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
+
- public func makeCallsController(callsQuery: CallsQuery)-> CallsController
+
- @discardableResult public func setDevice(id: String)async throws -> ModelResponse
+ public func connect()async throws
- @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
+ public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
- @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
+ public func makeCallsController(callsQuery: CallsQuery)-> CallsController
- public func listDevices()async throws -> [Device]
+ @discardableResult public func setDevice(id: String)async throws -> ModelResponse
- public func disconnect()async
+ @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
- public func subscribe()-> AsyncStream<VideoEvent>
+ @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
- public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
+ public func listDevices()async throws -> [Device]
- public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+ public func disconnect()async
- public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+ public func eventPublisher()-> AnyPublisher<VideoEvent, Never>
-
+ public func eventPublisher(for event: WSEvent.Type)-> AnyPublisher<WSEvent, Never>
-
+ public func subscribe()-> AsyncStream<VideoEvent>
- public final class State: ObservableObject, @unchecked Sendable
+ public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
-
+ public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
- @Published public internal var connection: ConnectionStatus
+ public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
- @Published public internal var user: User
+
- @Published public internal var activeCall: Call?
+
- @Published public internal var ringingCall: Call?
+ public final class State: ObservableObject, @unchecked Sendable
+
+ @Published public internal var connection: ConnectionStatus
+ @Published public internal var user: User
+ @Published public internal var activeCall: Call?
+ @Published public internal var ringingCall: Call?
extension Publisher
- public func sinkTask(storeIn disposableBag: DisposableBag? = nil,identifier: String? = nil,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+ public func sinkTask(storeIn disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
- public func sinkTask(queue: SerialActorQueue,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+ public func sinkTask(queue: SerialActorQueue,file: StaticString = #file,function: StaticString = #function,line: UInt = #line,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
- public enum CallingState: Equatable, CustomStringConvertible
+ public enum CallingState: Equatable, CustomStringConvertible, Sendable
extension Task
- public func store(in disposableBag: DisposableBag,key: String = UUID().uuidString)
+ @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async -> Success)
+ @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async throws -> Success)
+
+
+ public func store(in disposableBag: DisposableBag,identifier: String = UUID().uuidString)
- public struct ParticipantEvent: Sendable
+ public struct ParticipantEvent: Equatable, Sendable
public struct CallView: View
- public var body: some View
+ case localVideo, screensharing, participantsView
- public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
+ public var body: some View
+
+
+ public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
public final class DisposableBag: @unchecked Sendable
+ public func completed(_ key: String) |
Public Interface+ public protocol TimerProviding
+ public actor SerialActorQueue
+
+ nonisolated public var unownedExecutor: UnownedSerialExecutor
+
+
+ public init(file: StaticString = #file)
+
+
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping Operation)-> QueueTask
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping @Sendable() async -> Void)-> QueueTask
+ @discardableResult public nonisolated func sync(@_inheritActorContext operation: @escaping @Sendable() async throws -> Output)async throws -> Output
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Void)-> QueueTask
+ @discardableResult public nonisolated func sync(@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Output)async throws -> Output
+ public nonisolated func cancelAll()
+
+
+ public final class QueueTask: @unchecked Sendable
+ public struct CurrentUserScreenSharingIndicatorView: View
+
+ public var body: some View
+ extension ScreenPropertiesAdapter: InjectionKey
+
+ public nonisolated static var currentValue: ScreenPropertiesAdapter
+ public struct PublisherSubscriptionView: View
+
+ public var body: some View
+
+
+ public init(initial: Value,publisher: AnyPublisher<Value, Never>?,@ViewBuilder contentProvider: @escaping (Value) -> Content)
+ extension Publishers
+
+ public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?)-> AnyPublisher<(A, B), Never>
+ public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?,_ c: AnyPublisher<C, Never>?,)-> AnyPublisher<(A, B, C), Never>
+ public final class ScreenPropertiesAdapter: @unchecked Sendable
+
+ public private var preferredFramesPerSecond: Int
+ public private var refreshRate: TimeInterval
+ public private var scale: CGFloat
- public final class SerialActorQueue: Sendable
-
- public init()
-
-
- public func cancelAll()
- public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
- public func sync(_ block: @Sendable @escaping () async throws -> T)async throws -> T
- public enum ParticipantAction: Sendable
+ public enum ParticipantAction: Equatable, Sendable
- public struct ParticipantEvent: Sendable
+ public struct ParticipantEvent: Equatable, Sendable
public final class DisposableBag: @unchecked Sendable
+ public func completed(_ key: String)
public struct StatelessHangUpIconView: View
- public weak var call: Call?
+ public var size: CGFloat
- public var size: CGFloat
+ public var actionHandler: ActionHandler?
- public var actionHandler: ActionHandler?
+ public var body: some View
- public var body: some View
+
-
+
-
+ @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
- @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
- public struct VideoCallParticipantView: View
+ public struct VideoCallParticipantView: View, Equatable
+
+
+ nonisolated public static func ==(lhs: VideoCallParticipantView<Factory>,rhs: VideoCallParticipantView<Factory>)-> Bool
public struct CallView: View
- public var body: some View
+ case localVideo, screensharing, participantsView
- public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
+ public var body: some View
+
+
+ public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
public class StreamVideo: ObservableObject, @unchecked Sendable
- public var state: State
+ case ringEventReceived
- public let videoConfig: VideoConfig
+
- public var user: User
+
- public var isHardwareAccelerationAvailable: Bool
+ public var state: State
- public lazy var rejectionReasonProvider: RejectionReasonProviding
+ public let videoConfig: VideoConfig
-
+ public var user: User
-
+ public var isHardwareAccelerationAvailable: Bool
- public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
+ public lazy var rejectionReasonProvider: RejectionReasonProviding
- public func connect()async throws
+ public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
- public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
+
- public func makeCallsController(callsQuery: CallsQuery)-> CallsController
+
- @discardableResult public func setDevice(id: String)async throws -> ModelResponse
+ public func connect()async throws
- @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
+ public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
- @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
+ public func makeCallsController(callsQuery: CallsQuery)-> CallsController
- public func listDevices()async throws -> [Device]
+ @discardableResult public func setDevice(id: String)async throws -> ModelResponse
- public func disconnect()async
+ @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
- public func subscribe()-> AsyncStream<VideoEvent>
+ @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
- public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
+ public func listDevices()async throws -> [Device]
- public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+ public func disconnect()async
- public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+ public func eventPublisher()-> AnyPublisher<VideoEvent, Never>
-
+ public func eventPublisher(for event: WSEvent.Type)-> AnyPublisher<WSEvent, Never>
-
+ public func subscribe()-> AsyncStream<VideoEvent>
- public final class State: ObservableObject, @unchecked Sendable
+ public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
-
+ public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
- @Published public internal var connection: ConnectionStatus
+ public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
- @Published public internal var user: User
+
- @Published public internal var activeCall: Call?
+
- @Published public internal var ringingCall: Call?
+ public final class State: ObservableObject, @unchecked Sendable
+
+ @Published public internal var connection: ConnectionStatus
+ @Published public internal var user: User
+ @Published public internal var activeCall: Call?
+ @Published public internal var ringingCall: Call?
extension Task
- public func store(in disposableBag: DisposableBag,key: String = UUID().uuidString)
+ @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async -> Success)
+ @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async throws -> Success)
+
+
+ public func store(in disposableBag: DisposableBag,identifier: String = UUID().uuidString)
- public enum CallingState: Equatable, CustomStringConvertible
+ public enum CallingState: Equatable, CustomStringConvertible, Sendable
extension Publisher
- public func sinkTask(storeIn disposableBag: DisposableBag? = nil,identifier: String? = nil,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+ public func sinkTask(storeIn disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
- public func sinkTask(queue: SerialActorQueue,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+ public func sinkTask(queue: SerialActorQueue,file: StaticString = #file,function: StaticString = #function,line: UInt = #line,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable |
Public Interface+ extension Publishers
+
+ public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?)-> AnyPublisher<(A, B), Never>
+ public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?,_ c: AnyPublisher<C, Never>?,)-> AnyPublisher<(A, B, C), Never>
+ public actor SerialActorQueue
+
+ nonisolated public var unownedExecutor: UnownedSerialExecutor
+
+
+ public init(file: StaticString = #file)
+
+
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping Operation)-> QueueTask
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping @Sendable() async -> Void)-> QueueTask
+ @discardableResult public nonisolated func sync(@_inheritActorContext operation: @escaping @Sendable() async throws -> Output)async throws -> Output
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Void)-> QueueTask
+ @discardableResult public nonisolated func sync(@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Output)async throws -> Output
+ public nonisolated func cancelAll()
+
+
+ public final class QueueTask: @unchecked Sendable
+ public final class ScreenPropertiesAdapter: @unchecked Sendable
+
+ public private var preferredFramesPerSecond: Int
+ public private var refreshRate: TimeInterval
+ public private var scale: CGFloat
+ public struct CurrentUserScreenSharingIndicatorView: View
+
+ public var body: some View
+ public struct PublisherSubscriptionView: View
+
+ public var body: some View
+
+
+ public init(initial: Value,publisher: AnyPublisher<Value, Never>?,@ViewBuilder contentProvider: @escaping (Value) -> Content)
+ extension ScreenPropertiesAdapter: InjectionKey
+
+ public nonisolated static var currentValue: ScreenPropertiesAdapter
+ public protocol TimerProviding
- public final class SerialActorQueue: Sendable
-
- public init()
-
-
- public func cancelAll()
- public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
- public func sync(_ block: @Sendable @escaping () async throws -> T)async throws -> T
- public struct VideoCallParticipantView: View
+ public struct VideoCallParticipantView: View, Equatable
+
+
+ nonisolated public static func ==(lhs: VideoCallParticipantView<Factory>,rhs: VideoCallParticipantView<Factory>)-> Bool
- public enum CallingState: Equatable, CustomStringConvertible
+ public enum CallingState: Equatable, CustomStringConvertible, Sendable
- public struct ParticipantEvent: Sendable
+ public struct ParticipantEvent: Equatable, Sendable
public struct CallView: View
- public var body: some View
+ case localVideo, screensharing, participantsView
- public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
+ public var body: some View
+
+
+ public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
public struct StatelessHangUpIconView: View
- public weak var call: Call?
+ public var size: CGFloat
- public var size: CGFloat
+ public var actionHandler: ActionHandler?
- public var actionHandler: ActionHandler?
+ public var body: some View
- public var body: some View
+
-
+
-
+ @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
- @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
extension Publisher
- public func sinkTask(storeIn disposableBag: DisposableBag? = nil,identifier: String? = nil,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+ public func sinkTask(storeIn disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
- public func sinkTask(queue: SerialActorQueue,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+ public func sinkTask(queue: SerialActorQueue,file: StaticString = #file,function: StaticString = #function,line: UInt = #line,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
public final class DisposableBag: @unchecked Sendable
+ public func completed(_ key: String)
extension Task
- public func store(in disposableBag: DisposableBag,key: String = UUID().uuidString)
+ @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async -> Success)
+ @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async throws -> Success)
+
+
+ public func store(in disposableBag: DisposableBag,identifier: String = UUID().uuidString)
- public enum ParticipantAction: Sendable
+ public enum ParticipantAction: Equatable, Sendable
public class StreamVideo: ObservableObject, @unchecked Sendable
- public var state: State
+ case ringEventReceived
- public let videoConfig: VideoConfig
+
- public var user: User
+
- public var isHardwareAccelerationAvailable: Bool
+ public var state: State
- public lazy var rejectionReasonProvider: RejectionReasonProviding
+ public let videoConfig: VideoConfig
-
+ public var user: User
-
+ public var isHardwareAccelerationAvailable: Bool
- public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
+ public lazy var rejectionReasonProvider: RejectionReasonProviding
- public func connect()async throws
+ public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
- public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
+
- public func makeCallsController(callsQuery: CallsQuery)-> CallsController
+
- @discardableResult public func setDevice(id: String)async throws -> ModelResponse
+ public func connect()async throws
- @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
+ public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
- @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
+ public func makeCallsController(callsQuery: CallsQuery)-> CallsController
- public func listDevices()async throws -> [Device]
+ @discardableResult public func setDevice(id: String)async throws -> ModelResponse
- public func disconnect()async
+ @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
- public func subscribe()-> AsyncStream<VideoEvent>
+ @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
- public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
+ public func listDevices()async throws -> [Device]
- public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+ public func disconnect()async
- public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+ public func eventPublisher()-> AnyPublisher<VideoEvent, Never>
-
+ public func eventPublisher(for event: WSEvent.Type)-> AnyPublisher<WSEvent, Never>
-
+ public func subscribe()-> AsyncStream<VideoEvent>
- public final class State: ObservableObject, @unchecked Sendable
+ public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
-
+ public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
- @Published public internal var connection: ConnectionStatus
+ public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
- @Published public internal var user: User
+
- @Published public internal var activeCall: Call?
+
- @Published public internal var ringingCall: Call?
+ public final class State: ObservableObject, @unchecked Sendable
+
+ @Published public internal var connection: ConnectionStatus
+ @Published public internal var user: User
+ @Published public internal var activeCall: Call?
+ @Published public internal var ringingCall: Call? |
Public Interface+ public actor SerialActorQueue
+
+ nonisolated public var unownedExecutor: UnownedSerialExecutor
+
+
+ public init(file: StaticString = #file)
+
+
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping Operation)-> QueueTask
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping @Sendable() async -> Void)-> QueueTask
+ @discardableResult public nonisolated func sync(@_inheritActorContext operation: @escaping @Sendable() async throws -> Output)async throws -> Output
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Void)-> QueueTask
+ @discardableResult public nonisolated func sync(@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Output)async throws -> Output
+ public nonisolated func cancelAll()
+
+
+ public final class QueueTask: @unchecked Sendable
+ extension Publishers
+
+ public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?)-> AnyPublisher<(A, B), Never>
+ public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?,_ c: AnyPublisher<C, Never>?,)-> AnyPublisher<(A, B, C), Never>
+ extension ScreenPropertiesAdapter: InjectionKey
+
+ public nonisolated static var currentValue: ScreenPropertiesAdapter
+ public struct CurrentUserScreenSharingIndicatorView: View
+
+ public var body: some View
+ public final class ScreenPropertiesAdapter: @unchecked Sendable
+
+ public private var preferredFramesPerSecond: Int
+ public private var refreshRate: TimeInterval
+ public private var scale: CGFloat
+ public protocol TimerProviding
+ public struct PublisherSubscriptionView: View
+
+ public var body: some View
+
+
+ public init(initial: Value,publisher: AnyPublisher<Value, Never>?,@ViewBuilder contentProvider: @escaping (Value) -> Content)
- public final class SerialActorQueue: Sendable
-
- public init()
-
-
- public func cancelAll()
- public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
- public func sync(_ block: @Sendable @escaping () async throws -> T)async throws -> T
- public struct VideoCallParticipantView: View
+ public struct VideoCallParticipantView: View, Equatable
+
+
+ nonisolated public static func ==(lhs: VideoCallParticipantView<Factory>,rhs: VideoCallParticipantView<Factory>)-> Bool
public final class DisposableBag: @unchecked Sendable
+ public func completed(_ key: String)
public struct StatelessHangUpIconView: View
- public weak var call: Call?
+ public var size: CGFloat
- public var size: CGFloat
+ public var actionHandler: ActionHandler?
- public var actionHandler: ActionHandler?
+ public var body: some View
- public var body: some View
+
-
+
-
+ @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
- @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
extension Publisher
- public func sinkTask(storeIn disposableBag: DisposableBag? = nil,identifier: String? = nil,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+ public func sinkTask(storeIn disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
- public func sinkTask(queue: SerialActorQueue,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+ public func sinkTask(queue: SerialActorQueue,file: StaticString = #file,function: StaticString = #function,line: UInt = #line,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
public class StreamVideo: ObservableObject, @unchecked Sendable
- public var state: State
+ case ringEventReceived
- public let videoConfig: VideoConfig
+
- public var user: User
+
- public var isHardwareAccelerationAvailable: Bool
+ public var state: State
- public lazy var rejectionReasonProvider: RejectionReasonProviding
+ public let videoConfig: VideoConfig
-
+ public var user: User
-
+ public var isHardwareAccelerationAvailable: Bool
- public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
+ public lazy var rejectionReasonProvider: RejectionReasonProviding
- public func connect()async throws
+ public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
- public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
+
- public func makeCallsController(callsQuery: CallsQuery)-> CallsController
+
- @discardableResult public func setDevice(id: String)async throws -> ModelResponse
+ public func connect()async throws
- @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
+ public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
- @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
+ public func makeCallsController(callsQuery: CallsQuery)-> CallsController
- public func listDevices()async throws -> [Device]
+ @discardableResult public func setDevice(id: String)async throws -> ModelResponse
- public func disconnect()async
+ @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
- public func subscribe()-> AsyncStream<VideoEvent>
+ @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
- public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
+ public func listDevices()async throws -> [Device]
- public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+ public func disconnect()async
- public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+ public func eventPublisher()-> AnyPublisher<VideoEvent, Never>
-
+ public func eventPublisher(for event: WSEvent.Type)-> AnyPublisher<WSEvent, Never>
-
+ public func subscribe()-> AsyncStream<VideoEvent>
- public final class State: ObservableObject, @unchecked Sendable
+ public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
-
+ public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
- @Published public internal var connection: ConnectionStatus
+ public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
- @Published public internal var user: User
+
- @Published public internal var activeCall: Call?
+
- @Published public internal var ringingCall: Call?
+ public final class State: ObservableObject, @unchecked Sendable
+
+ @Published public internal var connection: ConnectionStatus
+ @Published public internal var user: User
+ @Published public internal var activeCall: Call?
+ @Published public internal var ringingCall: Call?
public struct CallView: View
- public var body: some View
+ case localVideo, screensharing, participantsView
- public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
+ public var body: some View
+
+
+ public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
- public enum CallingState: Equatable, CustomStringConvertible
+ public enum CallingState: Equatable, CustomStringConvertible, Sendable
- public enum ParticipantAction: Sendable
+ public enum ParticipantAction: Equatable, Sendable
extension Task
- public func store(in disposableBag: DisposableBag,key: String = UUID().uuidString)
+ @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async -> Success)
+ @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async throws -> Success)
+
+
+ public func store(in disposableBag: DisposableBag,identifier: String = UUID().uuidString)
- public struct ParticipantEvent: Sendable
+ public struct ParticipantEvent: Equatable, Sendable |
Public Interface+ public actor SerialActorQueue
+
+ nonisolated public var unownedExecutor: UnownedSerialExecutor
+
+
+ public init(file: StaticString = #file)
+
+
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping Operation)-> QueueTask
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping @Sendable() async -> Void)-> QueueTask
+ @discardableResult public nonisolated func sync(@_inheritActorContext operation: @escaping @Sendable() async throws -> Output)async throws -> Output
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Void)-> QueueTask
+ @discardableResult public nonisolated func sync(@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Output)async throws -> Output
+ public nonisolated func cancelAll()
+
+
+ public final class QueueTask: @unchecked Sendable
+ extension ScreenPropertiesAdapter: InjectionKey
+
+ public nonisolated static var currentValue: ScreenPropertiesAdapter
+ public struct PublisherSubscriptionView: View
+
+ public var body: some View
+
+
+ public init(initial: Value,publisher: AnyPublisher<Value, Never>?,@ViewBuilder contentProvider: @escaping (Value) -> Content)
+ public final class ScreenPropertiesAdapter: @unchecked Sendable
+
+ public private var preferredFramesPerSecond: Int
+ public private var refreshRate: TimeInterval
+ public private var scale: CGFloat
+ public struct CurrentUserScreenSharingIndicatorView: View
+
+ public var body: some View
+ public protocol TimerProviding
+ extension Publishers
+
+ public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?)-> AnyPublisher<(A, B), Never>
+ public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?,_ c: AnyPublisher<C, Never>?)-> AnyPublisher<(A, B, C), Never>
- public final class SerialActorQueue: Sendable
-
- public init()
-
-
- public func cancelAll()
- public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
- public func sync(_ block: @Sendable @escaping () async throws -> T)async throws -> T
extension Task
- public func store(in disposableBag: DisposableBag,key: String = UUID().uuidString)
+ @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async -> Success)
+ @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async throws -> Success)
+
+
+ public func store(in disposableBag: DisposableBag,identifier: String = UUID().uuidString)
extension Publisher
- public func sinkTask(storeIn disposableBag: DisposableBag? = nil,identifier: String? = nil,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+ public func sinkTask(storeIn disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
- public func sinkTask(queue: SerialActorQueue,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+ public func sinkTask(queue: SerialActorQueue,file: StaticString = #file,function: StaticString = #function,line: UInt = #line,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
public struct StatelessHangUpIconView: View
- public weak var call: Call?
+ public var size: CGFloat
- public var size: CGFloat
+ public var actionHandler: ActionHandler?
- public var actionHandler: ActionHandler?
+ public var body: some View
- public var body: some View
+
-
+
-
+ @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
- @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
- public struct VideoCallParticipantView: View
+ public struct VideoCallParticipantView: View, Equatable
+
+
+ nonisolated public static func ==(lhs: VideoCallParticipantView<Factory>,rhs: VideoCallParticipantView<Factory>)-> Bool
public final class DisposableBag: @unchecked Sendable
+ public func completed(_ key: String)
- public enum CallingState: Equatable, CustomStringConvertible
+ public enum CallingState: Equatable, CustomStringConvertible, Sendable
public class StreamVideo: ObservableObject, @unchecked Sendable
- public var state: State
+ case ringEventReceived
- public let videoConfig: VideoConfig
+
- public var user: User
+
- public var isHardwareAccelerationAvailable: Bool
+ public var state: State
- public lazy var rejectionReasonProvider: RejectionReasonProviding
+ public let videoConfig: VideoConfig
-
+ public var user: User
-
+ public var isHardwareAccelerationAvailable: Bool
- public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
+ public lazy var rejectionReasonProvider: RejectionReasonProviding
- public func connect()async throws
+ public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
- public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
+
- public func makeCallsController(callsQuery: CallsQuery)-> CallsController
+
- @discardableResult public func setDevice(id: String)async throws -> ModelResponse
+ public func connect()async throws
- @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
+ public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
- @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
+ public func makeCallsController(callsQuery: CallsQuery)-> CallsController
- public func listDevices()async throws -> [Device]
+ @discardableResult public func setDevice(id: String)async throws -> ModelResponse
- public func disconnect()async
+ @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
- public func subscribe()-> AsyncStream<VideoEvent>
+ @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
- public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
+ public func listDevices()async throws -> [Device]
- public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+ public func disconnect()async
- public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+ public func eventPublisher()-> AnyPublisher<VideoEvent, Never>
-
+ public func eventPublisher(for event: WSEvent.Type)-> AnyPublisher<WSEvent, Never>
-
+ public func subscribe()-> AsyncStream<VideoEvent>
- public final class State: ObservableObject, @unchecked Sendable
+ public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
-
+ public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
- @Published public internal var connection: ConnectionStatus
+ public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
- @Published public internal var user: User
+
- @Published public internal var activeCall: Call?
+
- @Published public internal var ringingCall: Call?
+ public final class State: ObservableObject, @unchecked Sendable
+
+ @Published public internal var connection: ConnectionStatus
+ @Published public internal var user: User
+ @Published public internal var activeCall: Call?
+ @Published public internal var ringingCall: Call?
- public struct ParticipantEvent: Sendable
+ public struct ParticipantEvent: Equatable, Sendable
- public enum ParticipantAction: Sendable
+ public enum ParticipantAction: Equatable, Sendable
public struct CallView: View
- public var body: some View
+ case localVideo, screensharing, participantsView
- public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
+ public var body: some View
+
+
+ public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel) |
Public Interface+ extension ScreenPropertiesAdapter: InjectionKey
+
+ public nonisolated static var currentValue: ScreenPropertiesAdapter
+ public protocol TimerProviding
+ public final class ScreenPropertiesAdapter: @unchecked Sendable
+
+ public private var preferredFramesPerSecond: Int
+ public private var refreshRate: TimeInterval
+ public private var scale: CGFloat
+ extension Publishers
+
+ public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?)-> AnyPublisher<(A, B), Never>
+ public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?,_ c: AnyPublisher<C, Never>?)-> AnyPublisher<(A, B, C), Never>
+ public struct PublisherSubscriptionView: View
+
+ public var body: some View
+
+
+ public init(initial: Value,publisher: AnyPublisher<Value, Never>?,@ViewBuilder contentProvider: @escaping (Value) -> Content)
+ public actor SerialActorQueue
+
+ nonisolated public var unownedExecutor: UnownedSerialExecutor
+
+
+ public init(file: StaticString = #file)
+
+
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping Operation)-> QueueTask
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping @Sendable() async -> Void)-> QueueTask
+ @discardableResult public nonisolated func sync(@_inheritActorContext operation: @escaping @Sendable() async throws -> Output)async throws -> Output
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Void)-> QueueTask
+ @discardableResult public nonisolated func sync(@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Output)async throws -> Output
+ public nonisolated func cancelAll()
+
+
+ public final class QueueTask: @unchecked Sendable
+ public struct CurrentUserScreenSharingIndicatorView: View
+
+ public var body: some View
- public final class SerialActorQueue: Sendable
-
- public init()
-
-
- public func cancelAll()
- public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
- public func sync(_ block: @Sendable @escaping () async throws -> T)async throws -> T
public struct StatelessHangUpIconView: View
- public weak var call: Call?
+ public var size: CGFloat
- public var size: CGFloat
+ public var actionHandler: ActionHandler?
- public var actionHandler: ActionHandler?
+ public var body: some View
- public var body: some View
+
-
+
-
+ @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
- @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
- public struct ParticipantInfoView: View
+ public struct ParticipantInfoView: View, Equatable
+
+
+ public nonisolated static func ==(lhs: ParticipantInfoView,rhs: ParticipantInfoView)-> Bool
public class StreamVideo: ObservableObject, @unchecked Sendable
- public var state: State
+ case ringEventReceived
- public let videoConfig: VideoConfig
+
- public var user: User
+
- public var isHardwareAccelerationAvailable: Bool
+ public var state: State
- public lazy var rejectionReasonProvider: RejectionReasonProviding
+ public let videoConfig: VideoConfig
-
+ public var user: User
-
+ public var isHardwareAccelerationAvailable: Bool
- public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
+ public lazy var rejectionReasonProvider: RejectionReasonProviding
- public func connect()async throws
+ public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
- public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
+
- public func makeCallsController(callsQuery: CallsQuery)-> CallsController
+
- @discardableResult public func setDevice(id: String)async throws -> ModelResponse
+ public func connect()async throws
- @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
+ public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
- @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
+ public func makeCallsController(callsQuery: CallsQuery)-> CallsController
- public func listDevices()async throws -> [Device]
+ @discardableResult public func setDevice(id: String)async throws -> ModelResponse
- public func disconnect()async
+ @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
- public func subscribe()-> AsyncStream<VideoEvent>
+ @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
- public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
+ public func listDevices()async throws -> [Device]
- public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+ public func disconnect()async
- public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+ public func eventPublisher()-> AnyPublisher<VideoEvent, Never>
-
+ public func eventPublisher(for event: WSEvent.Type)-> AnyPublisher<WSEvent, Never>
-
+ public func subscribe()-> AsyncStream<VideoEvent>
- public final class State: ObservableObject, @unchecked Sendable
+ public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
-
+ public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
- @Published public internal var connection: ConnectionStatus
+ public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
- @Published public internal var user: User
+
- @Published public internal var activeCall: Call?
+
- @Published public internal var ringingCall: Call?
+ public final class State: ObservableObject, @unchecked Sendable
+
+ @Published public internal var connection: ConnectionStatus
+ @Published public internal var user: User
+ @Published public internal var activeCall: Call?
+ @Published public internal var ringingCall: Call?
public struct CallView: View
- public var body: some View
+ case localVideo, screensharing, participantsView
- public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
+ public var body: some View
+
+
+ public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
public struct BottomView: View
- public init(content: @escaping () -> Content)
+ public init(@ViewBuilder content: @escaping () -> Content)
- public struct ParticipantEvent: Sendable
+ public struct ParticipantEvent: Equatable, Sendable
- public struct VideoCallParticipantView: View
+ public struct VideoCallParticipantView: View, Equatable
+
+
+ nonisolated public static func ==(lhs: VideoCallParticipantView<Factory>,rhs: VideoCallParticipantView<Factory>)-> Bool
public final class DisposableBag: @unchecked Sendable
+ public func completed(_ key: String)
extension Publisher
- public func sinkTask(storeIn disposableBag: DisposableBag? = nil,identifier: String? = nil,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+ public func sinkTask(storeIn disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
- public func sinkTask(queue: SerialActorQueue,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+ public func sinkTask(queue: SerialActorQueue,file: StaticString = #file,function: StaticString = #function,line: UInt = #line,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
- public enum CallingState: Equatable, CustomStringConvertible
+ public enum CallingState: Equatable, CustomStringConvertible, Sendable
extension Task
- public func store(in disposableBag: DisposableBag,key: String = UUID().uuidString)
+ @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async -> Success)
+ @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async throws -> Success)
+
+
+ public func store(in disposableBag: DisposableBag,identifier: String = UUID().uuidString)
- public enum ParticipantAction: Sendable
+ public enum ParticipantAction: Equatable, Sendable |
Public Interface+ public protocol TimerProviding
+ public actor SerialActorQueue
+
+ nonisolated public var unownedExecutor: UnownedSerialExecutor
+
+
+ public init(file: StaticString = #file)
+
+
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping Operation)-> QueueTask
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping @Sendable() async -> Void)-> QueueTask
+ @discardableResult public nonisolated func sync(@_inheritActorContext operation: @escaping @Sendable() async throws -> Output)async throws -> Output
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Void)-> QueueTask
+ @discardableResult public nonisolated func sync(@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Output)async throws -> Output
+ public nonisolated func cancelAll()
+
+
+ public final class QueueTask: @unchecked Sendable
+ extension Publishers
+
+ public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?)-> AnyPublisher<(A, B), Never>
+ public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?,_ c: AnyPublisher<C, Never>?)-> AnyPublisher<(A, B, C), Never>
+ public final class ScreenPropertiesAdapter: @unchecked Sendable
+
+ public private var preferredFramesPerSecond: Int
+ public private var refreshRate: TimeInterval
+ public private var scale: CGFloat
+ public struct PublisherSubscriptionView: View
+
+ public var body: some View
+
+
+ public init(initial: Value,publisher: AnyPublisher<Value, Never>?,@ViewBuilder contentProvider: @escaping (Value) -> Content)
+ extension ScreenPropertiesAdapter: InjectionKey
+
+ public nonisolated static var currentValue: ScreenPropertiesAdapter
+ public struct CurrentUserScreenSharingIndicatorView: View
+
+ public var body: some View
- public final class SerialActorQueue: Sendable
-
- public init()
-
-
- public func cancelAll()
- public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
- public func sync(_ block: @Sendable @escaping () async throws -> T)async throws -> T
- public struct VideoCallParticipantView: View
+ public struct VideoCallParticipantView: View, Equatable
+
+
+ nonisolated public static func ==(lhs: VideoCallParticipantView<Factory>,rhs: VideoCallParticipantView<Factory>)-> Bool
public final class DisposableBag: @unchecked Sendable
+ public func completed(_ key: String)
- public struct ParticipantInfoView: View
+ public struct ParticipantInfoView: View, Equatable
+
+
+ public nonisolated static func ==(lhs: ParticipantInfoView,rhs: ParticipantInfoView)-> Bool
- public struct ParticipantEvent: Sendable
+ public struct ParticipantEvent: Equatable, Sendable
public struct BottomView: View
- public init(content: @escaping () -> Content)
+ public init(@ViewBuilder content: @escaping () -> Content)
public struct StatelessHangUpIconView: View
- public weak var call: Call?
+ public var size: CGFloat
- public var size: CGFloat
+ public var actionHandler: ActionHandler?
- public var actionHandler: ActionHandler?
+ public var body: some View
- public var body: some View
+
-
+
-
+ @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
- @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
- public enum CallingState: Equatable, CustomStringConvertible
+ public enum CallingState: Equatable, CustomStringConvertible, Sendable
extension Task
- public func store(in disposableBag: DisposableBag,key: String = UUID().uuidString)
+ @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async -> Success)
+ @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async throws -> Success)
+
+
+ public func store(in disposableBag: DisposableBag,identifier: String = UUID().uuidString)
- public enum ParticipantAction: Sendable
+ public enum ParticipantAction: Equatable, Sendable
extension Publisher
- public func sinkTask(storeIn disposableBag: DisposableBag? = nil,identifier: String? = nil,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+ public func sinkTask(storeIn disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
- public func sinkTask(queue: SerialActorQueue,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+ public func sinkTask(queue: SerialActorQueue,file: StaticString = #file,function: StaticString = #function,line: UInt = #line,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
public class StreamVideo: ObservableObject, @unchecked Sendable
- public var state: State
+ case ringEventReceived
- public let videoConfig: VideoConfig
+
- public var user: User
+
- public var isHardwareAccelerationAvailable: Bool
+ public var state: State
- public lazy var rejectionReasonProvider: RejectionReasonProviding
+ public let videoConfig: VideoConfig
-
+ public var user: User
-
+ public var isHardwareAccelerationAvailable: Bool
- public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
+ public lazy var rejectionReasonProvider: RejectionReasonProviding
- public func connect()async throws
+ public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
- public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
+
- public func makeCallsController(callsQuery: CallsQuery)-> CallsController
+
- @discardableResult public func setDevice(id: String)async throws -> ModelResponse
+ public func connect()async throws
- @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
+ public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
- @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
+ public func makeCallsController(callsQuery: CallsQuery)-> CallsController
- public func listDevices()async throws -> [Device]
+ @discardableResult public func setDevice(id: String)async throws -> ModelResponse
- public func disconnect()async
+ @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
- public func subscribe()-> AsyncStream<VideoEvent>
+ @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
- public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
+ public func listDevices()async throws -> [Device]
- public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+ public func disconnect()async
- public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+ public func eventPublisher()-> AnyPublisher<VideoEvent, Never>
-
+ public func eventPublisher(for event: WSEvent.Type)-> AnyPublisher<WSEvent, Never>
-
+ public func subscribe()-> AsyncStream<VideoEvent>
- public final class State: ObservableObject, @unchecked Sendable
+ public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
-
+ public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
- @Published public internal var connection: ConnectionStatus
+ public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
- @Published public internal var user: User
+
- @Published public internal var activeCall: Call?
+
- @Published public internal var ringingCall: Call?
+ public final class State: ObservableObject, @unchecked Sendable
+
+ @Published public internal var connection: ConnectionStatus
+ @Published public internal var user: User
+ @Published public internal var activeCall: Call?
+ @Published public internal var ringingCall: Call?
public struct CallView: View
- public var body: some View
+ case localVideo, screensharing, participantsView
- public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
+ public var body: some View
+
+
+ public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel) |
Public Interface+ public final class ScreenPropertiesAdapter: @unchecked Sendable
+
+ public private var preferredFramesPerSecond: Int
+ public private var refreshRate: TimeInterval
+ public private var scale: CGFloat
+ public struct PublisherSubscriptionView: View
+
+ public var body: some View
+
+
+ public init(initial: Value,publisher: AnyPublisher<Value, Never>?,@ViewBuilder contentProvider: @escaping (Value) -> Content)
+ extension Publishers
+
+ public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?)-> AnyPublisher<(A, B), Never>
+ public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?,_ c: AnyPublisher<C, Never>?)-> AnyPublisher<(A, B, C), Never>
+ public actor SerialActorQueue
+
+ nonisolated public var unownedExecutor: UnownedSerialExecutor
+
+
+ public init(file: StaticString = #file)
+
+
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping Operation)-> QueueTask
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping @Sendable() async -> Void)-> QueueTask
+ @discardableResult public nonisolated func sync(@_inheritActorContext operation: @escaping @Sendable() async throws -> Output)async throws -> Output
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Void)-> QueueTask
+ @discardableResult public nonisolated func sync(@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Output)async throws -> Output
+ public nonisolated func cancelAll()
+
+
+ public final class QueueTask: @unchecked Sendable
+ public struct CurrentUserScreenSharingIndicatorView: View
+
+ public var body: some View
+ extension ScreenPropertiesAdapter: InjectionKey
+
+ public nonisolated static var currentValue: ScreenPropertiesAdapter
+ public protocol TimerProviding
- public final class SerialActorQueue: Sendable
-
- public init()
-
-
- public func cancelAll()
- public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
- public func sync(_ block: @Sendable @escaping () async throws -> T)async throws -> T
- public struct ParticipantInfoView: View
+ public struct ParticipantInfoView: View, Equatable
+
+
+ public nonisolated static func ==(lhs: ParticipantInfoView,rhs: ParticipantInfoView)-> Bool
- public enum CallingState: Equatable, CustomStringConvertible
+ public enum CallingState: Equatable, CustomStringConvertible, Sendable
- public enum ParticipantAction: Sendable
+ public enum ParticipantAction: Equatable, Sendable
public struct StatelessHangUpIconView: View
- public weak var call: Call?
+ public var size: CGFloat
- public var size: CGFloat
+ public var actionHandler: ActionHandler?
- public var actionHandler: ActionHandler?
+ public var body: some View
- public var body: some View
+
-
+
-
+ @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
- @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
public final class DisposableBag: @unchecked Sendable
+ public func completed(_ key: String)
public struct CallView: View
- public var body: some View
+ case localVideo, screensharing, participantsView
- public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
+ public var body: some View
+
+
+ public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
- public struct VideoCallParticipantView: View
+ public struct VideoCallParticipantView: View, Equatable
+
+
+ nonisolated public static func ==(lhs: VideoCallParticipantView<Factory>,rhs: VideoCallParticipantView<Factory>)-> Bool
public class StreamVideo: ObservableObject, @unchecked Sendable
- public var state: State
+ case ringEventReceived
- public let videoConfig: VideoConfig
+
- public var user: User
+
- public var isHardwareAccelerationAvailable: Bool
+ public var state: State
- public lazy var rejectionReasonProvider: RejectionReasonProviding
+ public let videoConfig: VideoConfig
-
+ public var user: User
-
+ public var isHardwareAccelerationAvailable: Bool
- public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
+ public lazy var rejectionReasonProvider: RejectionReasonProviding
- public func connect()async throws
+ public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
- public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
+
- public func makeCallsController(callsQuery: CallsQuery)-> CallsController
+
- @discardableResult public func setDevice(id: String)async throws -> ModelResponse
+ public func connect()async throws
- @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
+ public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
- @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
+ public func makeCallsController(callsQuery: CallsQuery)-> CallsController
- public func listDevices()async throws -> [Device]
+ @discardableResult public func setDevice(id: String)async throws -> ModelResponse
- public func disconnect()async
+ @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
- public func subscribe()-> AsyncStream<VideoEvent>
+ @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
- public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
+ public func listDevices()async throws -> [Device]
- public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+ public func disconnect()async
- public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+ public func eventPublisher()-> AnyPublisher<VideoEvent, Never>
-
+ public func eventPublisher(for event: WSEvent.Type)-> AnyPublisher<WSEvent, Never>
-
+ public func subscribe()-> AsyncStream<VideoEvent>
- public final class State: ObservableObject, @unchecked Sendable
+ public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
-
+ public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
- @Published public internal var connection: ConnectionStatus
+ public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
- @Published public internal var user: User
+
- @Published public internal var activeCall: Call?
+
- @Published public internal var ringingCall: Call?
+ public final class State: ObservableObject, @unchecked Sendable
+
+ @Published public internal var connection: ConnectionStatus
+ @Published public internal var user: User
+ @Published public internal var activeCall: Call?
+ @Published public internal var ringingCall: Call?
extension Task
- public func store(in disposableBag: DisposableBag,key: String = UUID().uuidString)
+ @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async -> Success)
+ @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async throws -> Success)
+
+
+ public func store(in disposableBag: DisposableBag,identifier: String = UUID().uuidString)
- public struct ParticipantEvent: Sendable
+ public struct ParticipantEvent: Equatable, Sendable
extension Publisher
- public func sinkTask(storeIn disposableBag: DisposableBag? = nil,identifier: String? = nil,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+ public func sinkTask(storeIn disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
- public func sinkTask(queue: SerialActorQueue,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+ public func sinkTask(queue: SerialActorQueue,file: StaticString = #file,function: StaticString = #function,line: UInt = #line,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
public struct BottomView: View
- public init(content: @escaping () -> Content)
+ public init(@ViewBuilder content: @escaping () -> Content) |
Public Interface+ public protocol TimerProviding
+ public actor SerialActorQueue
+
+ nonisolated public var unownedExecutor: UnownedSerialExecutor
+
+
+ public init(file: StaticString = #file)
+
+
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping Operation)-> QueueTask
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: @escaping @Sendable() async -> Void)-> QueueTask
+ @discardableResult public nonisolated func sync(@_inheritActorContext operation: @escaping @Sendable() async throws -> Output)async throws -> Output
+ @discardableResult public nonisolated func async(file: StaticString = #file,function: StaticString = #function,line: UInt = #line,@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Void)-> QueueTask
+ @discardableResult public nonisolated func sync(@_inheritActorContext operation: sending @escaping @Sendable @isolated(any) () async throws (Failure) -> Output)async throws -> Output
+ public nonisolated func cancelAll()
+
+
+ public final class QueueTask: @unchecked Sendable
+ public struct CurrentUserScreenSharingIndicatorView: View
+
+ public var body: some View
+ extension Publishers
+
+ public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?)-> AnyPublisher<(A, B), Never>
+ public static func combineLatest(_ a: AnyPublisher<A, Never>?,_ b: AnyPublisher<B, Never>?,_ c: AnyPublisher<C, Never>?)-> AnyPublisher<(A, B, C), Never>
+ public struct PublisherSubscriptionView: View
+
+ public var body: some View
+
+
+ public init(initial: Value,publisher: AnyPublisher<Value, Never>?,@ViewBuilder contentProvider: @escaping (Value) -> Content)
+ public final class ScreenPropertiesAdapter: @unchecked Sendable
+
+ public private var preferredFramesPerSecond: Int
+ public private var refreshRate: TimeInterval
+ public private var scale: CGFloat
+ extension ScreenPropertiesAdapter: InjectionKey
+
+ public nonisolated static var currentValue: ScreenPropertiesAdapter
- public final class SerialActorQueue: Sendable
-
- public init()
-
-
- public func cancelAll()
- public func async(file: StaticString = #file,functionName: StaticString = #function,line: UInt = #line,_ block: @Sendable @escaping () async throws -> Void)
- public func sync(_ block: @Sendable @escaping () async throws -> T)async throws -> T
public struct StatelessHangUpIconView: View
- public weak var call: Call?
+ public var size: CGFloat
- public var size: CGFloat
+ public var actionHandler: ActionHandler?
- public var actionHandler: ActionHandler?
+ public var body: some View
- public var body: some View
+
-
+
-
+ @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
- @MainActor public init(call: Call?,size: CGFloat = 44,actionHandler: ActionHandler? = nil)
extension Publisher
- public func sinkTask(storeIn disposableBag: DisposableBag? = nil,identifier: String? = nil,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+ public func sinkTask(storeIn disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
- public func sinkTask(queue: SerialActorQueue,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
+ public func sinkTask(queue: SerialActorQueue,file: StaticString = #file,function: StaticString = #function,line: UInt = #line,receiveCompletion: @escaping (@Sendable(Subscribers.Completion<Failure>) -> Void) = { _ in },receiveValue: @escaping (@Sendable(Output) async throws -> Void))-> AnyCancellable
- public struct ParticipantInfoView: View
+ public struct ParticipantInfoView: View, Equatable
+
+
+ public nonisolated static func ==(lhs: ParticipantInfoView,rhs: ParticipantInfoView)-> Bool
- public enum CallingState: Equatable, CustomStringConvertible
+ public enum CallingState: Equatable, CustomStringConvertible, Sendable
public class StreamVideo: ObservableObject, @unchecked Sendable
- public var state: State
+ case ringEventReceived
- public let videoConfig: VideoConfig
+
- public var user: User
+
- public var isHardwareAccelerationAvailable: Bool
+ public var state: State
- public lazy var rejectionReasonProvider: RejectionReasonProviding
+ public let videoConfig: VideoConfig
-
+ public var user: User
-
+ public var isHardwareAccelerationAvailable: Bool
- public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
+ public lazy var rejectionReasonProvider: RejectionReasonProviding
- public func connect()async throws
+ public convenience init(apiKey: String,user: User,token: UserToken,videoConfig: VideoConfig = VideoConfig(),pushNotificationsConfig: PushNotificationsConfig = .default,tokenProvider: UserTokenProvider? = nil)
- public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
+
- public func makeCallsController(callsQuery: CallsQuery)-> CallsController
+
- @discardableResult public func setDevice(id: String)async throws -> ModelResponse
+ public func connect()async throws
- @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
+ public func call(callType: String,callId: String,callSettings: CallSettings? = nil)-> Call
- @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
+ public func makeCallsController(callsQuery: CallsQuery)-> CallsController
- public func listDevices()async throws -> [Device]
+ @discardableResult public func setDevice(id: String)async throws -> ModelResponse
- public func disconnect()async
+ @discardableResult public func setVoipDevice(id: String)async throws -> ModelResponse
- public func subscribe()-> AsyncStream<VideoEvent>
+ @discardableResult public func deleteDevice(id: String)async throws -> ModelResponse
- public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
+ public func listDevices()async throws -> [Device]
- public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+ public func disconnect()async
- public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
+ public func eventPublisher()-> AnyPublisher<VideoEvent, Never>
-
+ public func eventPublisher(for event: WSEvent.Type)-> AnyPublisher<WSEvent, Never>
-
+ public func subscribe()-> AsyncStream<VideoEvent>
- public final class State: ObservableObject, @unchecked Sendable
+ public func subscribe(for event: WSEvent.Type)-> AsyncStream<WSEvent>
-
+ public func queryCalls(next: String? = nil,watch: Bool = false)async throws -> (calls: [Call], next: String?)
- @Published public internal var connection: ConnectionStatus
+ public func queryCalls(filters: [String: RawJSON]?,sort: [SortParamRequest] = [SortParamRequest.descending("created_at")],limit: Int? = 25,watch: Bool = false)async throws -> (calls: [Call], next: String?)
- @Published public internal var user: User
+
- @Published public internal var activeCall: Call?
+
- @Published public internal var ringingCall: Call?
+ public final class State: ObservableObject, @unchecked Sendable
+
+ @Published public internal var connection: ConnectionStatus
+ @Published public internal var user: User
+ @Published public internal var activeCall: Call?
+ @Published public internal var ringingCall: Call?
- public struct ParticipantEvent: Sendable
+ public struct ParticipantEvent: Equatable, Sendable
extension Task
- public func store(in disposableBag: DisposableBag,key: String = UUID().uuidString)
+ @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async -> Success)
+ @discardableResult public init(disposableBag: DisposableBag,identifier: String = UUIDProviderKey.currentValue.get().uuidString,priority: TaskPriority? = .background,@_inheritActorContext block: @Sendable @escaping () async throws -> Success)
+
+
+ public func store(in disposableBag: DisposableBag,identifier: String = UUID().uuidString)
public final class DisposableBag: @unchecked Sendable
+ public func completed(_ key: String)
- public struct VideoCallParticipantView: View
+ public struct VideoCallParticipantView: View, Equatable
+
+
+ nonisolated public static func ==(lhs: VideoCallParticipantView<Factory>,rhs: VideoCallParticipantView<Factory>)-> Bool
public struct CallView: View
- public var body: some View
+ case localVideo, screensharing, participantsView
- public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
+ public var body: some View
+
+
+ public init(viewFactory: Factory = DefaultViewFactory.shared,viewModel: CallViewModel)
- public enum ParticipantAction: Sendable
+ public enum ParticipantAction: Equatable, Sendable
public struct BottomView: View
- public init(content: @escaping () -> Content)
+ public init(@ViewBuilder content: @escaping () -> Content) |
|
🎯 Goal
Describe why we are making this change.
📝 Summary
Provide bullet points with the most important changes in the codebase.
🛠 Implementation
Provide a detailed description of the implementation and explain your decisions if you find them relevant.
🎨 Showcase
Add relevant screenshots and/or videos/gifs to easily see what this PR changes, if applicable.
img
img
🧪 Manual Testing Notes
Explain how this change can be tested manually, if applicable.
☑️ Contributor Checklist
🎁 Meme
Provide a funny gif or image that relates to your work on this pull request. (Optional)