Switch to gRPC client in Swift app
Some checks are pending
Build AppImage / Build AppImage (push) Waiting to run
Build Apple Apps / Build App (iOS) (push) Waiting to run
Build Apple Apps / Build App (iOS Simulator) (push) Waiting to run
Build Apple Apps / Build App (macOS) (push) Waiting to run
Build Docker / Build Docker Image (push) Waiting to run
Build Rust Crate / Build Crate (macOS (Intel)) (push) Waiting to run
Build Rust Crate / Build Crate (macOS) (push) Waiting to run
Build Rust Crate / Build Crate (Linux) (push) Waiting to run
Build Rust Crate / Build Crate (Windows) (push) Waiting to run
Some checks are pending
Build AppImage / Build AppImage (push) Waiting to run
Build Apple Apps / Build App (iOS) (push) Waiting to run
Build Apple Apps / Build App (iOS Simulator) (push) Waiting to run
Build Apple Apps / Build App (macOS) (push) Waiting to run
Build Docker / Build Docker Image (push) Waiting to run
Build Rust Crate / Build Crate (macOS (Intel)) (push) Waiting to run
Build Rust Crate / Build Crate (macOS) (push) Waiting to run
Build Rust Crate / Build Crate (Linux) (push) Waiting to run
Build Rust Crate / Build Crate (Windows) (push) Waiting to run
This commit is contained in:
parent
25a0f7c421
commit
85640ffce1
93 changed files with 1666 additions and 1327 deletions
67
Apple/UI/MenuItemToggleView.swift
Normal file
67
Apple/UI/MenuItemToggleView.swift
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
//
|
||||
// MenuItemToggleView.swift
|
||||
// App
|
||||
//
|
||||
// Created by Thomas Stubblefield on 5/13/23.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
public struct MenuItemToggleView: View {
|
||||
@Environment(\.tunnel)
|
||||
var tunnel: Tunnel
|
||||
|
||||
public var body: some View {
|
||||
HStack {
|
||||
VStack(alignment: .leading) {
|
||||
Text("Burrow")
|
||||
.font(.headline)
|
||||
Text(tunnel.status.description)
|
||||
.font(.subheadline)
|
||||
}
|
||||
Spacer()
|
||||
Toggle(isOn: tunnel.toggleIsOn) {
|
||||
}
|
||||
.disabled(tunnel.toggleDisabled)
|
||||
.toggleStyle(.switch)
|
||||
}
|
||||
.accessibilityElement(children: .combine)
|
||||
.padding(.horizontal, 4)
|
||||
.padding(10)
|
||||
.frame(minWidth: 300, minHeight: 32, maxHeight: 32)
|
||||
}
|
||||
|
||||
public init() {
|
||||
}
|
||||
}
|
||||
|
||||
extension Tunnel {
|
||||
@MainActor fileprivate var toggleDisabled: Bool {
|
||||
switch status {
|
||||
case .disconnected, .permissionRequired, .connected, .disconnecting:
|
||||
false
|
||||
case .unknown, .disabled, .connecting, .reasserting, .invalid, .configurationReadWriteFailed:
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
@MainActor var toggleIsOn: Binding<Bool> {
|
||||
Binding {
|
||||
switch status {
|
||||
case .connecting, .reasserting, .connected:
|
||||
true
|
||||
default:
|
||||
false
|
||||
}
|
||||
} set: { newValue in
|
||||
switch (status, newValue) {
|
||||
case (.permissionRequired, true):
|
||||
enable()
|
||||
case (_, true):
|
||||
start()
|
||||
case (_, false):
|
||||
stop()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue