refactor: replace canvas.show with canvas.present

This commit is contained in:
Peter Steinberger
2025-12-19 03:35:33 +01:00
parent 74cdc1cf3e
commit beefda7f60
19 changed files with 96 additions and 45 deletions

View File

@@ -95,8 +95,8 @@ enum ControlRequestHandler {
deliver: deliver,
to: to)
case let .canvasShow(session, path, placement):
return await self.handleCanvasShow(session: session, path: path, placement: placement)
case let .canvasPresent(session, path, placement):
return await self.handleCanvasPresent(session: session, path: path, placement: placement)
case let .canvasHide(session):
return await self.handleCanvasHide(session: session)
@@ -235,7 +235,7 @@ enum ControlRequestHandler {
UserDefaults.standard.object(forKey: cameraEnabledKey) as? Bool ?? false
}
private static func handleCanvasShow(
private static func handleCanvasPresent(
session: String,
path: String?,
placement: CanvasPlacement?) async -> Response
@@ -243,20 +243,24 @@ enum ControlRequestHandler {
guard self.canvasEnabled() else { return Response(ok: false, message: "Canvas disabled by user") }
_ = session
do {
var params: [String: Any] = [:]
if let path, !path.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
_ = try await self.invokeLocalNode(
command: ClawdisCanvasCommand.navigate.rawValue,
params: ["url": path],
timeoutMs: 20000)
} else {
_ = try await self.invokeLocalNode(
command: ClawdisCanvasCommand.show.rawValue,
params: nil,
timeoutMs: 20000)
params["url"] = path
}
if placement != nil {
return Response(ok: true, message: "Canvas placement ignored (node mode)")
if let placement {
var placementPayload: [String: Any] = [:]
if let x = placement.x { placementPayload["x"] = x }
if let y = placement.y { placementPayload["y"] = y }
if let width = placement.width { placementPayload["width"] = width }
if let height = placement.height { placementPayload["height"] = height }
if !placementPayload.isEmpty {
params["placement"] = placementPayload
}
}
_ = try await self.invokeLocalNode(
command: ClawdisCanvasCommand.present.rawValue,
params: params.isEmpty ? nil : params,
timeoutMs: 20000)
return Response(ok: true)
} catch {
return Response(ok: false, message: error.localizedDescription)

View File

@@ -489,7 +489,7 @@ struct DebugSettings: View {
.font(.caption.monospaced())
.frame(width: 160)
Button("Show panel") {
Task { await self.canvasShow() }
Task { await self.canvasPresent() }
}
.buttonStyle(.borderedProminent)
Button("Hide panel") {
@@ -750,7 +750,7 @@ extension DebugSettings {
// MARK: - Canvas debug actions
@MainActor
private func canvasShow() async {
private func canvasPresent() async {
self.canvasError = nil
let session = self.canvasSessionKey.trimmingCharacters(in: .whitespacesAndNewlines)
do {

View File

@@ -107,7 +107,7 @@ final class MacNodeModeCoordinator {
private func currentCommands(caps: [String]) -> [String] {
var commands: [String] = [
ClawdisCanvasCommand.show.rawValue,
ClawdisCanvasCommand.present.rawValue,
ClawdisCanvasCommand.hide.rawValue,
ClawdisCanvasCommand.navigate.rawValue,
ClawdisCanvasCommand.evalJS.rawValue,

View File

@@ -19,9 +19,19 @@ actor MacNodeRuntime {
}
do {
switch command {
case ClawdisCanvasCommand.show.rawValue:
case ClawdisCanvasCommand.present.rawValue:
let params = (try? Self.decodeParams(ClawdisCanvasPresentParams.self, from: req.paramsJSON)) ??
ClawdisCanvasPresentParams()
let urlTrimmed = params.url?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
let url = urlTrimmed.isEmpty ? nil : urlTrimmed
let placement = params.placement.map {
CanvasPlacement(x: $0.x, y: $0.y, width: $0.width, height: $0.height)
}
try await MainActor.run {
_ = try CanvasManager.shared.show(sessionKey: "main", path: nil)
_ = try CanvasManager.shared.showDetailed(
sessionKey: "main",
target: url,
placement: placement)
}
return BridgeInvokeResponse(id: req.id, ok: true)