Basic network call implementation

This commit is contained in:
Madeline
2023-02-07 15:04:01 -05:00
parent 8876fc666a
commit dd4324e395
6 changed files with 133 additions and 4 deletions

View File

@@ -2,9 +2,11 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.files.user-selected.read-only</key>
<true/>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.files.user-selected.read-only</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
</dict>
</plist>

View File

@@ -7,7 +7,30 @@
import SwiftUI
@main
struct KlipperMonMenuBarApp: App {
let persistenceController = PersistenceController.shared
@State var currentIcon = "move.3d"
var body: some Scene {
WindowGroup {
ContentView()
.environment(\.managedObjectContext, persistenceController.container.viewContext)
}
MenuBarExtra("Soyuz", systemImage: currentIcon) {
KlipperMonMenuBarExtraView(currentMenuBarIcon: $currentIcon)
}
.menuBarExtraStyle(.window)
}
}
protocol MenuBarExtraIconUpdater {
func updateIcon(systemName: String)
}
struct KlipperMonApp: App {
let persistenceController = PersistenceController.shared

View File

@@ -0,0 +1,58 @@
//
// KlipperMonMenuBarExtraView.swift
// KlipperMon
//
// Created by maddiefuzz on 2/7/23.
//
import SwiftUI
struct KlipperMonMenuBarExtraView: View {
@State var printPercentage: Double = 0
@Binding var currentMenuBarIcon: String
let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
var body: some View {
Label(String(printPercentage), systemImage: "thermometer.snowflake.circle")
.onReceive(timer) { input in
Task {
self.printPercentage = await self.getPrintPercentage()
}
}
Button("Check Printer") {
currentMenuBarIcon = "flame"
}
}
func getPrintPercentage() async -> Double {
guard let url = URL(string: "http://10.0.21.39/printer/objects/query?extruder=temperature") else {
fatalError("Missing URL")
}
let urlRequest = URLRequest(url: url)
do {
let (data, response) = try await URLSession.shared.data(for: urlRequest)
guard let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 else {
print("Error!")
return -1
}
print(String(data: data, encoding: .utf8))
let decoder = JSONDecoder()
let printerObjectsQuery = try decoder.decode(PrinterObjectsQuery.self, from: data)
return printerObjectsQuery.result.status.extruder.temperature
// handle data as JSON
} catch {
print("Error!")
return -1
}
}
}
struct KlipperMonMenuBarExtraView_Previews: PreviewProvider {
@State static var currentMenuBarIcon = "move.3d"
static var previews: some View {
KlipperMonMenuBarExtraView(currentMenuBarIcon: $currentMenuBarIcon)
}
}

View File

@@ -0,0 +1,9 @@
//
// KlipperWebsocket.swift
// KlipperMon
//
// Created by maddiefuzz on 2/7/23.
//
import Foundation

View File

@@ -0,0 +1,25 @@
//
// PrinterObjectsQuery.swift
// KlipperMon
//
// Created by maddiefuzz on 2/7/23.
//
import Foundation
struct PrinterObjectsQuery: Decodable {
let result: ResultsData
}
struct ResultsData: Decodable {
let eventtime: Double
let status: StatusData
}
struct StatusData: Decodable {
let extruder: ExtruderData
}
struct ExtruderData: Decodable {
let temperature: Double
}