diff options
Diffstat (limited to 'Sora/Data/Settings')
| -rw-r--r-- | Sora/Data/Settings/SettingsBookmark.swift | 4 | ||||
| -rw-r--r-- | Sora/Data/Settings/SettingsFolder.swift | 13 | ||||
| -rw-r--r-- | Sora/Data/Settings/SettingsManager.swift | 30 |
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) |