diff --git a/WordAX.xcodeproj/project.pbxproj b/WordAX.xcodeproj/project.pbxproj index a6ef9f8..f1b1448 100644 --- a/WordAX.xcodeproj/project.pbxproj +++ b/WordAX.xcodeproj/project.pbxproj @@ -10,7 +10,7 @@ 6C4A87D22BE25D260074E0A9 /* Deck+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C4A87D02BE25D260074E0A9 /* Deck+CoreDataClass.swift */; }; 6C4A87D32BE25D260074E0A9 /* Deck+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C4A87D12BE25D260074E0A9 /* Deck+CoreDataProperties.swift */; }; 6C8184FE2B88C9580033CF46 /* WordAX.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C8184FD2B88C9580033CF46 /* WordAX.swift */; }; - 6C8185002B88C9660033CF46 /* WordAXModelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C8184FF2B88C9660033CF46 /* WordAXModelView.swift */; }; + 6C8185002B88C9660033CF46 /* Miscellaneous.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C8184FF2B88C9660033CF46 /* Miscellaneous.swift */; }; 6C8185022B88C9FB0033CF46 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C8185012B88C9FB0033CF46 /* SettingsView.swift */; }; 6C8185042B88CA210033CF46 /* AnkiView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C8185032B88CA210033CF46 /* AnkiView.swift */; }; 6C8185062B8A537F0033CF46 /* FlashCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C8185052B8A537F0033CF46 /* FlashCardView.swift */; }; @@ -33,7 +33,7 @@ 6C4A87D02BE25D260074E0A9 /* Deck+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Deck+CoreDataClass.swift"; sourceTree = ""; }; 6C4A87D12BE25D260074E0A9 /* Deck+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Deck+CoreDataProperties.swift"; sourceTree = ""; }; 6C8184FD2B88C9580033CF46 /* WordAX.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WordAX.swift; sourceTree = ""; }; - 6C8184FF2B88C9660033CF46 /* WordAXModelView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WordAXModelView.swift; sourceTree = ""; }; + 6C8184FF2B88C9660033CF46 /* Miscellaneous.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Miscellaneous.swift; sourceTree = ""; }; 6C8185012B88C9FB0033CF46 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; 6C8185032B88CA210033CF46 /* AnkiView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnkiView.swift; sourceTree = ""; }; 6C8185052B8A537F0033CF46 /* FlashCardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FlashCardView.swift; sourceTree = ""; }; @@ -138,7 +138,7 @@ 6CF439512B83541D004C3543 /* WordAXApp.swift */, 6C4632342BC2D99E003ED0E9 /* Views */, 6C8184FD2B88C9580033CF46 /* WordAX.swift */, - 6C8184FF2B88C9660033CF46 /* WordAXModelView.swift */, + 6C8184FF2B88C9660033CF46 /* Miscellaneous.swift */, 6CF439552B83541E004C3543 /* Assets.xcassets */, 6CF439572B83541E004C3543 /* Preview Content */, ); @@ -230,7 +230,7 @@ 6CEF7FA32BC88F6000E205F6 /* Flashcard+CoreDataProperties.swift in Sources */, 6C81850A2B8BA5740033CF46 /* FlashCardListView.swift in Sources */, 6CEF7FA62BC96F2B00E205F6 /* ButtonHStackView.swift in Sources */, - 6C8185002B88C9660033CF46 /* WordAXModelView.swift in Sources */, + 6C8185002B88C9660033CF46 /* Miscellaneous.swift in Sources */, 6C8185042B88CA210033CF46 /* AnkiView.swift in Sources */, 6CEF7F7D2BC457E600E205F6 /* DataController.swift in Sources */, 6CF439522B83541D004C3543 /* WordAXApp.swift in Sources */, diff --git a/WordAX/WordAXModelView.swift b/WordAX/Miscellaneous.swift similarity index 81% rename from WordAX/WordAXModelView.swift rename to WordAX/Miscellaneous.swift index 60cbf92..ee12b31 100644 --- a/WordAX/WordAXModelView.swift +++ b/WordAX/Miscellaneous.swift @@ -1,5 +1,5 @@ // -// WordAXModelView.swift +// Miscellaneous.swift // WordAX // // Created by Oliver Hnát on 23.02.2024. @@ -8,28 +8,14 @@ import Foundation import SwiftUI -class WordAXModelView: ObservableObject { +class Miscellaneous { typealias SpacedRepetitionMilestoneEnum = Flashcard.SpacedRepetitionMilestoneEnum - let settings: Settings - - init() { + static var dateFormatter: DateFormatter { let hourString = DateFormatter.dateFormat(fromTemplate: "j", options: 0, locale: NSLocale.current) let dateFormatter = DateFormatter() dateFormatter.dateFormat = "dd/MM/YYYY \(hourString?.contains("a") ?? true ? "hh" : "HH"):mm\(hourString?.contains("a") ?? true ? " a" : "")" - self.settings = Settings(dateFormatter: dateFormatter) - } - - struct Settings { - var dateFormatter: DateFormatter - } - - public func getFlashcards(moc: DataController) -> [Flashcard] { - moc.getAllFlashcards() - } - - public func getDateFormatter() -> DateFormatter { - self.settings.dateFormatter + return dateFormatter } } diff --git a/WordAX/Model/DataController.swift b/WordAX/Model/DataController.swift index ed985bf..416dcde 100644 --- a/WordAX/Model/DataController.swift +++ b/WordAX/Model/DataController.swift @@ -10,7 +10,6 @@ import CoreData class DataController: ObservableObject { let container = NSPersistentContainer(name: "WordAXCD") -// static let shared = DataController() typealias SpacedRepetitionMilestoneEnum = Flashcard.SpacedRepetitionMilestoneEnum var viewContext: NSManagedObjectContext { @@ -57,20 +56,6 @@ class DataController: ObservableObject { } } } - - - public func getAllFlashcards(predicate: NSPredicate? = nil) -> [Flashcard]{ - let request = NSFetchRequest(entityName: "Flashcard") - if predicate != nil { - request.predicate = predicate - } - - do { - return try viewContext.fetch(request) - } catch { - return [] - } - } } diff --git a/WordAX/Model/Flashcard/Flashcard+CoreDataProperties.swift b/WordAX/Model/Flashcard/Flashcard+CoreDataProperties.swift index d5f4150..33d0fe1 100644 --- a/WordAX/Model/Flashcard/Flashcard+CoreDataProperties.swift +++ b/WordAX/Model/Flashcard/Flashcard+CoreDataProperties.swift @@ -18,13 +18,15 @@ extension Flashcard { @NSManaged public var dateAdded: Date? @NSManaged public var desc: String? + @NSManaged public var favorite: Bool @NSManaged public var id: UUID? @NSManaged public var lastSeenOn: Date? @NSManaged public var name: String? @NSManaged public var nextSpacedRepetitionMilestone: Int64 @NSManaged public var shown: Bool @NSManaged public var shownCount: Int64 - @NSManaged public var favorite: Bool + @NSManaged public var deck: Deck? + } extension Flashcard : Identifiable { diff --git a/WordAX/Model/WordAXCD.xcdatamodeld/WordAX0.0.4.xcdatamodel/contents b/WordAX/Model/WordAXCD.xcdatamodeld/WordAX0.0.4.xcdatamodel/contents index 3ddf8e8..fba7178 100644 --- a/WordAX/Model/WordAXCD.xcdatamodeld/WordAX0.0.4.xcdatamodel/contents +++ b/WordAX/Model/WordAXCD.xcdatamodeld/WordAX0.0.4.xcdatamodel/contents @@ -3,7 +3,7 @@ - + @@ -15,5 +15,6 @@ + \ No newline at end of file diff --git a/WordAX/Views/FlashCardListRowView.swift b/WordAX/Views/FlashCardListRowView.swift index a34b881..024528a 100644 --- a/WordAX/Views/FlashCardListRowView.swift +++ b/WordAX/Views/FlashCardListRowView.swift @@ -54,13 +54,10 @@ struct FlashCardListRowView: View { let flashcard = try? DataController.preview.viewContext.fetch(Flashcard.fetchRequest()).first return Group { FlashCardListRowView(flashcard: flashcard!) - .environmentObject(WordAXModelView()) .environment(\.managedObjectContext, DataController.preview.container.viewContext) FlashCardListRowView(flashcard: flashcard!) - .environmentObject(WordAXModelView()) .environment(\.managedObjectContext, DataController.preview.container.viewContext) FlashCardListRowView(flashcard: flashcard!) - .environmentObject(WordAXModelView()) .environment(\.managedObjectContext, DataController.preview.container.viewContext) } } diff --git a/WordAX/Views/FlashCardListView.swift b/WordAX/Views/FlashCardListView.swift index 58d9bf1..84b0766 100644 --- a/WordAX/Views/FlashCardListView.swift +++ b/WordAX/Views/FlashCardListView.swift @@ -67,6 +67,5 @@ struct FlashCardListView: View { #Preview { FlashCardListView() - .environmentObject(WordAXModelView()) .environment(\.managedObjectContext, DataController.preview.container.viewContext) } diff --git a/WordAX/Views/FlashCardView.swift b/WordAX/Views/FlashCardView.swift index 0a772d2..45439b6 100644 --- a/WordAX/Views/FlashCardView.swift +++ b/WordAX/Views/FlashCardView.swift @@ -12,7 +12,6 @@ import CoreData struct FlashCardView: View { var flashcard: Flashcard @Binding var showDescription: Bool - @EnvironmentObject var model: WordAXModelView @Environment(\.colorScheme) var colorScheme @@ -23,7 +22,7 @@ struct FlashCardView: View { VStack { // TODO: Figure out if this and create/edit menu could be more similar? if flashcard.lastSeenOn != nil { - Text("Last seen: " + model.getDateFormatter().string(from: flashcard.lastSeenOn!)) + Text("Last seen: " + Miscellaneous.dateFormatter.string(from: flashcard.lastSeenOn!)) .font(.subheadline) } if showDescription { @@ -56,6 +55,5 @@ struct FlashCardView: View { @State var showDescription = true let flashcard = try? DataController.preview.viewContext.fetch(Flashcard.fetchRequest()).first return FlashCardView(flashcard: flashcard!, showDescription: $showDescription) - .environmentObject(WordAXModelView()) .environment(\.managedObjectContext, DataController.preview.container.viewContext) } diff --git a/WordAX/Views/MainView.swift b/WordAX/Views/MainView.swift index d4dea6d..1a74458 100644 --- a/WordAX/Views/MainView.swift +++ b/WordAX/Views/MainView.swift @@ -44,6 +44,5 @@ struct MainView: View { #Preview { MainView() - .environmentObject(WordAXModelView()) .environment(\.managedObjectContext, DataController.preview.container.viewContext) } diff --git a/WordAX/Views/NextRepetitionButtonView.swift b/WordAX/Views/NextRepetitionButtonView.swift index 2999adb..b9d9082 100644 --- a/WordAX/Views/NextRepetitionButtonView.swift +++ b/WordAX/Views/NextRepetitionButtonView.swift @@ -64,6 +64,5 @@ extension ShapeStyle where Self == Color { // @State var showDescription = false // let flashcard = try? DataController.preview.viewContext.fetch(Flashcard.fetchRequest()).first // return NextRepetitionButtonView(buttonText: "Excellent", nextMilestone: Flashcard.SpacedRepetitionMilestoneEnum.OneDay, showDescription: $showDescription) -// .environmentObject(WordAXModelView()) // .environment(\.managedObjectContext, DataController.preview.container.viewContext) //} diff --git a/WordAX/Views/SettingsView.swift b/WordAX/Views/SettingsView.swift index c624c26..f8e7324 100644 --- a/WordAX/Views/SettingsView.swift +++ b/WordAX/Views/SettingsView.swift @@ -43,6 +43,5 @@ extension UTType { #Preview { SettingsView() - .environmentObject(WordAXModelView()) .environment(\.managedObjectContext, DataController.preview.container.viewContext) } diff --git a/WordAX/WordAXApp.swift b/WordAX/WordAXApp.swift index 1afe2f5..badd2ff 100644 --- a/WordAX/WordAXApp.swift +++ b/WordAX/WordAXApp.swift @@ -9,12 +9,10 @@ import SwiftUI @main struct WordAXApp: App { - @StateObject private var model = WordAXModelView() @StateObject private var dataControler = DataController() var body: some Scene { WindowGroup { MainView() - .environmentObject(model) .environment(\.managedObjectContext, dataControler.container.viewContext) } }