closed #78
This commit is contained in:
@@ -47,15 +47,15 @@ extension AppDelegate: UNUserNotificationCenterDelegate {
|
||||
|
||||
switch action {
|
||||
case .horrible:
|
||||
PersistenceController.shared.add(mood: .horrible, forDate: date)
|
||||
PersistenceController.shared.add(mood: .horrible, forDate: date, entryType: .notification)
|
||||
case .bad:
|
||||
PersistenceController.shared.add(mood: .bad, forDate: date)
|
||||
PersistenceController.shared.add(mood: .bad, forDate: date, entryType: .notification)
|
||||
case .average:
|
||||
PersistenceController.shared.add(mood: .average, forDate: date)
|
||||
PersistenceController.shared.add(mood: .average, forDate: date, entryType: .notification)
|
||||
case .good:
|
||||
PersistenceController.shared.add(mood: .good, forDate: date)
|
||||
PersistenceController.shared.add(mood: .good, forDate: date, entryType: .notification)
|
||||
case .great:
|
||||
PersistenceController.shared.add(mood: .great, forDate: date)
|
||||
PersistenceController.shared.add(mood: .great, forDate: date, entryType: .notification)
|
||||
}
|
||||
UIApplication.shared.applicationIconBadgeNumber = 0
|
||||
}
|
||||
|
||||
@@ -3,6 +3,6 @@
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>_XCCurrentVersionName</key>
|
||||
<string>Shared.xcdatamodel</string>
|
||||
<string>Shared 2.xcdatamodel</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
15
Shared/Feels.xcdatamodeld/Shared 2.xcdatamodel/contents
Normal file
15
Shared/Feels.xcdatamodeld/Shared 2.xcdatamodel/contents
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="19574" systemVersion="21D49" minimumToolsVersion="Automatic" sourceLanguage="Swift" usedWithCloudKit="YES" userDefinedModelVersionIdentifier="">
|
||||
<entity name="MoodEntry" representedClassName="MoodEntry" syncable="YES" codeGenerationType="class">
|
||||
<attribute name="canDelete" optional="YES" attributeType="Boolean" usesScalarValueType="YES"/>
|
||||
<attribute name="canEdit" optional="YES" attributeType="Boolean" usesScalarValueType="YES"/>
|
||||
<attribute name="entryType" optional="YES" attributeType="Integer 16" defaultValueString="0" usesScalarValueType="YES"/>
|
||||
<attribute name="forDate" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
|
||||
<attribute name="moodValue" optional="YES" attributeType="Integer 16" defaultValueString="0" usesScalarValueType="YES"/>
|
||||
<attribute name="timestamp" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
|
||||
<attribute name="weekDay" optional="YES" attributeType="Integer 16" defaultValueString="0" usesScalarValueType="YES"/>
|
||||
</entity>
|
||||
<elements>
|
||||
<element name="MoodEntry" positionX="-63" positionY="-18" width="128" height="134"/>
|
||||
</elements>
|
||||
</model>
|
||||
@@ -86,8 +86,8 @@ class ContentModeViewModel: ObservableObject {
|
||||
getGroupedData()
|
||||
}
|
||||
|
||||
public func add(mood: Mood, forDate date: Date) {
|
||||
PersistenceController.shared.add(mood: mood, forDate: date)
|
||||
public func add(mood: Mood, forDate date: Date, entryType: EntryType) {
|
||||
PersistenceController.shared.add(mood: mood, forDate: date, entryType: entryType)
|
||||
getGroupedData()
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ class ContentModeViewModel: ObservableObject {
|
||||
fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
|
||||
}
|
||||
|
||||
PersistenceController.shared.add(mood: mood, forDate: forDate)
|
||||
PersistenceController.shared.add(mood: mood, forDate: forDate, entryType: .listView)
|
||||
|
||||
do {
|
||||
try PersistenceController.shared.viewContext.save()
|
||||
@@ -135,7 +135,7 @@ class ContentModeViewModel: ObservableObject {
|
||||
entriesToDelete.forEach({ entry in
|
||||
let entryDate = entry.forDate!
|
||||
PersistenceController.shared.viewContext.delete(entry)
|
||||
self.add(mood: .missing, forDate: entryDate)
|
||||
self.add(mood: .missing, forDate: entryDate, entryType: .listView)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
enum EntryType: Int {
|
||||
case notification
|
||||
case header
|
||||
case listView
|
||||
}
|
||||
|
||||
extension MoodEntry {
|
||||
var moodString: String {
|
||||
|
||||
@@ -34,7 +34,7 @@ class PersistenceController {
|
||||
return data.first
|
||||
}
|
||||
|
||||
public func add(mood: Mood, forDate date: Date) {
|
||||
public func add(mood: Mood, forDate date: Date, entryType: EntryType) {
|
||||
if let existingEntry = getEntry(byDate: date) {
|
||||
viewContext.delete(existingEntry)
|
||||
try? viewContext.save()
|
||||
@@ -47,6 +47,7 @@ class PersistenceController {
|
||||
newItem.weekDay = Int16(Calendar.current.component(.weekday, from: date))
|
||||
newItem.canEdit = true
|
||||
newItem.canDelete = true
|
||||
newItem.entryType = Int16(entryType.rawValue)
|
||||
|
||||
do {
|
||||
try viewContext.save()
|
||||
@@ -163,7 +164,7 @@ class PersistenceController {
|
||||
let existingEntriesSet = Set(existingEntries)
|
||||
let missing = Array(allDatesSet.subtracting(existingEntriesSet)).sorted(by: >)
|
||||
for date in missing {
|
||||
add(mood: .missing, forDate: date)
|
||||
add(mood: .missing, forDate: date, entryType: .listView)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -219,6 +220,8 @@ class PersistenceController {
|
||||
for description in container.persistentStoreDescriptions {
|
||||
description.setOption(true as NSNumber, forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey)
|
||||
description.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
|
||||
description.setOption(true as NSNumber, forKey: NSMigratePersistentStoresAutomaticallyOption)
|
||||
description.setOption(true as NSNumber, forKey: NSInferMappingModelAutomaticallyOption)
|
||||
}
|
||||
|
||||
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
|
||||
|
||||
@@ -71,6 +71,7 @@ struct ContentView: View {
|
||||
viewModel.update(entry: selectedEntry, toMood: mood)
|
||||
}
|
||||
showUpdateEntryAlert = false
|
||||
selectedEntry = nil
|
||||
})
|
||||
}
|
||||
|
||||
@@ -279,7 +280,7 @@ struct ContentView: View {
|
||||
if viewModel.shouldShowVotingHeader() {
|
||||
AddMoodHeaderView(addItemHeaderClosure: { (mood, date) in
|
||||
withAnimation {
|
||||
viewModel.add(mood: mood, forDate: date)
|
||||
viewModel.add(mood: mood, forDate: date, entryType: .header)
|
||||
}
|
||||
})
|
||||
.frame(height: headerHeight)
|
||||
@@ -319,7 +320,7 @@ struct ContentView: View {
|
||||
.padding()
|
||||
AddMoodHeaderView(addItemHeaderClosure: { (mood, date) in
|
||||
withAnimation {
|
||||
viewModel.add(mood: mood, forDate: date)
|
||||
viewModel.add(mood: mood, forDate: date, entryType: .header)
|
||||
}
|
||||
}, overrideDay: viewModel.shouldShowVotingHeader() ? .Today : .Previous)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user