Files
pipecat/examples/p2p-webrtc/video-transform/client/ios/SimpleChatbot/views/MeetingView.swift
2025-04-04 16:40:52 -03:00

82 lines
2.8 KiB
Swift

import SwiftUI
import PipecatClientIOSSmallWebrtc
struct MeetingView: View {
@State private var showingSettings = false
@EnvironmentObject private var model: CallContainerModel
var body: some View {
VStack {
ZStack {
SmallWebRTCVideoViewSwiftUI(videoTrack: self.model.botCamId, videoScaleMode: .fill)
.edgesIgnoringSafeArea(.all)
VStack {
ChatView()
.frame(maxHeight: .infinity)
HStack {
MicrophoneView(audioLevel: 0, isMuted: !self.model.isMicEnabled)
.frame(width: 100, height: 100)
.onTapGesture {
self.model.toggleMicInput()
}
CameraButtonView(trackId: self.model.localCamId, isMuted: !self.model.isCamEnabled)
.frame(width: 120, height: 120)
.onTapGesture {
self.model.toggleCamInput()
}
}
.padding()
}
}
Button(action: {
self.showingSettings = true
}) {
HStack {
Image(systemName: "gearshape")
.resizable()
.frame(width: 24, height: 24)
Text("Settings")
}
.frame(maxWidth: .infinity)
.padding()
.sheet(isPresented: $showingSettings) {
SettingsView(showingSettings: $showingSettings).environmentObject(self.model)
}
}
.foregroundColor(.black)
.background(Color.white)
.border(Color.buttonsBorder, width: 1)
.cornerRadius(12)
.padding([.horizontal])
Button(action: {
self.model.disconnect()
}) {
HStack {
Image(systemName: "rectangle.portrait.and.arrow.right")
.resizable()
.frame(width: 24, height: 24)
Text("End")
}
.frame(maxWidth: .infinity)
.padding()
}
.foregroundColor(.white)
.background(Color.black)
.cornerRadius(12)
.padding([.bottom, .horizontal])
}
.background(Color.backgroundApp)
.toast(message: model.toastMessage, isShowing: model.showToast)
}
}
#Preview {
let mockModel = MockCallContainerModel()
let result = MeetingView().environmentObject(mockModel as CallContainerModel)
return result
}