Private
Public Access
1
0
Files
Kordophone/osx/kordophone2/App.swift

74 lines
2.0 KiB
Swift
Raw Normal View History

2025-08-24 16:24:21 -07:00
//
// kordophone2App.swift
// kordophone2
//
// Created by James Magahern on 8/24/25.
//
import SwiftUI
@main
struct KordophoneApp: App
2025-08-29 19:59:11 -06:00
{
2025-08-24 16:24:21 -07:00
var body: some Scene {
WindowGroup {
2025-08-29 19:59:11 -06:00
SplitView()
2025-08-24 16:24:21 -07:00
}
2025-09-10 14:41:24 -07:00
.commands {
TextEditingCommands()
}
WindowGroup(id: .transcriptWindow, for: Display.Conversation.self) { selectedConversation in
TranscriptWindowView(conversation: selectedConversation)
}
2025-08-25 00:13:55 -07:00
Settings {
PreferencesView()
}
2025-08-24 16:24:21 -07:00
}
private func reportError(_ e: Error) {
// Just printing for now.
print("Error: \(e.localizedDescription)")
}
}
struct TranscriptWindowView: View
{
@State private var transcriptViewModel = TranscriptView.ViewModel()
@State private var entryViewModel = MessageEntryView.ViewModel()
private let displayedConversation: Binding<Display.Conversation?>
public init(conversation: Binding<Display.Conversation?>) {
self.displayedConversation = conversation
transcriptViewModel.displayedConversation = conversation.wrappedValue
observeDisplayedConversationChanges()
}
private func observeDisplayedConversationChanges() {
withObservationTracking {
_ = displayedConversation.wrappedValue
} onChange: {
Task { @MainActor in
guard let displayedConversation = self.displayedConversation.wrappedValue else { return }
transcriptViewModel.displayedConversation = displayedConversation
observeDisplayedConversationChanges()
}
}
}
var body: some View {
VStack {
ConversationView(transcriptModel: $transcriptViewModel, entryModel: $entryViewModel)
.navigationTitle(displayedConversation.wrappedValue?.displayName ?? "Kordophone")
.selectedConversation(displayedConversation.wrappedValue)
}
}
}
extension String
{
static let transcriptWindow = "TranscriptWindow"
}