import Foundation import Observation /// One file via `repo cat`: text renders (highlighted when the language is /// known), binary says so, truncated says so — never a guess. @Observable @MainActor final class FileViewModel { private(set) var state: LoadState = .loading private let client: GitbayClient let repoPath: String let filePath: String let ref: String? init(client: GitbayClient, repoPath: String, filePath: String, ref: String? = nil) { self.client = client self.repoPath = repoPath self.filePath = filePath self.ref = ref } var fileName: String { String(filePath.split(separator: "/").last ?? "") } func load() async { var argv = ["repo", "cat", repoPath, filePath] if let ref { argv.append(contentsOf: ["--ref", ref]) } do { state = .loaded(try await client.read(argv, as: FileContent.self)) } catch { state = .from(error) } } }