From 5199ec103e4eebb0615672f3e0fbe0a1bb36e7e4 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Thu, 20 Feb 2025 06:11:42 -0800 Subject: feat: Development commit --- Sora/Data/Settings/Settings.swift | 70 ++++++++++++++++++++++++++++++++++++++ Sora/Views/ContentView.swift | 2 +- Sora/Views/MainView.swift | 3 +- Sora/Views/Post/PostGridView.swift | 2 +- 4 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 Sora/Data/Settings/Settings.swift diff --git a/Sora/Data/Settings/Settings.swift b/Sora/Data/Settings/Settings.swift new file mode 100644 index 0000000..22b91cc --- /dev/null +++ b/Sora/Data/Settings/Settings.swift @@ -0,0 +1,70 @@ +import SwiftUI + +class Settings: ObservableObject { + #if DEBUG + @AppStorage("detailViewType") var detailViewType: PostFileType = .compressed + #else + @AppStorage("detailViewType") var detailViewType: PostFileType = .original + #endif + @AppStorage("thumbnailType") var thumbnailType: PostFileType = .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() + + 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 = .compressed + #else + detailViewType = .original + #endif + thumbnailType = .preview + searchSuggestions = false + columns = 2 + blurNSFWThumbnails = true + showNSFWPosts = false + } + + func addBookmark(tags: [String]) { + var currentBookmarks = bookmarks + + currentBookmarks.append(Bookmark(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 + } +} diff --git a/Sora/Views/ContentView.swift b/Sora/Views/ContentView.swift index 22c17f6..053e98d 100644 --- a/Sora/Views/ContentView.swift +++ b/Sora/Views/ContentView.swift @@ -1,7 +1,7 @@ import SwiftUI struct ContentView: View { - @EnvironmentObject private var manager: MoebooruManager + @EnvironmentObject var manager: MoebooruManager var body: some View { #if os(macOS) diff --git a/Sora/Views/MainView.swift b/Sora/Views/MainView.swift index 7ad7c77..966d986 100644 --- a/Sora/Views/MainView.swift +++ b/Sora/Views/MainView.swift @@ -9,14 +9,15 @@ struct MainView: View { #if os(macOS) ContentView() .environmentObject(settings) + .environmentObject(manager) #else TabView(selection: $selectedTab) { ContentView() + .environmentObject(manager) .tabItem { Label("Posts", systemImage: "rectangle.stack") } .tag(0) - .environmentObject(manager) NavigationStack { BookmarksView(selectedTab: $selectedTab) diff --git a/Sora/Views/Post/PostGridView.swift b/Sora/Views/Post/PostGridView.swift index 487bde8..2054ef1 100644 --- a/Sora/Views/Post/PostGridView.swift +++ b/Sora/Views/Post/PostGridView.swift @@ -84,7 +84,7 @@ struct PostGridView: View { #endif .toolbar { if !manager.tags.isEmpty { - ToolbarItem(placement: .bottomBar) { + ToolbarItem { let contained = settings.bookmarks.contains(where: { $0.tags == manager.tags }) Button(action: { -- cgit v1.2.3