Skip to content

Commit

Permalink
Ensure compiling blocks rendering
Browse files Browse the repository at this point in the history
closes #9
  • Loading branch information
finnvoor committed Nov 12, 2024
1 parent f3f0fc3 commit 0da9876
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 28 deletions.
4 changes: 2 additions & 2 deletions Config.xcconfig
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
MARKETING_VERSION = 0.0.4
CURRENT_PROJECT_VERSION = 4
MARKETING_VERSION = 0.1.0
CURRENT_PROJECT_VERSION = 5
62 changes: 36 additions & 26 deletions Plugin/Generators/SwiftUIViewGenerator.swift
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import OSLog
import SwiftUI
import SwiftUIFX

Expand All @@ -14,6 +15,7 @@ import SwiftUIFX
}

override func addParameters() throws {
logger.debug("Adding parameters")
apiManager.parameterCreationAPI.addStringParameter(
withName: "Package Path (Drag & Drop)",
parameterID: 1,
Expand Down Expand Up @@ -42,6 +44,7 @@ import SwiftUIFX
}

override func pluginInstanceAddedToDocument() {
logger.debug("Plugin instance added to document")
compile()
}

Expand All @@ -67,25 +70,29 @@ import SwiftUIFX
pluginState: Data?,
at _: CMTime
) throws -> CIImage {
guard let view else { return .clear }

let state = try JSONDecoder().decode(State.self, from: pluginState ?? Data())

return DispatchQueue.main.sync {
let renderer = ImageRenderer(
content: view
.environment(\.timelineTime, state.timelineTime)
.environment(\.timelineTimeRange, state.timelineTimeRange)
.environment(\.generatorTimeRange, state.generatorTimeRange)
.frame(width: sourceImages[0].extent.width, height: sourceImages[0].extent.height)
)
renderer.proposedSize = .init(sourceImages[0].extent.size)
return CIImage(cgImage: renderer.cgImage!, options: [.applyOrientationProperty: true])
try compileQueue.sync {
guard let view else { return .clear }

let state = try JSONDecoder().decode(State.self, from: pluginState ?? Data())

return DispatchQueue.main.sync {
let renderer = ImageRenderer(
content: view
.environment(\.timelineTime, state.timelineTime)
.environment(\.timelineTimeRange, state.timelineTimeRange)
.environment(\.generatorTimeRange, state.generatorTimeRange)
.frame(width: sourceImages[0].extent.width, height: sourceImages[0].extent.height)
)
renderer.proposedSize = .init(sourceImages[0].extent.size)
return CIImage(cgImage: renderer.cgImage!, options: [.applyOrientationProperty: true])
}
}
}

// MARK: Private

private let compileQueue = DispatchQueue(label: "SwiftUIViewGenerator.compile")
private let logger = Logger(subsystem: Bundle.main.bundleIdentifier!, category: "SwiftUIViewGenerator")
private var view: AnyView?
}

Expand All @@ -110,18 +117,21 @@ extension SwiftUIViewGenerator {
}

func compile() {
var packagePath: NSString = ""
apiManager.parameterRetrievalAPI.getStringParameterValue(&packagePath, fromParameter: 1)
let package = URL(filePath: packagePath as String)

guard !(packagePath as String).isEmpty else { return }

do {
let dylib = try swiftBuild(package: package)
view = try loadView(from: dylib)
} catch {
print(error.localizedDescription)
Task { await showAlert(message: error.localizedDescription) }
compileQueue.sync {
logger.debug("Compiling")
var packagePath: NSString = ""
apiManager.parameterRetrievalAPI.getStringParameterValue(&packagePath, fromParameter: 1)
let package = URL(filePath: packagePath as String)

guard !(packagePath as String).isEmpty else { return }

do {
let dylib = try swiftBuild(package: package)
view = try loadView(from: dylib)
} catch {
logger.error("\(error.localizedDescription, privacy: .public)")
Task { await showAlert(message: error.localizedDescription) }
}
}
}

Expand Down

0 comments on commit 0da9876

Please sign in to comment.