Add an iPhone client sharing the macOS app's SwiftUI code
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user