diff --git a/Shared/Persisence/Persistence.swift b/Shared/Persisence/Persistence.swift index f6d2eda..e178bf2 100644 --- a/Shared/Persisence/Persistence.swift +++ b/Shared/Persisence/Persistence.swift @@ -59,12 +59,18 @@ class PersistenceController { editedDataClosure.append(closure) } - public func runDataListeners() { - for closure in editedDataClosure { - closure() + public func saveAndRunDataListerners() { + do { + try viewContext.save() + + for closure in editedDataClosure { + closure() + } + } catch { + print(error) } } - + private func setupContainer() -> NSPersistentContainer { if useCloudKit { container = NSPersistentCloudKitContainer(name: "Feels") diff --git a/Shared/Persisence/PersistenceADD.swift b/Shared/Persisence/PersistenceADD.swift index cbd516d..b8a8897 100644 --- a/Shared/Persisence/PersistenceADD.swift +++ b/Shared/Persisence/PersistenceADD.swift @@ -23,13 +23,7 @@ extension PersistenceController { newItem.canDelete = true newItem.entryType = Int16(entryType.rawValue) - do { - try viewContext.save() - runDataListeners() - } catch { - let nsError = error as NSError - fatalError("Unresolved error \(nsError), \(nsError.userInfo)") - } + saveAndRunDataListerners() } func fillInMissingDates() { diff --git a/Shared/Persisence/PersistenceDELETE.swift b/Shared/Persisence/PersistenceDELETE.swift index 4699a79..cc1550f 100644 --- a/Shared/Persisence/PersistenceDELETE.swift +++ b/Shared/Persisence/PersistenceDELETE.swift @@ -14,18 +14,9 @@ extension PersistenceController { do { try viewContext.executeAndMergeChanges(using: deleteRequest) - try viewContext.save() - runDataListeners() + saveAndRunDataListerners() } catch let error as NSError { fatalError("Unresolved error \(error), \(error.userInfo)") } } - - func delete(forDate: Date) { - if let entry = PersistenceController.shared.getEntry(byDate: forDate) { - viewContext.delete(entry) - try! viewContext.save() - runDataListeners() - } - } } diff --git a/Shared/Persisence/PersistenceGET.swift b/Shared/Persisence/PersistenceGET.swift index 36f0742..98e3497 100644 --- a/Shared/Persisence/PersistenceGET.swift +++ b/Shared/Persisence/PersistenceGET.swift @@ -79,6 +79,7 @@ extension PersistenceController { let items = PersistenceController.shared.getData(startDate: startDateOfMonth, endDate: startDateOfMonth.endOfMonth, includedDays: [1,2,3,4,5,6,7]) + if !items.isEmpty { allMonths[month] = items } diff --git a/Shared/Persisence/PersistenceHelper.swift b/Shared/Persisence/PersistenceHelper.swift index b50bfc6..85b6722 100644 --- a/Shared/Persisence/PersistenceHelper.swift +++ b/Shared/Persisence/PersistenceHelper.swift @@ -75,8 +75,7 @@ extension PersistenceController { newItem.weekDay = Int16(Calendar.current.component(.weekday, from: date)) } - try viewContext.save() - runDataListeners() + saveAndRunDataListerners() } catch { // Replace this implementation with code to handle the error appropriately. // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. diff --git a/Shared/Persisence/PersistenceUPDATE.swift b/Shared/Persisence/PersistenceUPDATE.swift index 9d9dea9..4babc10 100644 --- a/Shared/Persisence/PersistenceUPDATE.swift +++ b/Shared/Persisence/PersistenceUPDATE.swift @@ -10,34 +10,12 @@ import Foundation extension PersistenceController { @discardableResult public func update(entryDate: Date, withModd mood: Mood) -> Bool { - do { - if let entry = PersistenceController.shared.getEntry(byDate: entryDate) { - viewContext.delete(entry) - } - - try viewContext.save() - } catch { - // Replace this implementation with code to handle the error appropriately. - // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. - let nsError = error as NSError - fatalError("Unresolved error \(nsError), \(nsError.userInfo)") + guard let existingEntry = getEntry(byDate: entryDate) else { return false } - - - do { - add(mood: mood, forDate: entryDate, entryType: .listView) - try viewContext.save() - } catch { - // Replace this implementation with code to handle the error appropriately. - // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. - let nsError = error as NSError - fatalError("Unresolved error \(nsError), \(nsError.userInfo)") - return false - } - - runDataListeners() + existingEntry.setValue(mood.rawValue, forKey: "moodValue") + saveAndRunDataListerners() return true } } diff --git a/Shared/views/HomeView/HomeViewViewModel.swift b/Shared/views/HomeView/HomeViewViewModel.swift index c2be984..708fe14 100644 --- a/Shared/views/HomeView/HomeViewViewModel.swift +++ b/Shared/views/HomeView/HomeViewViewModel.swift @@ -52,12 +52,11 @@ class HomeViewViewModel: ObservableObject { } private func getGroupedData(addMonthStartWeekdayPadding: Bool) { - grouped = PersistenceController.shared.splitIntoYearMonth() - + var newStuff = PersistenceController.shared.splitIntoYearMonth() if addMonthStartWeekdayPadding { - grouped = MoodEntryFunctions.padMoodEntriesForCalendar(entries: grouped) + newStuff = MoodEntryFunctions.padMoodEntriesForCalendar(entries: grouped) } -// + grouped = newStuff numberOfItems = numberOfEntries }