Fixes the xcode build and adds stubs for missing classes.

This commit is contained in:
2026-09-23 19:47:53 -07:00
parent baed51259e
commit e3b6196349
18 changed files with 445 additions and 240 deletions

View File

@@ -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)
}
}