diff options
| author | Fuwn <[email protected]> | 2025-02-20 06:11:42 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-02-20 06:11:42 -0800 |
| commit | 5199ec103e4eebb0615672f3e0fbe0a1bb36e7e4 (patch) | |
| tree | 283e4806b28fb5a07a9b7e513b41a8a98544f67a | |
| parent | feat: Development commit (diff) | |
| download | sora-testing-5199ec103e4eebb0615672f3e0fbe0a1bb36e7e4.tar.xz sora-testing-5199ec103e4eebb0615672f3e0fbe0a1bb36e7e4.zip | |
feat: Development commit
| -rw-r--r-- | Sora/Data/Settings/Settings.swift | 70 | ||||
| -rw-r--r-- | Sora/Views/ContentView.swift | 2 | ||||
| -rw-r--r-- | Sora/Views/MainView.swift | 3 | ||||
| -rw-r--r-- | Sora/Views/Post/PostGridView.swift | 2 |
4 files changed, 74 insertions, 3 deletions
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: { |