summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-07-26 01:26:58 +0200
committerFuwn <[email protected]>2025-07-26 01:26:58 +0200
commitfbc0f0eb87f8c8e37b797de05c39636f33532f44 (patch)
treea1820aaba41e7025918e4a88d8a0eb3954966daf
parentfeat: Development commit (diff)
downloadsora-testing-fbc0f0eb87f8c8e37b797de05c39636f33532f44.tar.xz
sora-testing-fbc0f0eb87f8c8e37b797de05c39636f33532f44.zip
feat: Development commit
-rw-r--r--Sora/Data/Settings/SettingsManager.swift37
1 files changed, 32 insertions, 5 deletions
diff --git a/Sora/Data/Settings/SettingsManager.swift b/Sora/Data/Settings/SettingsManager.swift
index 8f441d6..53d699e 100644
--- a/Sora/Data/Settings/SettingsManager.swift
+++ b/Sora/Data/Settings/SettingsManager.swift
@@ -439,8 +439,18 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l
let localBookmarks =
await Self.decode([SettingsBookmark].self, from: bookmarksData) ?? []
- let mergedBookmarks = Array(Set(localBookmarks + iCloudBookmarks))
- .sorted { $0.date > $1.date }
+ let mergedBookmarksDict = (localBookmarks + iCloudBookmarks).reduce(
+ into: [UUID: SettingsBookmark]()
+ ) { dict, bookmark in
+ if let existing = dict[bookmark.id] {
+ if bookmark.date > existing.date {
+ dict[bookmark.id] = bookmark
+ }
+ } else {
+ dict[bookmark.id] = bookmark
+ }
+ }
+ let mergedBookmarks = Array(mergedBookmarksDict.values).sorted { $0.date > $1.date }
if let encoded = await Self.encode(mergedBookmarks) {
NSUbiquitousKeyValueStore.default.set(encoded, forKey: "bookmarks")
@@ -459,8 +469,18 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l
let localHistory =
await Self.decode([BooruSearchQuery].self, from: searchHistoryData) ?? []
- let mergedHistory = Array(Set(localHistory + iCloudHistory))
- .sorted { $0.date > $1.date }
+ let mergedHistoryDict = (localHistory + iCloudHistory).reduce(
+ into: [UUID: BooruSearchQuery]()
+ ) { dict, entry in
+ if let existing = dict[entry.id] {
+ if entry.date > existing.date {
+ dict[entry.id] = entry
+ }
+ } else {
+ dict[entry.id] = entry
+ }
+ }
+ let mergedHistory = Array(mergedHistoryDict.values).sorted { $0.date > $1.date }
if let encoded = await Self.encode(mergedHistory) {
NSUbiquitousKeyValueStore.default.set(encoded, forKey: "searchHistory")
@@ -481,7 +501,14 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l
let localProviders =
await Self.decode([BooruProviderCustom].self, from: customProvidersData) ?? []
- let mergedProviders = Array(Set(localProviders + iCloudProviders))
+ let mergedProvidersDict = (localProviders + iCloudProviders).reduce(
+ into: [UUID: BooruProviderCustom]()
+ ) { dict, provider in
+ if dict[provider.id] == nil {
+ dict[provider.id] = provider
+ }
+ }
+ let mergedProviders = Array(mergedProvidersDict.values)
if let encoded = await Self.encode(mergedProviders) {
NSUbiquitousKeyValueStore.default.set(encoded, forKey: "customProviders")