import SwiftUI class Settings: ObservableObject { #if DEBUG @AppStorage("detailViewType") var detailViewType: BooruPostFileType = .sample #else @AppStorage("detailViewType") var detailViewType: BooruPostFileType = .original #endif @AppStorage("thumbnailType") var thumbnailType: BooruPostFileType = .preview @AppStorage("searchSuggestions") var searchSuggestions: Bool = false @AppStorage("columns") var columns: Int = 2 @AppStorage("blurNSFWThumbnails") var blurNSFWThumbnails: Bool = true @AppStorage("showNSFWPosts") var showNSFWPosts: Bool = false @AppStorage("bookmarks") private var bookmarksData: Data = .init() @AppStorage("preferredBooru") var preferredBooru: BooruProvider = .yandere @AppStorage("enableShareShortcut") var enableShareShortcut: Bool = false var bookmarks: [Bookmark] { get { if let bookmarks = try? JSONDecoder().decode([Bookmark].self, from: bookmarksData) { return bookmarks } return [] } set { if let data = try? JSONEncoder().encode(newValue) { bookmarksData = data } } } func resetToDefaults() { #if DEBUG detailViewType = .preview #else detailViewType = .original #endif thumbnailType = .preview searchSuggestions = false columns = 2 blurNSFWThumbnails = true showNSFWPosts = false } func addBookmark(provider: BooruProvider, tags: [String]) { var currentBookmarks = bookmarks currentBookmarks.append(Bookmark(provider: provider, tags: tags.map { $0.lowercased() })) bookmarks = currentBookmarks } func removeBookmark(at index: IndexSet) { var currentBookmarks = bookmarks currentBookmarks.remove(atOffsets: index) bookmarks = currentBookmarks } func removeBookmark(withTags tags: [String]) { var currentBookmarks = bookmarks currentBookmarks.removeAll { bookmark in bookmark.tags.contains(where: tags.contains) } bookmarks = currentBookmarks } func removeBookmark(withID: UUID) { var currentBookmarks = bookmarks currentBookmarks.removeAll { bookmark in bookmark.id == withID } bookmarks = currentBookmarks } }