diff options
| author | Fuwn <[email protected]> | 2025-06-09 07:07:26 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-06-09 07:07:26 -0700 |
| commit | 3433214836683615269f91d775fc208a633ea534 (patch) | |
| tree | 1b671c2bb8beb7bb342044b0c0a1022e5f5b1943 | |
| parent | feat: Development commit (diff) | |
| download | sora-testing-3433214836683615269f91d775fc208a633ea534.tar.xz sora-testing-3433214836683615269f91d775fc208a633ea534.zip | |
feat: Development commit
| -rw-r--r-- | Sora/Data/GenericItem.swift | 4 | ||||
| -rw-r--r-- | Sora/Data/Settings/SettingsBookmark.swift | 4 | ||||
| -rw-r--r-- | Sora/Data/Settings/SettingsManager.swift | 9 | ||||
| -rw-r--r-- | Sora/Views/Generic/GenericItemView.swift | 8 | ||||
| -rw-r--r-- | Sora/Views/Generic/GenericListView.swift | 16 |
5 files changed, 24 insertions, 17 deletions
diff --git a/Sora/Data/GenericItem.swift b/Sora/Data/GenericItem.swift index cc718ca..6b06d02 100644 --- a/Sora/Data/GenericItem.swift +++ b/Sora/Data/GenericItem.swift @@ -5,12 +5,12 @@ protocol GenericItem { var tags: [String] { get } var provider: BooruProvider { get } var date: Date { get } - var folder: SettingsFolder? { get } + var folder: UUID? { get } } extension BooruSearchQuery: GenericItem { var date: Date { searchedAt } - var folder: SettingsFolder? { nil } + var folder: UUID? { nil } } extension SettingsBookmark: GenericItem { diff --git a/Sora/Data/Settings/SettingsBookmark.swift b/Sora/Data/Settings/SettingsBookmark.swift index 43af79d..34b87f4 100644 --- a/Sora/Data/Settings/SettingsBookmark.swift +++ b/Sora/Data/Settings/SettingsBookmark.swift @@ -5,9 +5,9 @@ struct SettingsBookmark: Codable, Identifiable, Hashable { let tags: [String] let createdAt: Date let provider: BooruProvider - var folder: SettingsFolder? + var folder: UUID? - init(provider: BooruProvider, tags: [String], folder: SettingsFolder? = nil, id: UUID = UUID()) { + init(provider: BooruProvider, tags: [String], folder: UUID? = nil, id: UUID = UUID()) { createdAt = Date() self.id = id self.tags = tags diff --git a/Sora/Data/Settings/SettingsManager.swift b/Sora/Data/Settings/SettingsManager.swift index b35ca64..bc7dc8a 100644 --- a/Sora/Data/Settings/SettingsManager.swift +++ b/Sora/Data/Settings/SettingsManager.swift @@ -239,6 +239,7 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l let sortedMergedValues = sort(mergedValues) NSUbiquitousKeyValueStore.default.set(Self.encode(sortedMergedValues), forKey: key) + NSUbiquitousKeyValueStore.default.synchronize() } } @@ -384,10 +385,16 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l bookmarks.append(contentsOf: newBookmarks) } - func updateBookmarkFolder(withID id: UUID, folder: SettingsFolder?) { + func updateBookmarkFolder(withID id: UUID, folder: UUID?) { guard let index = bookmarks.firstIndex(where: { $0.id == id }) else { return } bookmarks[index].folder = folder + + self.syncToCloud() + } + + func folderName(forID id: UUID) -> String? { + folders.first { $0.id == id }?.name } // MARK: - Search History Management diff --git a/Sora/Views/Generic/GenericItemView.swift b/Sora/Views/Generic/GenericItemView.swift index 6969677..be5611a 100644 --- a/Sora/Views/Generic/GenericItemView.swift +++ b/Sora/Views/Generic/GenericItemView.swift @@ -17,8 +17,8 @@ struct GenericItemView<T: GenericItem>: View { .font(.caption) .foregroundStyle(Color.secondary) - if let folder = item.folder { - Text("In \(folder.name)") + if let folder = item.folder, let folderName = settings.folderName(forID: folder) { + Text("In \(folderName)") .font(.caption) .foregroundStyle(Color.secondary) } @@ -34,8 +34,8 @@ struct GenericItemView<T: GenericItem>: View { .font(.caption) .foregroundStyle(Color.secondary) - if let folder = item.folder { - Text("In \(folder.name)") + if let folder = item.folder, let folderName = settings.folderName(forID: folder) { + Text("In \(folderName)") .font(.caption) .foregroundStyle(Color.secondary) } diff --git a/Sora/Views/Generic/GenericListView.swift b/Sora/Views/Generic/GenericListView.swift index 8666e3c..54a8fab 100644 --- a/Sora/Views/Generic/GenericListView.swift +++ b/Sora/Views/Generic/GenericListView.swift @@ -11,7 +11,7 @@ struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { @State private var newCollectionName = "" @State private var itemPendingCollectionAssignment: UUID? @State private var isCollectionErrorAlertPresented = false - @State private var selectedFolder: SettingsFolder? + @State private var selectedFolder: UUID? let allowBookmarking: Bool let title: String let emptyMessage: String @@ -25,7 +25,7 @@ struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { let removeAllAction: () -> Void var filteredItems: [T] { items.filter { item in - let matchesFolder = selectedFolder == nil || item.folder?.id == selectedFolder?.id + let matchesFolder = selectedFolder == nil || item.folder == selectedFolder let matchesSearch = searchText.isEmpty || item.tags @@ -49,10 +49,10 @@ struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { } else { if !settings.folders.isEmpty && !allowBookmarking { Picker("Collection", selection: $selectedFolder) { - Text("All").tag(nil as SettingsFolder?) + Text("All").tag(nil as UUID?) ForEach(settings.folders, id: \.id) { folder in - Text(folder.name).tag(folder) + Text(folder.name).tag(folder.id) } } .pickerStyle(.menu) @@ -77,11 +77,11 @@ struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { .onDelete(perform: removeAction) } .searchable(text: $searchText) + .refreshable { settings.syncFromCloud() } } } } .navigationTitle(title) - .refreshable { settings.syncFromCloud() } .toolbar { ToolbarItem { Button(action: { @@ -119,7 +119,7 @@ struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { settings.folders.append(newFolder) if let id = itemPendingCollectionAssignment { - settings.updateBookmarkFolder(withID: id, folder: newFolder) + settings.updateBookmarkFolder(withID: id, folder: newFolder.id) } itemPendingCollectionAssignment = nil @@ -170,9 +170,9 @@ struct GenericListView<T: Identifiable & Hashable & GenericItem>: View { Menu("\(item.folder != nil ? "Move" : "Add") to Collection") { ForEach(settings.folders, id: \.id) { folder in - if item.folder?.id != folder.id { + if item.folder != folder.id { Button(action: { - settings.updateBookmarkFolder(withID: item.id, folder: folder) + settings.updateBookmarkFolder(withID: item.id, folder: folder.id) }) { Label(folder.name, systemImage: "folder") } |