From 451a50800e5c81f391f2c77ee3e5d6c5f362ec3c Mon Sep 17 00:00:00 2001 From: Isaac Iniongun Date: Fri, 29 Sep 2023 15:36:24 +0100 Subject: [PATCH 1/3] remove redundant NoteVerse model. --- TivBible/Extensions/Constants.swift | 2 +- TivBible/Features/Books/BooksViewModel.swift | 2 +- TivBible/Features/Hymns/HymnsViewModel.swift | 2 +- .../Misc/Lists/MiscListViewModel.swift | 2 +- TivBible/Features/Notes/NotesViewModel.swift | 3 +- .../Features/Reader/ReaderViewModel.swift | 9 +- .../Reader/Views/VerseTapActionsView.swift | 2 +- .../Features/Search/SearchViewModel.swift | 2 +- TivBible/Features/Setup/SetupViewModel.swift | 2 +- TivBible/Models/Note.swift | 7 +- TivBible/Models/NoteVerse.swift | 168 +++++++++--------- TivBible/Models/Verse.swift | 17 +- 12 files changed, 100 insertions(+), 118 deletions(-) diff --git a/TivBible/Extensions/Constants.swift b/TivBible/Extensions/Constants.swift index 489cd36..9ef9e3e 100644 --- a/TivBible/Extensions/Constants.swift +++ b/TivBible/Extensions/Constants.swift @@ -10,7 +10,7 @@ import SwiftData import DeviceKit enum Constants { - static let dataModels: [any PersistentModel.Type] = [Book.self, Chapter.self, Verse.self, Note.self, NoteVerse.self, Hymn.self] + static let dataModels: [any PersistentModel.Type] = [Book.self, Chapter.self, Verse.self, Note.self, Hymn.self] enum FontSize { static let max: Double = currentDevice.isPhone ? 20 : 28 diff --git a/TivBible/Features/Books/BooksViewModel.swift b/TivBible/Features/Books/BooksViewModel.swift index 7f65381..3f7f12a 100644 --- a/TivBible/Features/Books/BooksViewModel.swift +++ b/TivBible/Features/Books/BooksViewModel.swift @@ -12,7 +12,7 @@ import SwiftUI @Observable final class BooksViewModel { private var preferenceStore = PreferenceStore() - private let modelContainer = try! ModelContainer(for: Book.self, Chapter.self, Verse.self, Note.self, NoteVerse.self, Hymn.self) + private let modelContainer = try! ModelContainer(for: Book.self, Chapter.self, Verse.self, Note.self, Hymn.self) var books = [Book]() var searchText: String = "" diff --git a/TivBible/Features/Hymns/HymnsViewModel.swift b/TivBible/Features/Hymns/HymnsViewModel.swift index 30a1747..b914d7d 100644 --- a/TivBible/Features/Hymns/HymnsViewModel.swift +++ b/TivBible/Features/Hymns/HymnsViewModel.swift @@ -12,7 +12,7 @@ import SwiftData //@Observable @MainActor final class HymnsViewModel: ObservableObject { - private let modelContainer = try! ModelContainer(for: Book.self, Chapter.self, Verse.self, Note.self, NoteVerse.self, Hymn.self) + private let modelContainer = try! ModelContainer(for: Book.self, Chapter.self, Verse.self, Note.self, Hymn.self) //@MainActor private var context: ModelContext { diff --git a/TivBible/Features/Misc/Lists/MiscListViewModel.swift b/TivBible/Features/Misc/Lists/MiscListViewModel.swift index 28de7a7..abbe85a 100644 --- a/TivBible/Features/Misc/Lists/MiscListViewModel.swift +++ b/TivBible/Features/Misc/Lists/MiscListViewModel.swift @@ -15,7 +15,7 @@ final class MiscListViewModel { var toastMessage: ToastMessage = .empty var miscItem: MiscItem = .bookmarks - private let modelContainer = try! ModelContainer(for: Book.self, Chapter.self, Verse.self, Note.self, NoteVerse.self, Hymn.self) + private let modelContainer = try! ModelContainer(for: Book.self, Chapter.self, Verse.self, Note.self, Hymn.self) @MainActor private var context: ModelContext { diff --git a/TivBible/Features/Notes/NotesViewModel.swift b/TivBible/Features/Notes/NotesViewModel.swift index b62afce..004a839 100644 --- a/TivBible/Features/Notes/NotesViewModel.swift +++ b/TivBible/Features/Notes/NotesViewModel.swift @@ -10,9 +10,8 @@ import SwiftData @Observable final class NotesViewModel { - //var notes - private let modelContainer = try! ModelContainer(for: Book.self, Chapter.self, Verse.self, Note.self, NoteVerse.self, Hymn.self) + private let modelContainer = try! ModelContainer(for: Book.self, Chapter.self, Verse.self, Note.self, Hymn.self) @MainActor private var context: ModelContext { diff --git a/TivBible/Features/Reader/ReaderViewModel.swift b/TivBible/Features/Reader/ReaderViewModel.swift index e6f6c6d..d9c0f6e 100644 --- a/TivBible/Features/Reader/ReaderViewModel.swift +++ b/TivBible/Features/Reader/ReaderViewModel.swift @@ -27,7 +27,7 @@ final class ReaderViewModel { var errorMessage: String = "" private let preferenceStore = PreferenceStore() - private let modelContainer = try! ModelContainer(for: Book.self, Chapter.self, Verse.self, Note.self, NoteVerse.self, Hymn.self) + private let modelContainer = try! ModelContainer(for: Book.self, Chapter.self, Verse.self, Note.self, Hymn.self) @MainActor private var context: ModelContext { @@ -144,12 +144,9 @@ final class ReaderViewModel { @MainActor func saveNotes() { - let newNote = Note( - //verses: selectedVerses.noteVerses.sorted { $0.number < $1.number }, - comment: versesNotes - ) + let newNote = Note(comment: versesNotes) context.insert(newNote) - newNote.verses = selectedVerses.noteVerses.sorted { $0.number < $1.number } + newNote.verses = selectedVerses.sorted { $0.number < $1.number } versesNotes = "" notesTokens = [] toastMessage = "Success!" diff --git a/TivBible/Features/Reader/Views/VerseTapActionsView.swift b/TivBible/Features/Reader/Views/VerseTapActionsView.swift index f1f41c1..b0103d5 100644 --- a/TivBible/Features/Reader/Views/VerseTapActionsView.swift +++ b/TivBible/Features/Reader/Views/VerseTapActionsView.swift @@ -83,7 +83,7 @@ struct VerseTapActionsView: View { .frame(width: 23, height: 23) } .tint(.label) - .offset(x: -15, y: 15) + .offset(x: -15, y: 25) } } } diff --git a/TivBible/Features/Search/SearchViewModel.swift b/TivBible/Features/Search/SearchViewModel.swift index 4baf54c..4144be1 100644 --- a/TivBible/Features/Search/SearchViewModel.swift +++ b/TivBible/Features/Search/SearchViewModel.swift @@ -11,7 +11,7 @@ import SwiftData @Observable final class SearchViewModel { private let preferenceStore = PreferenceStore() - private let modelContainer = try! ModelContainer(for: Book.self, Chapter.self, Verse.self, Note.self, NoteVerse.self, Hymn.self) + private let modelContainer = try! ModelContainer(for: Book.self, Chapter.self, Verse.self, Note.self, Hymn.self) @MainActor private var context: ModelContext { diff --git a/TivBible/Features/Setup/SetupViewModel.swift b/TivBible/Features/Setup/SetupViewModel.swift index d6bb224..6cd5b95 100644 --- a/TivBible/Features/Setup/SetupViewModel.swift +++ b/TivBible/Features/Setup/SetupViewModel.swift @@ -13,7 +13,7 @@ final class SetupViewModel: ObservableObject { @Published var dbInitializationInProgress: Bool = false @Published private var preferenceStore = PreferenceStore() - private let modelContainer = try! ModelContainer(for: Book.self, Chapter.self, Verse.self, Note.self, NoteVerse.self, Hymn.self) + private let modelContainer = try! ModelContainer(for: Book.self, Chapter.self, Verse.self, Note.self, Hymn.self) private var context: ModelContext { modelContainer.mainContext } diff --git a/TivBible/Models/Note.swift b/TivBible/Models/Note.swift index 3b5a804..cefdff5 100644 --- a/TivBible/Models/Note.swift +++ b/TivBible/Models/Note.swift @@ -12,12 +12,13 @@ import SwiftData final class Note { @Attribute(.unique) var id: String var takenOn: Date - var verses: [NoteVerse] + var verses: [Verse] var comment: String - init(id: String = UUID().uuidString, + init( + id: String = UUID().uuidString, takenOn: Date = Date(), - verses: [NoteVerse] = [], + verses: [Verse] = [], comment: String ) { self.id = id diff --git a/TivBible/Models/NoteVerse.swift b/TivBible/Models/NoteVerse.swift index 2a8c65d..e190021 100644 --- a/TivBible/Models/NoteVerse.swift +++ b/TivBible/Models/NoteVerse.swift @@ -5,87 +5,87 @@ // Created by Isaac Iniongun on 29/06/2023. // -import Foundation -import SwiftData - -@Model -final class NoteVerse { - @Attribute(.unique) var id: String - var title: String - var text: String - var number: Int - var highlightColor: String - var highlightDate: Date? - var isBookmarked: Bool - var bookmarkDate: Date? - var chapter: Chapter? - - init(id: String = UUID().uuidString, - title: String, - text: String, - number: Int, - highlightColor: String = "", - highlightDate: Date? = nil, - isBookmarked: Bool = false, - chapter: Chapter? = nil, - bookmarkDate: Date? = nil - ) { - self.id = id - self.title = title - self.text = text - self.number = number - self.highlightColor = highlightColor - self.highlightDate = highlightDate - self.isBookmarked = isBookmarked - self.chapter = chapter - self.bookmarkDate = bookmarkDate - } - - init(verse: Verse) { - self.id = verse.id - self.title = verse.title - self.text = verse.text - self.number = verse.number - self.highlightColor = verse.highlightColor - self.highlightDate = verse.highlightDate - self.isBookmarked = verse.isBookmarked - self.chapter = verse.chapter - self.bookmarkDate = verse.bookmarkDate - } - -} - -extension Array where Element == NoteVerse { - var groups: [String] { - let numbers = sorted { $0.number < $1.number }.map { $0.number } - var left: Int? - var right: Int? - var groups = [String]() - - for index in (numbers.first ?? 0)...(numbers.last ?? 0) + 1 { - if numbers.contains(index) { - if left == nil { - left = index - } else { - right = index - } - } else { - guard let leftx = left else { continue } - - if let right = right { - groups.append("\(leftx)-\(right)") - } else { - groups.append("\(leftx)") - } - left = nil - right = nil - } - } - - return groups - } - - var shareableText: String { - sorted { $0.number < $1.number }.map { "v\($0.number). \($0.text)" }.joined(separator: "\n") - } -} +//import Foundation +//import SwiftData +// +//@Model +//final class NoteVerse { +// @Attribute(.unique) var id: String +// var title: String +// var text: String +// var number: Int +// var highlightColor: String +// var highlightDate: Date? +// var isBookmarked: Bool +// var bookmarkDate: Date? +// var chapter: Chapter? +// +// init(id: String = UUID().uuidString, +// title: String, +// text: String, +// number: Int, +// highlightColor: String = "", +// highlightDate: Date? = nil, +// isBookmarked: Bool = false, +// chapter: Chapter? = nil, +// bookmarkDate: Date? = nil +// ) { +// self.id = id +// self.title = title +// self.text = text +// self.number = number +// self.highlightColor = highlightColor +// self.highlightDate = highlightDate +// self.isBookmarked = isBookmarked +// self.chapter = chapter +// self.bookmarkDate = bookmarkDate +// } +// +// init(verse: Verse) { +// self.id = verse.id +// self.title = verse.title +// self.text = verse.text +// self.number = verse.number +// self.highlightColor = verse.highlightColor +// self.highlightDate = verse.highlightDate +// self.isBookmarked = verse.isBookmarked +// self.chapter = verse.chapter +// self.bookmarkDate = verse.bookmarkDate +// } +// +//} +// +//extension Array where Element == NoteVerse { +// var groups: [String] { +// let numbers = sorted { $0.number < $1.number }.map { $0.number } +// var left: Int? +// var right: Int? +// var groups = [String]() +// +// for index in (numbers.first ?? 0)...(numbers.last ?? 0) + 1 { +// if numbers.contains(index) { +// if left == nil { +// left = index +// } else { +// right = index +// } +// } else { +// guard let leftx = left else { continue } +// +// if let right = right { +// groups.append("\(leftx)-\(right)") +// } else { +// groups.append("\(leftx)") +// } +// left = nil +// right = nil +// } +// } +// +// return groups +// } +// +// var shareableText: String { +// sorted { $0.number < $1.number }.map { "v\($0.number). \($0.text)" }.joined(separator: "\n") +// } +//} diff --git a/TivBible/Models/Verse.swift b/TivBible/Models/Verse.swift index 9ec9a78..3ddcaf1 100644 --- a/TivBible/Models/Verse.swift +++ b/TivBible/Models/Verse.swift @@ -45,18 +45,6 @@ final class Verse { self.bookmarkDate = bookmarkDate } - init(verse: NoteVerse) { - self.id = verse.id - self.title = verse.title - self.text = verse.text - self.number = verse.number - self.highlightColor = verse.highlightColor - self.highlightDate = verse.highlightDate - self.isBookmarked = verse.isBookmarked - self.chapter = verse.chapter - self.bookmarkDate = verse.bookmarkDate - } - func attrText(fontSize: Double, fontName: String) -> AttributedString { var numberDotAttrContainer = AttributeContainer() numberDotAttrContainer.baselineOffset = [13, 14, 15].contains(fontSize) ? 3 : 5 @@ -139,10 +127,7 @@ extension Array where Element == Verse { } var shareableText: String { - map { "v\($0.number). \($0.text)" }.joined(separator: "\n") + sorted { $0.number < $1.number }.map { "v\($0.number). \($0.text)" }.joined(separator: "\n") } - var noteVerses: [NoteVerse] { - map(NoteVerse.init) - } } From 2855d237a3ccc0fb1a81880ac636c4dd91078dd6 Mon Sep 17 00:00:00 2001 From: Isaac Iniongun Date: Wed, 25 Oct 2023 11:12:50 +0100 Subject: [PATCH 2/3] update build number and bundle id --- TivBible.xcodeproj/project.pbxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/TivBible.xcodeproj/project.pbxproj b/TivBible.xcodeproj/project.pbxproj index 48e69e1..0ad2cea 100644 --- a/TivBible.xcodeproj/project.pbxproj +++ b/TivBible.xcodeproj/project.pbxproj @@ -1257,8 +1257,8 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.iniongungroup.mobile.ios.TivBible; + MARKETING_VERSION = 2.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.iniongungroup.mobile.ios.Tiv-Bible"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; @@ -1287,8 +1287,8 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = com.iniongungroup.mobile.ios.TivBible; + MARKETING_VERSION = 2.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.iniongungroup.mobile.ios.Tiv-Bible"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; From d60fbab7234b456ff00343f6eb340f39b84d6469 Mon Sep 17 00:00:00 2001 From: Isaac Iniongun Date: Thu, 9 Nov 2023 18:36:57 +0100 Subject: [PATCH 3/3] remove NoteVerse --- TivBible.xcodeproj/project.pbxproj | 4 -- TivBible/Models/NoteVerse.swift | 91 ------------------------------ 2 files changed, 95 deletions(-) delete mode 100644 TivBible/Models/NoteVerse.swift diff --git a/TivBible.xcodeproj/project.pbxproj b/TivBible.xcodeproj/project.pbxproj index 0ad2cea..78fb9a9 100644 --- a/TivBible.xcodeproj/project.pbxproj +++ b/TivBible.xcodeproj/project.pbxproj @@ -61,7 +61,6 @@ 5542302B2A4C36E4001EC310 /* NotesViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5542302A2A4C36E4001EC310 /* NotesViewModel.swift */; }; 5542302D2A4C39DD001EC310 /* NoteView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5542302C2A4C39DD001EC310 /* NoteView.swift */; }; 5542302F2A4D5332001EC310 /* Date+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5542302E2A4D5332001EC310 /* Date+.swift */; }; - 554230312A4D575B001EC310 /* NoteVerse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 554230302A4D575B001EC310 /* NoteVerse.swift */; }; 55482F022A50B42B009C3370 /* ApostlesCreedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55482F012A50B42B009C3370 /* ApostlesCreedView.swift */; }; 55482F042A50BD96009C3370 /* CommandmentsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55482F032A50BD96009C3370 /* CommandmentsView.swift */; }; 55482F062A50C127009C3370 /* TheLordsPrayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55482F052A50C127009C3370 /* TheLordsPrayerView.swift */; }; @@ -224,7 +223,6 @@ 5542302A2A4C36E4001EC310 /* NotesViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotesViewModel.swift; sourceTree = ""; }; 5542302C2A4C39DD001EC310 /* NoteView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteView.swift; sourceTree = ""; }; 5542302E2A4D5332001EC310 /* Date+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Date+.swift"; sourceTree = ""; }; - 554230302A4D575B001EC310 /* NoteVerse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoteVerse.swift; sourceTree = ""; }; 55482F012A50B42B009C3370 /* ApostlesCreedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApostlesCreedView.swift; sourceTree = ""; }; 55482F032A50BD96009C3370 /* CommandmentsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommandmentsView.swift; sourceTree = ""; }; 55482F052A50C127009C3370 /* TheLordsPrayerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TheLordsPrayerView.swift; sourceTree = ""; }; @@ -424,7 +422,6 @@ 556D8D732A44A29E00211481 /* BookSortType.swift */, 5595A5052A4BEEBA00270A5B /* TabItem.swift */, 5595A5072A4C020100270A5B /* ToastMessage.swift */, - 554230302A4D575B001EC310 /* NoteVerse.swift */, 55482F142A518473009C3370 /* HymnData.swift */, 55482F162A5185B3009C3370 /* Hymn.swift */, ); @@ -1074,7 +1071,6 @@ 555576D22A38DC2200DF230E /* MainContentScreen.swift in Sources */, 55500E572A45D8D60074BC67 /* SearchScreen.swift in Sources */, 5595A5082A4C020100270A5B /* ToastMessage.swift in Sources */, - 554230312A4D575B001EC310 /* NoteVerse.swift in Sources */, 552BB2792A41C9C900BB3A86 /* FontStyleButton.swift in Sources */, 5503ADC22A37C8F0006E6C79 /* DependencyContainer.swift in Sources */, 552BB27B2A41CC1500BB3A86 /* StylesView.swift in Sources */, diff --git a/TivBible/Models/NoteVerse.swift b/TivBible/Models/NoteVerse.swift deleted file mode 100644 index e190021..0000000 --- a/TivBible/Models/NoteVerse.swift +++ /dev/null @@ -1,91 +0,0 @@ -// -// NoteVerse.swift -// TivBible -// -// Created by Isaac Iniongun on 29/06/2023. -// - -//import Foundation -//import SwiftData -// -//@Model -//final class NoteVerse { -// @Attribute(.unique) var id: String -// var title: String -// var text: String -// var number: Int -// var highlightColor: String -// var highlightDate: Date? -// var isBookmarked: Bool -// var bookmarkDate: Date? -// var chapter: Chapter? -// -// init(id: String = UUID().uuidString, -// title: String, -// text: String, -// number: Int, -// highlightColor: String = "", -// highlightDate: Date? = nil, -// isBookmarked: Bool = false, -// chapter: Chapter? = nil, -// bookmarkDate: Date? = nil -// ) { -// self.id = id -// self.title = title -// self.text = text -// self.number = number -// self.highlightColor = highlightColor -// self.highlightDate = highlightDate -// self.isBookmarked = isBookmarked -// self.chapter = chapter -// self.bookmarkDate = bookmarkDate -// } -// -// init(verse: Verse) { -// self.id = verse.id -// self.title = verse.title -// self.text = verse.text -// self.number = verse.number -// self.highlightColor = verse.highlightColor -// self.highlightDate = verse.highlightDate -// self.isBookmarked = verse.isBookmarked -// self.chapter = verse.chapter -// self.bookmarkDate = verse.bookmarkDate -// } -// -//} -// -//extension Array where Element == NoteVerse { -// var groups: [String] { -// let numbers = sorted { $0.number < $1.number }.map { $0.number } -// var left: Int? -// var right: Int? -// var groups = [String]() -// -// for index in (numbers.first ?? 0)...(numbers.last ?? 0) + 1 { -// if numbers.contains(index) { -// if left == nil { -// left = index -// } else { -// right = index -// } -// } else { -// guard let leftx = left else { continue } -// -// if let right = right { -// groups.append("\(leftx)-\(right)") -// } else { -// groups.append("\(leftx)") -// } -// left = nil -// right = nil -// } -// } -// -// return groups -// } -// -// var shareableText: String { -// sorted { $0.number < $1.number }.map { "v\($0.number). \($0.text)" }.joined(separator: "\n") -// } -//}