102 lines
3.7 KiB
Swift
Executable File
102 lines
3.7 KiB
Swift
Executable File
//
|
|
// PrinterConfigView.swift
|
|
// KlipperMon
|
|
//
|
|
// Created by maddiefuzz on 2/8/23.
|
|
//
|
|
|
|
import SwiftUI
|
|
import Network
|
|
|
|
// MARK: PrinterConfigView
|
|
struct PrinterConfigView: View {
|
|
@ObservedObject var printerManager: MoonrakerSocketManager
|
|
@ObservedObject var bonjourBrowser = BonjourBrowser()
|
|
|
|
@Environment(\.openURL) private var openURL
|
|
|
|
|
|
var body: some View {
|
|
VStack {
|
|
if(printerManager.isConnected) {
|
|
VStack {
|
|
Text("Soyuz Capsule is running in your menubar")
|
|
.font(.title)
|
|
.padding(4)
|
|
Image("menubar")
|
|
.resizable()
|
|
.frame(width: 225, height: 100)
|
|
.padding([.top], 2)
|
|
.padding([.leading, .trailing, .bottom], 8)
|
|
HStack {
|
|
Image(systemName: "network")
|
|
Text(printerManager.friendlyHostname)
|
|
Text("\(printerManager.socketHost):\(printerManager.socketPort)")
|
|
Button {
|
|
printerManager.disconnect()
|
|
} label: {
|
|
Text("Disconnect")
|
|
}
|
|
}
|
|
}
|
|
.frame(width: 500, height: 200)
|
|
} else {
|
|
VStack {
|
|
HStack {
|
|
Text("Auto-detected Printers")
|
|
.font(.title)
|
|
// Help button
|
|
Button {
|
|
let locBookName = Bundle.main.object(forInfoDictionaryKey: "CFBundleHelpBookName") as? String
|
|
NSHelpManager.shared.openHelpAnchor("bonjour", inBook: locBookName)
|
|
} label: {
|
|
ZStack {
|
|
Circle()
|
|
.strokeBorder(Color(NSColor.controlShadowColor), lineWidth: 0.5)
|
|
.background(Circle().foregroundColor(Color(NSColor.controlColor)))
|
|
.shadow(color: Color(NSColor.controlShadowColor).opacity(0.3), radius: 1)
|
|
.frame(width: 20, height: 20)
|
|
Text("?").font(.system(size: 15, weight: .medium ))
|
|
}
|
|
}.buttonStyle(PlainButtonStyle())
|
|
|
|
}
|
|
ForEach(bonjourBrowser.NDEngineResults , id: \.hashValue) { result in
|
|
HStack {
|
|
Text(result.endpoint.toFriendlyString())
|
|
Button {
|
|
printerManager.connectToBonjourEndpoint(result.endpoint)
|
|
} label: {
|
|
Text("Connect")
|
|
//.foregroundColor(.white)
|
|
.padding()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.frame(width: 500, height: 100)
|
|
}
|
|
}
|
|
.onAppear {
|
|
NSApplication.shared.activate(ignoringOtherApps: true)
|
|
}
|
|
}
|
|
}
|
|
|
|
struct PrinterConfigView_Previews: PreviewProvider {
|
|
@State static var printerManager = MoonrakerSocketManager()
|
|
|
|
static var previews: some View {
|
|
PrinterConfigView(printerManager: printerManager)
|
|
}
|
|
}
|
|
|
|
extension NWEndpoint {
|
|
func toFriendlyString() -> String {
|
|
let regex = /\.(.+)/
|
|
let match = self.debugDescription.firstMatch(of: regex)
|
|
return self.debugDescription.replacingOccurrences(of: match!.0, with: "")
|
|
}
|
|
}
|
|
|