60 lines
1.3 KiB
Swift
60 lines
1.3 KiB
Swift
import SwiftUI
|
|
|
|
@main
|
|
struct InklessApp: App {
|
|
@State private var model = AppModel()
|
|
|
|
var body: some Scene {
|
|
WindowGroup {
|
|
RootView()
|
|
.environment(model)
|
|
.environment(model.printer)
|
|
}
|
|
}
|
|
}
|
|
|
|
@Observable
|
|
final class AppModel {
|
|
enum Section: Hashable { case photo, text, printer }
|
|
|
|
let printer = PrinterManager()
|
|
let photo = PhotoComposer()
|
|
let text = TextComposer()
|
|
|
|
var section = Section.photo
|
|
var isPairing = false
|
|
var failure: PrintError?
|
|
private(set) var completedJobs = 0
|
|
|
|
var printable: PrintRaster? {
|
|
switch section {
|
|
case .photo: photo.raster
|
|
case .text: text.raster
|
|
case .printer: nil
|
|
}
|
|
}
|
|
|
|
init() {
|
|
DebugLaunch.apply(to: self)
|
|
}
|
|
|
|
func print() {
|
|
guard let printable else { return }
|
|
guard printer.link == .ready else {
|
|
if printer.hasRememberedPrinter {
|
|
failure = .notConnected
|
|
} else {
|
|
isPairing = true
|
|
}
|
|
return
|
|
}
|
|
printer.print(printable) { [weak self] result in
|
|
switch result {
|
|
case .success: self?.completedJobs += 1
|
|
case .failure(.cancelled): break
|
|
case let .failure(error): self?.failure = error
|
|
}
|
|
}
|
|
}
|
|
}
|