Skip to content

Commit 0ef04dc

Browse files
authored
Merge pull request #1111 from kiwix/1104-update-defaults-dependency
Update defaults dependency to 8.2
2 parents 4de2be6 + 1cc64db commit 0ef04dc

File tree

10 files changed

+38
-54
lines changed

10 files changed

+38
-54
lines changed

App/CompactViewController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ final class CompactViewController: UIHostingController<AnyView>, UISearchControl
3737

3838
init(navigation: NavigationViewModel) {
3939
self.navigation = navigation
40-
searchViewModel = SearchViewModel()
40+
searchViewModel = SearchViewModel.shared
4141
let searchResult = SearchResults().environmentObject(searchViewModel)
4242
searchController = UISearchController(searchResultsController: UIHostingController(rootView: searchResult))
4343
super.init(rootView: AnyView(CompactView()))

Model/Defaulting.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public protocol Defaulting: NSObjectProtocol {
2121
}
2222

2323
final class UDefaults: NSObject, Defaulting {
24-
subscript<Value>(key: Defaults.Key<Value>) -> Value where Value: DefaultsSerializable {
24+
subscript<Value>(key: Defaults.Key<Value>) -> Value {
2525
get {
2626
Defaults[key]
2727
}

SwiftUI/Model/DefaultKeys.swift

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -52,38 +52,3 @@ extension Defaults.Keys {
5252
static let windowURLs = Key<[URL]>("windowURLs", default: [])
5353
#endif
5454
}
55-
56-
extension Defaults.Serializable where Self: Codable {
57-
public static var bridge: Defaults.TopLevelCodableBridge<Self> { Defaults.TopLevelCodableBridge() }
58-
}
59-
60-
extension Defaults.Serializable where Self: Codable & NSSecureCoding {
61-
public static var bridge: Defaults.CodableNSSecureCodingBridge<Self> { Defaults.CodableNSSecureCodingBridge() }
62-
}
63-
64-
extension Defaults.Serializable where Self: Codable & NSSecureCoding & Defaults.PreferNSSecureCoding {
65-
public static var bridge: Defaults.NSSecureCodingBridge<Self> { Defaults.NSSecureCodingBridge() }
66-
}
67-
68-
extension Defaults.Serializable where Self: Codable & RawRepresentable {
69-
public static var bridge: Defaults.RawRepresentableCodableBridge<Self> { Defaults.RawRepresentableCodableBridge() }
70-
}
71-
72-
extension Defaults.Serializable where Self: Codable & RawRepresentable & Defaults.PreferRawRepresentable {
73-
public static var bridge: Defaults.RawRepresentableBridge<Self> { Defaults.RawRepresentableBridge() }
74-
}
75-
76-
extension Defaults.Serializable where Self: RawRepresentable {
77-
public static var bridge: Defaults.RawRepresentableBridge<Self> { Defaults.RawRepresentableBridge() }
78-
}
79-
extension Defaults.Serializable where Self: NSSecureCoding {
80-
public static var bridge: Defaults.NSSecureCodingBridge<Self> { Defaults.NSSecureCodingBridge() }
81-
}
82-
83-
extension Defaults.CollectionSerializable where Element: Defaults.Serializable {
84-
public static var bridge: Defaults.CollectionBridge<Self> { Defaults.CollectionBridge() }
85-
}
86-
87-
extension Defaults.SetAlgebraSerializable where Element: Defaults.Serializable & Hashable {
88-
public static var bridge: Defaults.SetAlgebraBridge<Self> { Defaults.SetAlgebraBridge() }
89-
}

Tests/TestDefaults.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import Defaults
1919

2020
final class TestDefaults: NSObject, Defaulting {
2121

22-
var dict: [Defaults.AnyKey: any DefaultsSerializable] = [:]
22+
var dict: [Defaults._AnyKey: AnyObject] = [:]
2323

2424
func setup() {
2525
self[.categoriesToLanguages] = [:]
@@ -29,13 +29,13 @@ final class TestDefaults: NSObject, Defaulting {
2929
self[.libraryLanguageCodes] = Set<String>()
3030
}
3131

32-
subscript<Value>(key: Defaults.Key<Value>) -> Value where Value: DefaultsSerializable {
32+
subscript<Value>(key: Defaults.Key<Value>) -> Value {
3333
get {
3434
// swiftlint:disable:next force_cast
3535
dict[key] as! Value
3636
}
3737
set {
38-
dict[key] = newValue
38+
dict[key] = newValue as AnyObject
3939
}
4040
}
4141
}

ViewModel/BrowserViewModel.swift

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -259,17 +259,33 @@ final class BrowserViewModel: NSObject, ObservableObject,
259259

260260
@MainActor
261261
func updateLastOpened() {
262-
guard let tab = try? Database.shared.viewContext.existingObject(with: tabID) as? Tab else { return }
263-
tab.lastOpened = Date()
262+
let currentTabID = tabID
263+
Task {
264+
Database.shared.performBackgroundTask { context in
265+
guard let tab = try? context.existingObject(with: currentTabID) as? Tab else {
266+
return
267+
}
268+
tab.lastOpened = Date()
269+
try? context.save()
270+
}
271+
}
264272
}
265273

266274
@MainActor
267275
func persistState() {
268-
guard let tab = try? Database.shared.viewContext.existingObject(with: tabID) as? Tab else {
269-
return
276+
let webData = webView.interactionState as? Data
277+
let currentTabID = tabID
278+
Task {
279+
Database.shared.performBackgroundTask { context in
280+
guard let tab = try? context.existingObject(with: currentTabID) as? Tab else {
281+
return
282+
}
283+
tab.interactionState = webData
284+
if context.hasChanges {
285+
try? context.save()
286+
}
287+
}
270288
}
271-
tab.interactionState = webView.interactionState as? Data
272-
try? Database.shared.viewContext.save()
273289
}
274290

275291
// MARK: - Content Loading

ViewModel/NavigationViewModel.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ final class NavigationViewModel: ObservableObject {
9797
/// Delete a single tab, and select another tab
9898
/// - Parameter tabID: ID of the tab to delete
9999
func deleteTab(tabID: NSManagedObjectID) {
100+
let currentItemValue = currentItem
100101
Database.shared.performBackgroundTask { context in
101102
let sortByCreation = [NSSortDescriptor(key: "created", ascending: false)]
102103
guard let tabs: [Tab] = try? context.fetch(Tab.fetchRequest(predicate: nil,
@@ -105,7 +106,7 @@ final class NavigationViewModel: ObservableObject {
105106
return
106107
}
107108
let newlySelectedTab: Tab?
108-
if case let .tab(selectedTabID) = self.currentItem, selectedTabID == tabID {
109+
if case let .tab(selectedTabID) = currentItemValue, selectedTabID == tabID {
109110
// select a closeBy tab if the currently selected tab is to be deleted
110111
newlySelectedTab = tabs.closeBy(toWhere: { $0.objectID == tabID }) ?? Self.makeTab(context: context)
111112
} else if tabs.count == 1 {

ViewModel/SearchViewModel.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,15 @@ final class SearchViewModel: NSObject, ObservableObject, NSFetchedResultsControl
2323
@Published private(set) var zimFiles: [UUID: ZimFile] // ID of zim files that are included in search
2424
@Published private(set) var inProgress = false
2525
@Published private(set) var results = [SearchResult]()
26+
27+
static let shared = SearchViewModel()
2628

2729
private let fetchedResultsController: NSFetchedResultsController<ZimFile>
2830
private var searchSubscriber: AnyCancellable?
2931
@ZimActor
3032
private let queue = OperationQueue()
3133

32-
override init() {
34+
override private init() {
3335
// initialize fetched results controller
3436
let predicate = NSPredicate(format: "includedInSearch == true AND fileURLBookmark != nil")
3537
fetchedResultsController = NSFetchedResultsController(
@@ -39,7 +41,7 @@ final class SearchViewModel: NSObject, ObservableObject, NSFetchedResultsControl
3941
cacheName: nil
4042
)
4143

42-
// initilze zim file IDs
44+
// initialize zim file IDs
4345
try? fetchedResultsController.performFetch()
4446
zimFiles = fetchedResultsController.fetchedObjects?.reduce(into: [:]) { result, zimFile in
4547
result?[zimFile.fileID] = zimFile

Views/Bookmarks.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ struct Bookmarks: View {
2929

3030
var body: some View {
3131
LazyVGrid(columns: ([gridItem]), spacing: 12) {
32-
ForEach(bookmarks) { bookmark in
32+
ForEach(bookmarks, id: \.self) { bookmark in
3333
Button {
3434
NotificationCenter.openURL(bookmark.articleURL)
3535
if horizontalSizeClass == .compact {
@@ -54,8 +54,8 @@ struct Bookmarks: View {
5454
Message(text: LocalString.bookmark_overlay_empty_title)
5555
}
5656
}
57+
#if os(iOS)
5758
.toolbar {
58-
#if os(iOS)
5959
ToolbarItem(placement: .navigationBarLeading) {
6060
if #unavailable(iOS 16), horizontalSizeClass == .regular {
6161
Button {
@@ -65,8 +65,8 @@ struct Bookmarks: View {
6565
}
6666
}
6767
}
68-
#endif
6968
}
69+
#endif
7070
}
7171

7272
private var gridItem: GridItem {

Views/BrowserTab.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ struct BrowserTab: View {
2121
@Environment(\.scenePhase) private var scenePhase
2222
@EnvironmentObject private var browser: BrowserViewModel
2323
@EnvironmentObject private var library: LibraryViewModel
24-
@StateObject private var search = SearchViewModel()
24+
@StateObject private var search = SearchViewModel.shared
2525

2626
var body: some View {
2727
let model = if FeatureFlags.hasLibrary {

project.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ settings:
4646
packages:
4747
Defaults:
4848
url: https://github.com/sindresorhus/Defaults
49-
majorVersion: 6.0.0
49+
majorVersion: 8.2.0
5050
StripeApplePay:
5151
url: https://github.com/CodeLikeW/stripe-apple-pay
5252
majorVersion: 24.0.0

0 commit comments

Comments
 (0)