diff options
| author | Fuwn <[email protected]> | 2025-07-26 01:26:58 +0200 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-07-26 01:26:58 +0200 |
| commit | fbc0f0eb87f8c8e37b797de05c39636f33532f44 (patch) | |
| tree | a1820aaba41e7025918e4a88d8a0eb3954966daf | |
| parent | feat: Development commit (diff) | |
| download | sora-testing-fbc0f0eb87f8c8e37b797de05c39636f33532f44.tar.xz sora-testing-fbc0f0eb87f8c8e37b797de05c39636f33532f44.zip | |
feat: Development commit
| -rw-r--r-- | Sora/Data/Settings/SettingsManager.swift | 37 |
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") |