87 lines
3.3 KiB
Swift
87 lines
3.3 KiB
Swift
/*
|
||
* Copyright 2024 OpenVidu
|
||
*
|
||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
* you may not use this file except in compliance with the License.
|
||
* You may obtain a copy of the License at
|
||
*
|
||
* http://www.apache.org/licenses/LICENSE-2.0
|
||
*
|
||
* Unless required by applicable law or agreed to in writing, software
|
||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
* See the License for the specific language governing permissions and
|
||
* limitations under the License.
|
||
*/
|
||
|
||
import Foundation
|
||
import LiveKit
|
||
import SFSafeSymbols
|
||
import SwiftUI
|
||
|
||
struct ConfigureUrlsView: View {
|
||
|
||
@EnvironmentObject var appCtx: AppContext
|
||
@EnvironmentObject var roomCtx: RoomContext
|
||
|
||
@State private var applicationServerUrl: String = ""
|
||
@State private var livekitUrl: String = ""
|
||
@State private var errorMessage: String = ""
|
||
|
||
var body: some View {
|
||
GeometryReader { geometry in
|
||
Color.ovGray
|
||
.ignoresSafeArea()
|
||
ScrollView {
|
||
VStack(alignment: .center, spacing: 40.0) {
|
||
|
||
Text("Configure the LiveKit URL and the Application Server URL before connecting to the Room")
|
||
|
||
VStack(spacing: 15) {
|
||
LKTextField(title: "Application Server URL", text: $applicationServerUrl, type: .URL)
|
||
LKTextField(title: "LiveKit URL", text: $livekitUrl, type: .URL)
|
||
}
|
||
.frame(maxWidth: 350)
|
||
|
||
|
||
HStack(alignment: .center) {
|
||
Spacer()
|
||
|
||
LKButton(title: "Save") {
|
||
Task.detached { @MainActor in
|
||
let isApplicationServerValid = isValidURL(self.applicationServerUrl)
|
||
let isLivekitUrlValid = isValidURL(self.livekitUrl)
|
||
|
||
if !isApplicationServerValid || !isLivekitUrlValid {
|
||
print("Invalid URLs")
|
||
errorMessage = "There was an error with the url values"
|
||
return
|
||
}
|
||
appCtx.applicationServerUrl = self.applicationServerUrl
|
||
roomCtx.livekitUrl = self.livekitUrl
|
||
errorMessage = ""
|
||
}
|
||
}
|
||
|
||
Spacer()
|
||
}
|
||
|
||
Text(errorMessage)
|
||
.foregroundColor(.red)
|
||
}
|
||
.padding()
|
||
.frame(width: geometry.size.width) // Make the scroll view full-width
|
||
.frame(minHeight: geometry.size.height) // Set the content’s min height to the parent
|
||
}
|
||
}
|
||
}
|
||
|
||
func isValidURL(_ urlString: String) -> Bool {
|
||
guard let url = URL(string: urlString),
|
||
let scheme = url.scheme else {
|
||
return false
|
||
}
|
||
return ["http", "https", "ws", "wss"].contains(scheme)
|
||
}
|
||
}
|