summaryrefslogtreecommitdiff
path: root/Sora/Data/Settings
diff options
context:
space:
mode:
Diffstat (limited to 'Sora/Data/Settings')
-rw-r--r--Sora/Data/Settings/SettingsBookmark.swift4
-rw-r--r--Sora/Data/Settings/SettingsFolder.swift13
-rw-r--r--Sora/Data/Settings/SettingsManager.swift30
3 files changed, 45 insertions, 2 deletions
diff --git a/Sora/Data/Settings/SettingsBookmark.swift b/Sora/Data/Settings/SettingsBookmark.swift
index ef0d64f..43af79d 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
- let folder: String?
+ var folder: SettingsFolder?
- init(provider: BooruProvider, tags: [String], folder: String? = nil, id: UUID = UUID()) {
+ init(provider: BooruProvider, tags: [String], folder: SettingsFolder? = nil, id: UUID = UUID()) {
createdAt = Date()
self.id = id
self.tags = tags
diff --git a/Sora/Data/Settings/SettingsFolder.swift b/Sora/Data/Settings/SettingsFolder.swift
new file mode 100644
index 0000000..ce19561
--- /dev/null
+++ b/Sora/Data/Settings/SettingsFolder.swift
@@ -0,0 +1,13 @@
+import Foundation
+
+struct SettingsFolder: Codable, Identifiable, Hashable {
+ let id: UUID
+ let name: String
+ let createdAt: Date
+
+ init(name: String, id: UUID = UUID()) {
+ createdAt = Date()
+ self.id = id
+ self.name = name
+ }
+}
diff --git a/Sora/Data/Settings/SettingsManager.swift b/Sora/Data/Settings/SettingsManager.swift
index 666999b..b35ca64 100644
--- a/Sora/Data/Settings/SettingsManager.swift
+++ b/Sora/Data/Settings/SettingsManager.swift
@@ -54,6 +54,9 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l
@AppStorage("customProviders")
private var customProvidersData = Data()
+ @AppStorage("folders")
+ private var foldersData = Data()
+
// MARK: - Computed Properties
var bookmarks: [SettingsBookmark] {
get {
@@ -140,6 +143,27 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l
}
}
+ var folders: [SettingsFolder] {
+ get {
+ syncableData(
+ key: "folders",
+ localData: foldersData,
+ sort: { $0 },
+ identifier: { $0.id }
+ )
+ }
+
+ set {
+ syncableData(
+ key: "folders",
+ localData: $foldersData,
+ newValue: newValue,
+ sort: { $0 },
+ identifier: { $0.id }
+ )
+ }
+ }
+
// MARK: - Initialisation
init() {
syncObservation = NotificationCenter.default.addObserver(
@@ -360,6 +384,12 @@ class SettingsManager: ObservableObject { // swiftlint:disable:this type_body_l
bookmarks.append(contentsOf: newBookmarks)
}
+ func updateBookmarkFolder(withID id: UUID, folder: SettingsFolder?) {
+ guard let index = bookmarks.firstIndex(where: { $0.id == id }) else { return }
+
+ bookmarks[index].folder = folder
+ }
+
// MARK: - Search History Management
func removeSearchHistoryEntry(at offsets: IndexSet) {
searchHistory.remove(atOffsets: offsets)