summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-06-09 07:07:26 -0700
committerFuwn <[email protected]>2025-06-09 07:07:26 -0700
commit3433214836683615269f91d775fc208a633ea534 (patch)
tree1b671c2bb8beb7bb342044b0c0a1022e5f5b1943
parentfeat: Development commit (diff)
downloadsora-testing-3433214836683615269f91d775fc208a633ea534.tar.xz
sora-testing-3433214836683615269f91d775fc208a633ea534.zip
feat: Development commit
-rw-r--r--Sora/Data/GenericItem.swift4
-rw-r--r--Sora/Data/Settings/SettingsBookmark.swift4
-rw-r--r--Sora/Data/Settings/SettingsManager.swift9
-rw-r--r--Sora/Views/Generic/GenericItemView.swift8
-rw-r--r--Sora/Views/Generic/GenericListView.swift16
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")
}