Add an iPhone client sharing the macOS app's SwiftUI code

This commit is contained in:
Ian Gulliver
2026-10-21 22:00:54 -07:00
parent 57d660c57f
commit 9e81e9107d
46 changed files with 1625 additions and 287 deletions
+7 -8
View File
@@ -1,4 +1,3 @@
import AppKit
import OpenAPIRuntime
import SwiftUI
@@ -38,14 +37,14 @@ func worktreeImageSource(_ path: String, _ taskId: String?, dir: String = "") ->
@MainActor
final class ImageCache {
private var done: [ImageSource: NSImage] = [:]
private var loading: [ImageSource: Task<NSImage, any Error>] = [:]
private var done: [ImageSource: PlatformImage] = [:]
private var loading: [ImageSource: Task<PlatformImage, any Error>] = [:]
func cached(_ source: ImageSource) -> NSImage? {
func cached(_ source: ImageSource) -> PlatformImage? {
done[source]
}
func load(_ source: ImageSource, _ api: API) async throws -> NSImage {
func load(_ source: ImageSource, _ api: API) async throws -> PlatformImage {
if let img = done[source] {
return img
}
@@ -54,7 +53,7 @@ final class ImageCache {
}
let task = Task { @MainActor in
let data = try await Self.fetch(source, api)
guard let img = NSImage(data: data) else {
guard let img = PlatformImage(data: data) else {
throw ApiError(status: 0, message: "not an image")
}
return img
@@ -93,13 +92,13 @@ struct ByreImage: View {
var maxHeight: CGFloat = 480
@Environment(Store.self) private var store
@Environment(\.inTask) private var inTask
@ViewState private var image: NSImage?
@ViewState private var image: PlatformImage?
@ViewState private var failed = false
var body: some View {
Group {
if let image = image ?? store.imageCache.cached(source) {
Image(nsImage: image)
Image(platformImage: image)
.resizable()
.scaledToFit()
.frame(maxWidth: min(maxWidth, image.size.width), maxHeight: min(maxHeight, image.size.height), alignment: .leading)