Add tests for PrinterRequestManager , remove singleton implementation in favor of view constructor arguments
This commit is contained in:
@@ -9,7 +9,7 @@ import SwiftUI
|
||||
import Network
|
||||
|
||||
struct PrinterConfigView: View {
|
||||
@ObservedObject var printerManager = PrinterRequestManager.shared
|
||||
@ObservedObject var printerManager: PrinterRequestManager
|
||||
|
||||
var body: some View {
|
||||
VStack {
|
||||
@@ -52,8 +52,10 @@ struct PrinterConfigView: View {
|
||||
}
|
||||
|
||||
struct PrinterConfigView_Previews: PreviewProvider {
|
||||
@State static var printerManager = PrinterRequestManager()
|
||||
|
||||
static var previews: some View {
|
||||
PrinterConfigView()
|
||||
PrinterConfigView(printerManager: printerManager)
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -7,6 +7,7 @@
|
||||
|
||||
import Foundation
|
||||
import Network
|
||||
import AppKit
|
||||
import Starscream
|
||||
|
||||
// MARK: Bonjour Protocol
|
||||
@@ -17,13 +18,22 @@ protocol NetworkDiscoveryEngine {
|
||||
func setStateUpdateHandler(_ handler: @escaping ((NWBrowser.State) -> Void))
|
||||
}
|
||||
|
||||
//protocol NDEResult {
|
||||
// var endpoint: NWEndpoint { get }
|
||||
// var interface: [NWInterface] { get }
|
||||
// var metadata: NWBrowser.Result.Metadata { get }
|
||||
//}
|
||||
|
||||
extension NWBrowser: NetworkDiscoveryEngine {
|
||||
//class NDEngine: NetworkDiscoveryEngine,
|
||||
func startScan(queue: DispatchQueue) {
|
||||
start(queue: queue)
|
||||
}
|
||||
|
||||
func setBrowseResultsChangedHandler(_ handler: @escaping ((Set<NWBrowser.Result>, Set<NWBrowser.Result.Change>) -> Void)) {
|
||||
self.browseResultsChangedHandler = handler
|
||||
}
|
||||
|
||||
func setStateUpdateHandler(_ handler: @escaping ((State) -> Void)) {
|
||||
self.stateUpdateHandler = handler
|
||||
}
|
||||
@@ -50,8 +60,6 @@ struct JsonRpcRequest: Codable {
|
||||
class PrinterRequestManager: ObservableObject, WebSocketDelegate {
|
||||
let WEBSOCKET_TIMEOUT_INTERVAL: TimeInterval = 60.0
|
||||
|
||||
static let shared = PrinterRequestManager()
|
||||
|
||||
// Debug stuff
|
||||
let startDate = Date()
|
||||
let startDateString: String
|
||||
@@ -96,8 +104,6 @@ class PrinterRequestManager: ObservableObject, WebSocketDelegate {
|
||||
var socket: WebSocket?
|
||||
var lastPingDate = Date()
|
||||
|
||||
// TODO: Set this up to actually reconnect
|
||||
|
||||
// Parse a JSON-RPC query-response message
|
||||
func parse_response(_ response: jsonRpcResponse) {
|
||||
state = response.result.status.print_stats?.state ?? ""
|
||||
@@ -124,7 +130,7 @@ class PrinterRequestManager: ObservableObject, WebSocketDelegate {
|
||||
}
|
||||
}
|
||||
|
||||
private init(browser: NetworkDiscoveryEngine = NWBrowser(for: .bonjourWithTXTRecord(type: "_moonraker._tcp", domain: "local."), using: .tcp)) {
|
||||
init(browser: NetworkDiscoveryEngine = NWBrowser(for: .bonjourWithTXTRecord(type: "_moonraker._tcp", domain: "local."), using: .tcp)) {
|
||||
state = ""
|
||||
progress = 0.0
|
||||
extruderTemperature = 0.0
|
||||
@@ -167,6 +173,38 @@ class PrinterRequestManager: ObservableObject, WebSocketDelegate {
|
||||
})
|
||||
// Start up the bonjour browser, get results and process them in the update handler
|
||||
nwBrowser.startScan(queue: DispatchQueue.main)
|
||||
|
||||
// Screen sleep functionality
|
||||
// NSWorkspace.shared.notificationCenter.addObserver(self, selector: #selector(screenDidSleep(_:)), name: NSWorkspace.screensDidSleepNotification, object: nil)
|
||||
// NSWorkspace.shared.notificationCenter.addObserver(self, selector: #selector(screenDidWake(_:)), name: NSWorkspace.screensDidWakeNotification, object: nil)
|
||||
let center = NSWorkspace.shared.notificationCenter;
|
||||
let mainQueue = OperationQueue.main
|
||||
|
||||
center.addObserver(forName: NSWorkspace.screensDidWakeNotification, object: nil, queue: mainQueue) { notification in
|
||||
self.screenChangedSleepState(notification)
|
||||
}
|
||||
|
||||
center.addObserver(forName: NSWorkspace.screensDidSleepNotification, object: nil, queue: mainQueue) { notification in
|
||||
self.screenChangedSleepState(notification)
|
||||
}
|
||||
}
|
||||
|
||||
func screenChangedSleepState(_ notification: Notification) {
|
||||
switch(notification.name) {
|
||||
case NSWorkspace.screensDidSleepNotification:
|
||||
socket?.disconnect()
|
||||
case NSWorkspace.screensDidWakeNotification:
|
||||
self.openWebsocket()
|
||||
default:
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func screenDidWake(_ notification: Notification) {
|
||||
print("Screen woke: \(notification.name)")
|
||||
if socket != nil {
|
||||
self.openWebsocket()
|
||||
}
|
||||
}
|
||||
|
||||
// Called from the UI with an endpoint.
|
||||
|
@@ -13,6 +13,8 @@ struct SoyuzApp: App {
|
||||
|
||||
@State var currentIcon = "move.3d"
|
||||
|
||||
@ObservedObject var printerManager = PrinterRequestManager()
|
||||
|
||||
var body: some Scene {
|
||||
// WindowGroup(id: "floating-stats") {
|
||||
// KlipperMonMenuBarExtraView(currentMenuBarIcon: $currentIcon)
|
||||
@@ -20,13 +22,13 @@ struct SoyuzApp: App {
|
||||
// }
|
||||
|
||||
WindowGroup("Configuration", id: "soyuz_cfg", content: {
|
||||
PrinterConfigView()
|
||||
PrinterConfigView(printerManager: printerManager)
|
||||
//.frame(minWidth: 300, maxWidth: 600, minHeight: 60, maxHeight: 100)
|
||||
})
|
||||
.windowResizability(.contentSize)
|
||||
|
||||
MenuBarExtra("Soyuz", systemImage: currentIcon) {
|
||||
SoyuzMenuBarExtraView(currentMenuBarIcon: $currentIcon)
|
||||
SoyuzMenuBarExtraView(printerManager: printerManager, currentMenuBarIcon: $currentIcon)
|
||||
.padding([.top, .leading, .trailing], 8)
|
||||
.padding([.bottom], 6)
|
||||
}
|
||||
|
@@ -15,7 +15,7 @@ struct SoyuzMenuBarExtraView: View {
|
||||
|
||||
@Environment(\.openWindow) var openWindow
|
||||
|
||||
@ObservedObject var printerManager = PrinterRequestManager.shared
|
||||
@ObservedObject var printerManager: PrinterRequestManager
|
||||
|
||||
@State var printPercentage: Double = 0
|
||||
|
||||
@@ -100,8 +100,10 @@ struct SoyuzMenuBarExtraView: View {
|
||||
|
||||
struct KlipperMonMenuBarExtraView_Previews: PreviewProvider {
|
||||
@State static var currentMenuBarIcon = "move.3d"
|
||||
@State static var printerManager = PrinterRequestManager()
|
||||
|
||||
static var previews: some View {
|
||||
SoyuzMenuBarExtraView(currentMenuBarIcon: $currentMenuBarIcon)
|
||||
SoyuzMenuBarExtraView(printerManager: printerManager, currentMenuBarIcon: $currentMenuBarIcon)
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user