diff options
| author | Fuwn <[email protected]> | 2025-09-09 02:23:13 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-09-09 02:23:13 -0700 |
| commit | 23360b32d6973215944adc334ad5e977e82e4e5f (patch) | |
| tree | 0cf5f3d99a9fa7cefc532b0143e7edec6116c09b /Sora | |
| parent | feat: Development commit (diff) | |
| download | sora-testing-23360b32d6973215944adc334ad5e977e82e4e5f.tar.xz sora-testing-23360b32d6973215944adc334ad5e977e82e4e5f.zip | |
feat: Development commit
Diffstat (limited to 'Sora')
| -rw-r--r-- | Sora/Data/Settings/SettingsManager.swift | 32 | ||||
| -rw-r--r-- | Sora/Views/BookmarkMenuButtonView.swift | 31 | ||||
| -rw-r--r-- | Sora/Views/FavoriteMenuButtonView.swift | 20 |
3 files changed, 54 insertions, 29 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) } diff --git a/Sora/Views/BookmarkMenuButtonView.swift b/Sora/Views/BookmarkMenuButtonView.swift index 91009d0..9af2cf6 100644 --- a/Sora/Views/BookmarkMenuButtonView.swift +++ b/Sora/Views/BookmarkMenuButtonView.swift @@ -33,9 +33,14 @@ struct BookmarkMenuButtonView: View { Menu { ForEach(settings.folders.filter { $0.topLevelName == nil }, id: \.id) { folder in Button(action: { - let newBookmark = SettingsBookmark(provider: provider, tags: tags, folder: folder.id) + settings.addBookmark(provider: provider, tags: tags) - settings.bookmarks.append(newBookmark) + if let bookmarkId = settings.bookmarks.first(where: { bookmark in + bookmark.provider == provider + && Set(bookmark.tags) == Set(tags.map { $0.lowercased() }) + })?.id { + settings.updateBookmarkFolder(withID: bookmarkId, folder: folder.id) + } }) { Label(folder.name, systemImage: "folder") } @@ -53,13 +58,14 @@ struct BookmarkMenuButtonView: View { Menu { ForEach(topLevelFolders[topLevelName] ?? [], id: \.id) { folder in Button(action: { - let newBookmark = SettingsBookmark( - provider: provider, - tags: tags, - folder: folder.id - ) + settings.addBookmark(provider: provider, tags: tags) - settings.bookmarks.append(newBookmark) + if let bookmarkId = settings.bookmarks.first(where: { bookmark in + bookmark.provider == provider + && Set(bookmark.tags) == Set(tags.map { $0.lowercased() }) + })?.id { + settings.updateBookmarkFolder(withID: bookmarkId, folder: folder.id) + } }) { Text(folder.shortName) } @@ -94,10 +100,13 @@ struct BookmarkMenuButtonView: View { let newFolder = SettingsFolder(name: newCollectionName) settings.folders.append(newFolder) + settings.addBookmark(provider: provider, tags: tags) - let newBookmark = SettingsBookmark(provider: provider, tags: tags, folder: newFolder.id) - - settings.bookmarks.append(newBookmark) + if let bookmarkId = settings.bookmarks.first(where: { bookmark in + bookmark.provider == provider && Set(bookmark.tags) == Set(tags.map { $0.lowercased() }) + })?.id { + settings.updateBookmarkFolder(withID: bookmarkId, folder: newFolder.id) + } } } diff --git a/Sora/Views/FavoriteMenuButtonView.swift b/Sora/Views/FavoriteMenuButtonView.swift index 6fee55a..b6b99a9 100644 --- a/Sora/Views/FavoriteMenuButtonView.swift +++ b/Sora/Views/FavoriteMenuButtonView.swift @@ -31,11 +31,7 @@ struct FavoriteMenuButtonView: View { Menu { ForEach(settings.folders.filter { $0.topLevelName == nil }, id: \.id) { folder in Button(action: { - let newFavorite = SettingsFavoritePost( - post: post, provider: manager.provider, folder: folder.id - ) - - settings.favorites.append(newFavorite) + settings.addFavorite(post: post, provider: manager.provider, folder: folder.id) }) { Label(folder.name, systemImage: "folder") } @@ -53,13 +49,7 @@ struct FavoriteMenuButtonView: View { Menu { ForEach(topLevelFolders[topLevelName] ?? [], id: \.id) { folder in Button(action: { - let newFavorite = SettingsFavoritePost( - post: post, - provider: manager.provider, - folder: folder.id - ) - - settings.favorites.append(newFavorite) + settings.addFavorite(post: post, provider: manager.provider, folder: folder.id) }) { Text(folder.shortName) } @@ -95,11 +85,7 @@ struct FavoriteMenuButtonView: View { settings.folders.append(newFolder) - let newFavorite = SettingsFavoritePost( - post: post, provider: manager.provider, folder: newFolder.id - ) - - settings.favorites.append(newFavorite) + settings.addFavorite(post: post, provider: manager.provider, folder: newFolder.id) } } |