summaryrefslogtreecommitdiff
path: root/Sora
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-09-09 02:23:13 -0700
committerFuwn <[email protected]>2025-09-09 02:23:13 -0700
commit23360b32d6973215944adc334ad5e977e82e4e5f (patch)
tree0cf5f3d99a9fa7cefc532b0143e7edec6116c09b /Sora
parentfeat: Development commit (diff)
downloadsora-testing-23360b32d6973215944adc334ad5e977e82e4e5f.tar.xz
sora-testing-23360b32d6973215944adc334ad5e977e82e4e5f.zip
feat: Development commit
Diffstat (limited to 'Sora')
-rw-r--r--Sora/Data/Settings/SettingsManager.swift32
-rw-r--r--Sora/Views/BookmarkMenuButtonView.swift31
-rw-r--r--Sora/Views/FavoriteMenuButtonView.swift20
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)
}
}