From 87dbc9d1dafd5f0bbf30c2eb60c881a333f756c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dr=2E=20Julian-Steffen=20M=C3=BCller?= Date: Sun, 6 Jun 2021 10:09:33 +0200 Subject: [PATCH] Added release and pickup date. Pickup date is optional --- .../CDModel/Console+CoreDataClass.swift | 2 +- Zockerhoehle/CDModel/Game+CoreDataClass.swift | 14 ++++++++------ .../CDModel/Game+CoreDataProperties.swift | 4 ++-- Zockerhoehle/Utils/LibraryImport.swift | 17 +++++++++++------ Zockerhoehle/Views/GameDetailView.swift | 2 +- Zockerhoehle/Views/GameEditMode.swift | 6 +++++- Zockerhoehle/Views/GamePickupsView.swift | 2 +- Zockerhoehle/Views/Overview.swift | 2 +- .../Zockerhoehle.xcdatamodel/contents | 4 ++-- 9 files changed, 32 insertions(+), 21 deletions(-) diff --git a/Zockerhoehle/CDModel/Console+CoreDataClass.swift b/Zockerhoehle/CDModel/Console+CoreDataClass.swift index 00f1d4a..44dbd3c 100644 --- a/Zockerhoehle/CDModel/Console+CoreDataClass.swift +++ b/Zockerhoehle/CDModel/Console+CoreDataClass.swift @@ -22,7 +22,7 @@ public class Console: NSManagedObject, Identifiable { Game.compareByCreationDate(gameA: $0, gameB: $1) }) else { return false } - return newestGameConsoleA.pickupOrReleaseDate > newestGameConsoleB.pickupOrReleaseDate + return newestGameConsoleA.releaseDate > newestGameConsoleB.releaseDate } // Defining default values during creation diff --git a/Zockerhoehle/CDModel/Game+CoreDataClass.swift b/Zockerhoehle/CDModel/Game+CoreDataClass.swift index fb21205..f391496 100644 --- a/Zockerhoehle/CDModel/Game+CoreDataClass.swift +++ b/Zockerhoehle/CDModel/Game+CoreDataClass.swift @@ -15,14 +15,14 @@ import SwiftUI public class Game: NSManagedObject, Identifiable { public static func compareByCreationDate(gameA : Game, gameB : Game) -> Bool { - return gameA.pickupOrReleaseDate < gameB.pickupOrReleaseDate + return gameA.releaseDate < gameB.releaseDate } @objc private override init(entity: NSEntityDescription, insertInto context: NSManagedObjectContext?) { super.init(entity: entity, insertInto: context) - self.pickupOrReleaseDate = Date() + self.releaseDate = Date() self.uuid = UUID() print("Set UUID to \(self.uuid)") } @@ -35,8 +35,8 @@ extension Game : Encodable { case notes case isDigital case lentTo - case pickupOrReleaseDate - case isPickupDate + case releaseDate + case pickupDate case publisher case isFinished case finishedDate @@ -56,8 +56,10 @@ extension Game : Encodable { try container.encode(notes ?? "", forKey: .notes) try container.encode(isDigital, forKey: .isDigital) try container.encode(lentTo ?? "", forKey: .lentTo) - try container.encode(pickupOrReleaseDate.formattedInTimeZone(), forKey: .pickupOrReleaseDate) - try container.encode(isPickupDate, forKey: .isPickupDate) + try container.encode(releaseDate.formattedInTimeZone(), forKey: .releaseDate) + if let pickupDate = pickupDate { + try container.encode(pickupDate.formattedInTimeZone(), forKey: .pickupDate) + } try container.encode(pickupDescription ?? "", forKey: .pickupDescription) try container.encode(publisher ?? "", forKey: .publisher) try container.encode(isFinished, forKey: .isFinished) diff --git a/Zockerhoehle/CDModel/Game+CoreDataProperties.swift b/Zockerhoehle/CDModel/Game+CoreDataProperties.swift index bb86774..c4b3dfa 100644 --- a/Zockerhoehle/CDModel/Game+CoreDataProperties.swift +++ b/Zockerhoehle/CDModel/Game+CoreDataProperties.swift @@ -18,8 +18,8 @@ extension Game { } @NSManaged public var circumstances: String? - @NSManaged public var isPickupDate : Bool - @NSManaged public var pickupOrReleaseDate: Date + @NSManaged public var releaseDate : Date + @NSManaged public var pickupDate: Date? @NSManaged public var pickupDescription : String? @NSManaged public var inWishlist: Bool @NSManaged public var isDigital: Bool diff --git a/Zockerhoehle/Utils/LibraryImport.swift b/Zockerhoehle/Utils/LibraryImport.swift index 2febf70..82289fc 100644 --- a/Zockerhoehle/Utils/LibraryImport.swift +++ b/Zockerhoehle/Utils/LibraryImport.swift @@ -92,13 +92,18 @@ class LibraryImport { cdGame.isDigital = game.isDigital cdGame.playtime_h = game.playtime_h ?? 0 cdGame.playtime_min = game.playtime_min ?? 0 - cdGame.isPickupDate = game.isPickupDate - if let date = Date.from(string: game.pickupOrReleaseDate) { - cdGame.pickupOrReleaseDate = date + if let pickupDate = game.pickupDate, let date = Date.from(string: pickupDate) { + cdGame.pickupDate = date + }else{ + print("Could not decode date '\(game.pickupDate)' for game '\(cdGame.name)'") + } + + if let date = Date.from(string: game.releaseDate) { + cdGame.releaseDate = date }else{ - print("Could not decode date '\(game.pickupOrReleaseDate)' for game '\(cdGame.name)'") + print("Could not decode date '\(game.releaseDate)' for game '\(cdGame.name)'") } cdConsole.addToGames(cdGame) @@ -220,8 +225,8 @@ struct BHLGame : Decodable { let isFinished : Bool let finishedDate : Date? let notes : String? - let pickupOrReleaseDate : String - let isPickupDate : Bool = false + let releaseDate : String + let pickupDate : String? let pickupDescription : String? let publisher : String? let console : UUID diff --git a/Zockerhoehle/Views/GameDetailView.swift b/Zockerhoehle/Views/GameDetailView.swift index 0086aae..7f43e07 100644 --- a/Zockerhoehle/Views/GameDetailView.swift +++ b/Zockerhoehle/Views/GameDetailView.swift @@ -68,7 +68,7 @@ struct GameView : View { LazyVGrid(columns: columns) { InfoItem(headline: "Gekauft") { - Text("\(game.pickupOrReleaseDate.formattedInTimeZone(dateFormat: Date.view_date_format))") + Text("\(game.releaseDate.formattedInTimeZone(dateFormat: Date.view_date_format))") .bold() } diff --git a/Zockerhoehle/Views/GameEditMode.swift b/Zockerhoehle/Views/GameEditMode.swift index bc9f8f4..3f674d4 100644 --- a/Zockerhoehle/Views/GameEditMode.swift +++ b/Zockerhoehle/Views/GameEditMode.swift @@ -181,10 +181,14 @@ struct GameEditMode : View { Section(header: Text("Details")) { DatePicker("In Sammlung seit", - selection: $game.pickupOrReleaseDate, + selection: $game.releaseDate, in: ...Date(), displayedComponents: [.date]) +// Toggle(isOn: $game.isPickupDate, label: { +// Text("An dem Tag gesammelt?") +// }) + HStack { Text("Anlass") TextEditor(text: pickupDscriptionBinding).frame(height: 100) diff --git a/Zockerhoehle/Views/GamePickupsView.swift b/Zockerhoehle/Views/GamePickupsView.swift index 8509205..ee9a5da 100644 --- a/Zockerhoehle/Views/GamePickupsView.swift +++ b/Zockerhoehle/Views/GamePickupsView.swift @@ -16,7 +16,7 @@ struct GamePickupsView: View { init() { let gamesFR = NSFetchRequest(entityName: "Game") - gamesFR.sortDescriptors = [NSSortDescriptor(key: "pickupOrReleaseDate", ascending: false), NSSortDescriptor(key: "name", ascending: true)] + gamesFR.sortDescriptors = [NSSortDescriptor(key: "releaseDate", ascending: false), NSSortDescriptor(key: "name", ascending: true)] gamesFR.fetchLimit = 50; _games = FetchRequest(fetchRequest: gamesFR) } diff --git a/Zockerhoehle/Views/Overview.swift b/Zockerhoehle/Views/Overview.swift index 2a3293f..25af092 100644 --- a/Zockerhoehle/Views/Overview.swift +++ b/Zockerhoehle/Views/Overview.swift @@ -54,7 +54,7 @@ struct EmptyCategory : View { struct Overview: View { @Environment(\.managedObjectContext) private var viewContext - @FetchRequest(entity: Game.entity(), sortDescriptors: [NSSortDescriptor(key: "pickupOrReleaseDate", ascending: false), NSSortDescriptor(key: "name", ascending: true)]) + @FetchRequest(entity: Game.entity(), sortDescriptors: [NSSortDescriptor(key: "releaseDate", ascending: false), NSSortDescriptor(key: "name", ascending: true)]) var games: FetchedResults @FetchRequest(entity: Game.entity(), sortDescriptors: [NSSortDescriptor(key: "finishedDate", ascending: false), NSSortDescriptor(key: "name", ascending: true)]) diff --git a/Zockerhoehle/Zockerhoehle.xcdatamodeld/Zockerhoehle.xcdatamodel/contents b/Zockerhoehle/Zockerhoehle.xcdatamodeld/Zockerhoehle.xcdatamodel/contents index d57020c..ac1fa90 100644 --- a/Zockerhoehle/Zockerhoehle.xcdatamodeld/Zockerhoehle.xcdatamodel/contents +++ b/Zockerhoehle/Zockerhoehle.xcdatamodeld/Zockerhoehle.xcdatamodel/contents @@ -27,15 +27,15 @@ - + - +