mirror of
https://github.com/samsonjs/vibetunnel.git
synced 2026-04-09 11:55:53 +00:00
67 lines
2 KiB
Swift
67 lines
2 KiB
Swift
import SwiftUI
|
|
|
|
// MARK: - Environment Keys
|
|
|
|
private struct ServerManagerKey: EnvironmentKey {
|
|
static let defaultValue: ServerManager? = nil
|
|
}
|
|
|
|
private struct NgrokServiceKey: EnvironmentKey {
|
|
static let defaultValue: NgrokService? = nil
|
|
}
|
|
|
|
private struct SystemPermissionManagerKey: EnvironmentKey {
|
|
static let defaultValue: SystemPermissionManager? = nil
|
|
}
|
|
|
|
private struct TerminalLauncherKey: EnvironmentKey {
|
|
static let defaultValue: TerminalLauncher? = nil
|
|
}
|
|
|
|
// MARK: - Environment Values Extensions
|
|
|
|
extension EnvironmentValues {
|
|
var serverManager: ServerManager? {
|
|
get { self[ServerManagerKey.self] }
|
|
set { self[ServerManagerKey.self] = newValue }
|
|
}
|
|
|
|
var ngrokService: NgrokService? {
|
|
get { self[NgrokServiceKey.self] }
|
|
set { self[NgrokServiceKey.self] = newValue }
|
|
}
|
|
|
|
var systemPermissionManager: SystemPermissionManager? {
|
|
get { self[SystemPermissionManagerKey.self] }
|
|
set { self[SystemPermissionManagerKey.self] = newValue }
|
|
}
|
|
|
|
var terminalLauncher: TerminalLauncher? {
|
|
get { self[TerminalLauncherKey.self] }
|
|
set { self[TerminalLauncherKey.self] = newValue }
|
|
}
|
|
}
|
|
|
|
// MARK: - View Extensions
|
|
|
|
extension View {
|
|
/// Injects all VibeTunnel services into the environment
|
|
@MainActor
|
|
func withVibeTunnelServices(
|
|
serverManager: ServerManager? = nil,
|
|
ngrokService: NgrokService? = nil,
|
|
systemPermissionManager: SystemPermissionManager? = nil,
|
|
terminalLauncher: TerminalLauncher? = nil
|
|
)
|
|
-> some View
|
|
{
|
|
self
|
|
.environment(\.serverManager, serverManager ?? ServerManager.shared)
|
|
.environment(\.ngrokService, ngrokService ?? NgrokService.shared)
|
|
.environment(
|
|
\.systemPermissionManager,
|
|
systemPermissionManager ?? SystemPermissionManager.shared
|
|
)
|
|
.environment(\.terminalLauncher, terminalLauncher ?? TerminalLauncher.shared)
|
|
}
|
|
}
|