diff options
Diffstat (limited to 'Sora/Data/Settings/SettingsManager.swift')
| -rw-r--r-- | Sora/Data/Settings/SettingsManager.swift | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/Sora/Data/Settings/SettingsManager.swift b/Sora/Data/Settings/SettingsManager.swift index ffe7057..39eb6bf 100644 --- a/Sora/Data/Settings/SettingsManager.swift +++ b/Sora/Data/Settings/SettingsManager.swift @@ -887,10 +887,22 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l // MARK: Bookmark Management func addBookmark(provider: BooruProvider, tags: [String]) { + let normalizedTags = tags.map { $0.lowercased() } + + let existingBookmark = bookmarks.first { bookmark in + bookmark.provider == provider && Set(bookmark.tags) == Set(normalizedTags) + } + + guard existingBookmark == nil else { + debugPrint("SettingsManager.addBookmark: Bookmark already exists") + + return + } + var updatedBookmarks = bookmarks updatedBookmarks.append( - SettingsBookmark(provider: provider, tags: tags.map { $0.lowercased() }) + SettingsBookmark(provider: provider, tags: normalizedTags) ) if let data = Self.encode(updatedBookmarks), data.count < 1_000_000 { // 1 MB @@ -992,6 +1004,16 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l // MARK: Favourites Management func addFavorite(post: BooruPost, provider: BooruProvider, folder: UUID? = nil) { + let existingFavorite = favorites.first { favorite in + favorite.postId == post.id && favorite.provider == provider + } + + guard existingFavorite == nil else { + debugPrint("SettingsManager.addFavorite: Favorite already exists") + + return + } + var updatedFavorites = favorites updatedFavorites.append( @@ -1037,6 +1059,14 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l favorites.contains { $0.postId == postId && $0.provider == provider } } + func isBookmark(provider: BooruProvider, tags: [String]) -> Bool { + let normalizedTags = tags.map { $0.lowercased() } + + return bookmarks.contains { bookmark in + bookmark.provider == provider && Set(bookmark.tags) == Set(normalizedTags) + } + } + func exportFavorites() throws -> Data { try JSONEncoder().encode(favorites) } |