fix: saving logic
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
import Combine
|
||||
|
||||
@MainActor
|
||||
class MeetingListViewModel: ObservableObject {
|
||||
@@ -7,8 +8,18 @@ class MeetingListViewModel: ObservableObject {
|
||||
@Published var isLoading = false
|
||||
@Published var errorMessage: String?
|
||||
|
||||
private var cancellables = Set<AnyCancellable>()
|
||||
|
||||
init() {
|
||||
loadMeetings()
|
||||
|
||||
// Listen for saved meeting notifications to refresh the list
|
||||
NotificationCenter.default.publisher(for: .meetingSaved)
|
||||
.sink { [weak self] _ in
|
||||
print("🔔 Meeting saved notification received. Reloading meetings list...")
|
||||
self?.loadMeetings()
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
}
|
||||
|
||||
func loadMeetings() {
|
||||
@@ -16,7 +27,12 @@ class MeetingListViewModel: ObservableObject {
|
||||
errorMessage = nil
|
||||
|
||||
DispatchQueue.main.async { [weak self] in
|
||||
self?.meetings = LocalStorageManager.shared.loadMeetings()
|
||||
let loadedMeetings = LocalStorageManager.shared.loadMeetings()
|
||||
print("📋 Loaded \(loadedMeetings.count) meetings")
|
||||
for meeting in loadedMeetings.prefix(3) {
|
||||
print("📋 Meeting: \(meeting.id) - title: '\(meeting.title)', notes: '\(meeting.userNotes.prefix(50))...'")
|
||||
}
|
||||
self?.meetings = loadedMeetings
|
||||
self?.isLoading = false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,11 @@ import Foundation
|
||||
import SwiftUI
|
||||
import Combine
|
||||
|
||||
// Add notification name for meeting saved events
|
||||
extension Notification.Name {
|
||||
static let meetingSaved = Notification.Name("MeetingSaved")
|
||||
}
|
||||
|
||||
enum MeetingViewTab: String, CaseIterable {
|
||||
case myNotes = "My Notes"
|
||||
case transcript = "Transcript"
|
||||
@@ -27,7 +32,14 @@ class MeetingViewModel: ObservableObject {
|
||||
private var cancellables = Set<AnyCancellable>()
|
||||
|
||||
init(meeting: Meeting = Meeting()) {
|
||||
self.meeting = meeting
|
||||
// Load the latest version of the meeting from storage if it exists
|
||||
if let savedMeeting = LocalStorageManager.shared.loadMeetings().first(where: { $0.id == meeting.id }) {
|
||||
print("🔄 Loading latest version of meeting: \(meeting.id)")
|
||||
self.meeting = savedMeeting
|
||||
} else {
|
||||
print("🆕 Using provided meeting: \(meeting.id)")
|
||||
self.meeting = meeting
|
||||
}
|
||||
|
||||
// Update meeting transcript chunks when audio manager transcript chunks change
|
||||
audioManager.$transcriptChunks
|
||||
@@ -47,7 +59,8 @@ class MeetingViewModel: ObservableObject {
|
||||
// Auto-save when meeting properties change
|
||||
$meeting
|
||||
.debounce(for: .milliseconds(500), scheduler: RunLoop.main)
|
||||
.sink { [weak self] _ in
|
||||
.sink { [weak self] meeting in
|
||||
print("🔄 Auto-saving meeting: \(meeting.id) - title: '\(meeting.title)', notes: '\(meeting.userNotes.prefix(50))...'")
|
||||
self?.saveMeeting()
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
@@ -116,7 +129,12 @@ class MeetingViewModel: ObservableObject {
|
||||
}
|
||||
|
||||
func saveMeeting() {
|
||||
_ = LocalStorageManager.shared.saveMeeting(meeting)
|
||||
print("💾 Saving meeting: \(meeting.id)")
|
||||
let success = LocalStorageManager.shared.saveMeeting(meeting)
|
||||
print("💾 Save result: \(success ? "SUCCESS" : "FAILED")")
|
||||
if success {
|
||||
NotificationCenter.default.post(name: .meetingSaved, object: meeting)
|
||||
}
|
||||
}
|
||||
|
||||
func copyTranscript() {
|
||||
|
||||
@@ -121,6 +121,9 @@ struct MeetingDetailView: View {
|
||||
} message: {
|
||||
Text(viewModel.errorMessage ?? "")
|
||||
}
|
||||
.onDisappear {
|
||||
viewModel.saveMeeting()
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Content Views
|
||||
|
||||
@@ -40,6 +40,9 @@ struct MeetingListView: View {
|
||||
.navigationDestination(for: Meeting.self) { meeting in
|
||||
MeetingDetailView(meeting: meeting)
|
||||
}
|
||||
.onAppear {
|
||||
viewModel.loadMeetings()
|
||||
}
|
||||
}
|
||||
.overlay {
|
||||
if viewModel.isLoading {
|
||||
@@ -54,8 +57,19 @@ struct MeetingRowView: View {
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading, spacing: 4) {
|
||||
Text(meeting.date, style: .date)
|
||||
.font(.headline)
|
||||
// Show title if exists, otherwise show date
|
||||
if !meeting.title.isEmpty {
|
||||
Text(meeting.title)
|
||||
.font(.headline)
|
||||
.lineLimit(1)
|
||||
|
||||
Text(meeting.date, style: .date)
|
||||
.font(.caption)
|
||||
.foregroundColor(.secondary)
|
||||
} else {
|
||||
Text(meeting.date, style: .date)
|
||||
.font(.headline)
|
||||
}
|
||||
|
||||
if !meeting.transcript.isEmpty {
|
||||
Text(meeting.transcript)
|
||||
|
||||
Reference in New Issue
Block a user