Fixes the xcode build and adds stubs for missing classes.
This commit is contained in:
@@ -3,41 +3,60 @@
|
||||
// MonsterPreview
|
||||
//
|
||||
// Created by Tom Hicks on 4/7/21.
|
||||
// Last modified by Tom Hicks on 9/23/26.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import QuickLook
|
||||
import SwiftUI
|
||||
|
||||
class PreviewViewController: UIViewController, QLPreviewingController {
|
||||
|
||||
func preparePreviewOfFile(at url: URL, completionHandler handler: @escaping (Error?) -> Void) {
|
||||
|
||||
let document = MonsterDocument(fileURL: url)
|
||||
document.open(completionHandler: {[weak self](_) in
|
||||
self?.presentMonsterViewController(for: document)
|
||||
handler(nil)
|
||||
})
|
||||
}
|
||||
@MainActor
|
||||
final class PreviewViewController: UIViewController, @preconcurrency QLPreviewingController {
|
||||
|
||||
func presentMonsterViewController(for document: MonsterDocument) {
|
||||
let monsterViewModel = MonsterImportHelper.import5ESBMonster(document.monsterDTO ?? MonsterDTO())
|
||||
let monsterViewController = UIHostingController(rootView: MonsterDetailView(viewModel: monsterViewModel))
|
||||
monsterViewController.loadViewIfNeeded()
|
||||
monsterViewController.view.layoutIfNeeded()
|
||||
addChild(monsterViewController)
|
||||
view.addSubview(monsterViewController.view)
|
||||
monsterViewController.didMove(toParent: self)
|
||||
|
||||
if let monsterView = monsterViewController.view {
|
||||
monsterView.translatesAutoresizingMaskIntoConstraints = false
|
||||
NSLayoutConstraint.activate([
|
||||
monsterView.leftAnchor.constraint(equalTo: view.leftAnchor),
|
||||
monsterView.rightAnchor.constraint(equalTo: view.rightAnchor),
|
||||
monsterView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
monsterView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
// MARK: - QLPreviewingController
|
||||
|
||||
func preparePreviewOfFile(at url: URL, completionHandler handler: @escaping (Error?) -> Void) {
|
||||
Task { @MainActor in
|
||||
let document = MonsterDocument(fileURL: url)
|
||||
|
||||
// Asynchronously open the document on the MainActor
|
||||
let isOpen = await document.open()
|
||||
|
||||
guard isOpen else {
|
||||
handler(CocoaError(.fileReadCorruptFile))
|
||||
return
|
||||
}
|
||||
|
||||
// Extract the model and display
|
||||
let dto = document.monsterDTO ?? MonsterDTO()
|
||||
self.presentMonsterViewController(for: dto)
|
||||
|
||||
// Notify QuickLook that preview preparation succeeded
|
||||
handler(nil)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// MARK: - Private Presentation
|
||||
|
||||
private func presentMonsterViewController(for dto: MonsterDTO) {
|
||||
let monsterViewModel = MonsterImportHelper.import5ESBMonster(dto)
|
||||
let hostingController = UIHostingController(rootView: MonsterDetailView(viewModel: monsterViewModel))
|
||||
|
||||
// Add as child view controller
|
||||
addChild(hostingController)
|
||||
view.addSubview(hostingController.view)
|
||||
|
||||
// Configure layout constraints
|
||||
let subview = hostingController.view!
|
||||
subview.translatesAutoresizingMaskIntoConstraints = false
|
||||
|
||||
NSLayoutConstraint.activate([
|
||||
subview.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
subview.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
subview.topAnchor.constraint(equalTo: view.topAnchor),
|
||||
subview.bottomAnchor.constraint(equalTo: view.bottomAnchor)
|
||||
])
|
||||
|
||||
hostingController.didMove(toParent: self)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user