summaryrefslogtreecommitdiff
path: root/Sora/Data/Settings/SettingsManager.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Sora/Data/Settings/SettingsManager.swift')
-rw-r--r--Sora/Data/Settings/SettingsManager.swift32
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)
}