summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-07-02 07:05:59 -0700
committerFuwn <[email protected]>2025-07-02 07:05:59 -0700
commit6a773169bde27fd8695b5f84cd7ba2df2826ce13 (patch)
tree6ac8a5c65568602d8fe29de1ebfcefc1c0fbd4f3
parentfeat: Development commit (diff)
downloadsora-testing-6a773169bde27fd8695b5f84cd7ba2df2826ce13.tar.xz
sora-testing-6a773169bde27fd8695b5f84cd7ba2df2826ce13.zip
feat: Development commit
-rw-r--r--Sora/Data/Settings/SettingsManager.swift123
1 files changed, 80 insertions, 43 deletions
diff --git a/Sora/Data/Settings/SettingsManager.swift b/Sora/Data/Settings/SettingsManager.swift
index fbd432e..d24929b 100644
--- a/Sora/Data/Settings/SettingsManager.swift
+++ b/Sora/Data/Settings/SettingsManager.swift
@@ -8,7 +8,7 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l
var detailViewQuality: BooruPostFileType = .original
@AppStorage("thumbnailQuality")
- var thumbnailQuality: BooruPostFileType = .preview
+ private var _thumbnailQuality: BooruPostFileType = .preview
@AppStorage("searchSuggestionsMode")
var searchSuggestionsMode: SettingsSearchSuggestionsMode = .disabled
@@ -32,7 +32,7 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l
var alternativeThumbnailGrid = false
@AppStorage("uniformThumbnailGrid")
- var uniformThumbnailGrid = false
+ private var _uniformThumbnailGrid: Bool = false
private var syncObservation: NSObjectProtocol?
@@ -44,7 +44,10 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l
// MARK: - Private Properties
private var bookmarksCache: [SettingsBookmark] = []
private var searchHistoryCache: [BooruSearchQuery] = []
+ private var blurRatingsCache: [BooruRating] = []
private var displayRatingsCache: [BooruRating] = []
+ private var uniformThumbnailGridCache: Bool = false
+ private var thumbnailQualityCache: BooruPostFileType = .preview
// MARK: - Codable Properties
@AppStorage("bookmarks")
@@ -88,49 +91,21 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l
}
}
- private func backupBookmarks() {
- guard
- let cachesDirectory = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)
- .first
- else { return }
- let backupDirectory = cachesDirectory.appendingPathComponent("bookmarks_backups")
- let fileManager = FileManager.default
+ var uniformThumbnailGrid: Bool {
+ get { uniformThumbnailGridCache }
- try? fileManager.createDirectory(at: backupDirectory, withIntermediateDirectories: true)
-
- let timestamp = Int(Date().timeIntervalSince1970)
- let backupFile = backupDirectory.appendingPathComponent("bookmarks_backup_\(timestamp).json")
-
- if let data = Self.encode(self.bookmarksCache) {
- try? data.write(to: backupFile)
+ set {
+ _uniformThumbnailGrid = newValue
+ uniformThumbnailGridCache = newValue
}
+ }
- if let files = try? fileManager.contentsOfDirectory(
- at: backupDirectory,
- includingPropertiesForKeys: [.contentModificationDateKey],
- options: .skipsHiddenFiles
- ) {
- let jsonBackups = files.filter { file in
- file.lastPathComponent.hasPrefix("bookmarks_backup_") && file.pathExtension == "json"
- }
- let sortedBackups = jsonBackups.sorted { firstFile, secondFile in
- let firstDate =
- (try? firstFile.resourceValues(forKeys: [.contentModificationDateKey])
- .contentModificationDate)
- ?? .distantPast
- let secondDate =
- (try? secondFile.resourceValues(forKeys: [.contentModificationDateKey])
- .contentModificationDate)
- ?? .distantPast
-
- return firstDate > secondDate
- }
+ var thumbnailQuality: BooruPostFileType {
+ get { thumbnailQualityCache }
- if sortedBackups.count > 10 {
- for url in sortedBackups[10...] {
- try? fileManager.removeItem(at: url)
- }
- }
+ set {
+ _thumbnailQuality = newValue
+ thumbnailQualityCache = newValue
}
}
@@ -145,9 +120,13 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l
}
var blurRatings: [BooruRating] {
- get { Self.decode([BooruRating].self, from: blurRatingsData) ?? [.explicit] }
+ get { blurRatingsCache }
+
+ set {
+ blurRatingsData = Self.encode(newValue) ?? blurRatingsData
- set { blurRatingsData = Self.encode(newValue) ?? blurRatingsData }
+ loadBlurRatingsCache()
+ }
}
var searchHistory: [BooruSearchQuery] {
@@ -289,6 +268,10 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l
loadBookmarksCache()
loadSearchHistoryCache()
loadDisplayRatingsCache()
+ loadBlurRatingsCache()
+
+ uniformThumbnailGridCache = _uniformThumbnailGrid
+ thumbnailQualityCache = _thumbnailQuality
}
// MARK: - Private Helpers
@@ -357,6 +340,52 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l
}
}
+ private func backupBookmarks() {
+ guard
+ let cachesDirectory = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)
+ .first
+ else { return }
+ let backupDirectory = cachesDirectory.appendingPathComponent("bookmarks_backups")
+ let fileManager = FileManager.default
+
+ try? fileManager.createDirectory(at: backupDirectory, withIntermediateDirectories: true)
+
+ let timestamp = Int(Date().timeIntervalSince1970)
+ let backupFile = backupDirectory.appendingPathComponent("bookmarks_backup_\(timestamp).json")
+
+ if let data = Self.encode(self.bookmarksCache) {
+ try? data.write(to: backupFile)
+ }
+
+ if let files = try? fileManager.contentsOfDirectory(
+ at: backupDirectory,
+ includingPropertiesForKeys: [.contentModificationDateKey],
+ options: .skipsHiddenFiles
+ ) {
+ let jsonBackups = files.filter { file in
+ file.lastPathComponent.hasPrefix("bookmarks_backup_") && file.pathExtension == "json"
+ }
+ let sortedBackups = jsonBackups.sorted { firstFile, secondFile in
+ let firstDate =
+ (try? firstFile.resourceValues(forKeys: [.contentModificationDateKey])
+ .contentModificationDate)
+ ?? .distantPast
+ let secondDate =
+ (try? secondFile.resourceValues(forKeys: [.contentModificationDateKey])
+ .contentModificationDate)
+ ?? .distantPast
+
+ return firstDate > secondDate
+ }
+
+ if sortedBackups.count > 10 {
+ for url in sortedBackups[10...] {
+ try? fileManager.removeItem(at: url)
+ }
+ }
+ }
+ }
+
// MARK: Cache Loaders
private func loadCache<T: Decodable & Sendable>(
from data: Data,
@@ -393,6 +422,14 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l
)
}
+ private func loadBlurRatingsCache() {
+ loadCache(
+ from: blurRatingsData,
+ sort: { $0 },
+ assign: { [weak self] in self?.blurRatingsCache = $0 }
+ )
+ }
+
// MARK: - Public Methods
func appendToSearchHistory(_ query: BooruSearchQuery) {
self.searchHistory.append(query)