summaryrefslogtreecommitdiff
path: root/Sora/Views
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-02-22 12:26:31 -0800
committerFuwn <[email protected]>2025-02-22 12:26:31 -0800
commitf527ede88d974271a0c485e297ba9278909f53bb (patch)
tree6d6ad0597c80fabe48a1de9981bafa968aaf6e29 /Sora/Views
parentfeat: Development commit (diff)
downloadsora-testing-f527ede88d974271a0c485e297ba9278909f53bb.tar.xz
sora-testing-f527ede88d974271a0c485e297ba9278909f53bb.zip
feat: Development commit
Diffstat (limited to 'Sora/Views')
-rw-r--r--Sora/Views/MainView.swift8
-rw-r--r--Sora/Views/Post/Grid/PostGridThumbnailView.swift3
-rw-r--r--Sora/Views/Post/Grid/PostGridView.swift5
-rw-r--r--Sora/Views/Settings/Section/SettingsContentRatingsView.swift74
-rw-r--r--Sora/Views/Settings/Section/SettingsThumbnailsView.swift6
-rw-r--r--Sora/Views/Settings/SettingsView.swift48
6 files changed, 106 insertions, 38 deletions
diff --git a/Sora/Views/MainView.swift b/Sora/Views/MainView.swift
index 3a47038..db9960a 100644
--- a/Sora/Views/MainView.swift
+++ b/Sora/Views/MainView.swift
@@ -30,11 +30,9 @@ struct MainView: View {
.tabItem { Label("Bookmarks", systemImage: "bookmark") }
.tag(1)
- NavigationStack {
- SettingsView()
- }
- .tabItem { Label("Settings", systemImage: "gear") }
- .tag(2)
+ SettingsView()
+ .tabItem { Label("Settings", systemImage: "gear") }
+ .tag(2)
}
#endif
}
diff --git a/Sora/Views/Post/Grid/PostGridThumbnailView.swift b/Sora/Views/Post/Grid/PostGridThumbnailView.swift
index 8816f67..0fe044a 100644
--- a/Sora/Views/Post/Grid/PostGridThumbnailView.swift
+++ b/Sora/Views/Post/Grid/PostGridThumbnailView.swift
@@ -32,8 +32,7 @@ struct PostGridThumbnailView: View {
}
}
.blur(
- radius: settings.blurNSFWThumbnails
- ? (post.rating != .safe && post.rating != .questionable) ? 10 : 0 : 0
+ radius: settings.blurRatings.contains(post.rating) ? 10 : 0
)
.clipped()
.animation(.default, value: settings.blurNSFWThumbnails)
diff --git a/Sora/Views/Post/Grid/PostGridView.swift b/Sora/Views/Post/Grid/PostGridView.swift
index faed038..08d9574 100644
--- a/Sora/Views/Post/Grid/PostGridView.swift
+++ b/Sora/Views/Post/Grid/PostGridView.swift
@@ -9,10 +9,7 @@ struct PostGridView: View {
private var isSearching
var filteredPosts: [BooruPost] {
- (settings.showNSFWPosts
- ? manager.posts
- : manager.posts
- .filter { $0.rating == .safe || $0.rating == .questionable })
+ manager.posts.filter { settings.displayRatings.contains($0.rating) }
.sorted { $0.id > $1.id }
}
diff --git a/Sora/Views/Settings/Section/SettingsContentRatingsView.swift b/Sora/Views/Settings/Section/SettingsContentRatingsView.swift
new file mode 100644
index 0000000..7053481
--- /dev/null
+++ b/Sora/Views/Settings/Section/SettingsContentRatingsView.swift
@@ -0,0 +1,74 @@
+import SwiftUI
+
+struct SettingsContentRatingsView: View {
+ @EnvironmentObject var settings: Settings
+
+ var body: some View {
+ List {
+ Section(header: Text("Display Content Ratings")) {
+ ForEach(BooruRating.allCases, id: \.self) { rating in
+ Toggle(
+ rating.rawValue,
+ isOn: Binding(
+ get: {
+ settings.displayRatings.contains(rating)
+ },
+ set: { isOn in
+ setRating(
+ ratingFor: &settings.displayRatings,
+ isOn: isOn,
+ rating: rating
+ )
+ }
+ )
+ )
+ }
+ }
+
+ Section(header: Text("Blur Content Ratings")) {
+ ForEach(BooruRating.allCases, id: \.self) { rating in
+ Toggle(
+ rating.rawValue,
+ isOn: Binding(
+ get: { settings.blurRatings.contains(rating) },
+ set: { isOn in
+ setRating(
+ ratingFor: &settings.blurRatings,
+ isOn: isOn,
+ rating: rating
+ )
+ }
+ )
+ )
+ }
+ }
+ }
+ .navigationTitle(Text("Content Filtering"))
+ #if !os(macOS)
+ .navigationBarTitleDisplayMode(.inline)
+ #endif
+ }
+
+ func setRating(
+ ratingFor: inout [BooruRating],
+ isOn: Bool,
+ rating: BooruRating
+ ) {
+ var newRatings = ratingFor
+
+ if isOn {
+ if !newRatings.contains(rating) {
+ newRatings.append(rating)
+ }
+ } else {
+ newRatings.removeAll { $0 == rating }
+ }
+
+ ratingFor = newRatings
+ }
+}
+
+#Preview {
+ SettingsContentRatingsView()
+ .environmentObject(Settings())
+}
diff --git a/Sora/Views/Settings/Section/SettingsThumbnailsView.swift b/Sora/Views/Settings/Section/SettingsThumbnailsView.swift
index f787e59..0491d04 100644
--- a/Sora/Views/Settings/Section/SettingsThumbnailsView.swift
+++ b/Sora/Views/Settings/Section/SettingsThumbnailsView.swift
@@ -22,10 +22,8 @@ struct SettingsThumbnailsView: View {
)
#endif
- Toggle("Show NSFW Posts", isOn: $settings.showNSFWPosts)
-
- if settings.showNSFWPosts {
- Toggle("Blur NSFW Thumbnails", isOn: $settings.blurNSFWThumbnails)
+ NavigationLink(destination: SettingsContentRatingsView()) {
+ Text("Content Filtering")
}
}
}
diff --git a/Sora/Views/Settings/SettingsView.swift b/Sora/Views/Settings/SettingsView.swift
index ab92a42..02f9e34 100644
--- a/Sora/Views/Settings/SettingsView.swift
+++ b/Sora/Views/Settings/SettingsView.swift
@@ -4,37 +4,39 @@ struct SettingsView: View {
@EnvironmentObject var settings: Settings
var body: some View {
- Form {
- Section(header: Text("Provider")) {
- SettingsProviderView()
- }
+ NavigationStack {
+ Form {
+ Section(header: Text("Provider")) {
+ SettingsProviderView()
+ }
- Section(header: Text("Thumbnails")) {
- SettingsThumbnailsView()
- }
+ Section(header: Text("Thumbnails")) {
+ SettingsThumbnailsView()
+ }
- Section(header: Text("Details")) {
- SettingsDetailsView()
- }
+ Section(header: Text("Details")) {
+ SettingsDetailsView()
+ }
- Section(header: Text("Search")) {
- SettingsSearchView()
- }
+ Section(header: Text("Search")) {
+ SettingsSearchView()
+ }
- Section(header: Text("Settings")) {
- Button("Reset to Defaults") {
- settings.resetToDefaults()
+ Section(header: Text("Settings")) {
+ Button("Reset to Defaults") {
+ settings.resetToDefaults()
+ }
}
- }
- Section(header: Text("Attributions")) {
- SettingsAttributionsView()
+ Section(header: Text("Attributions")) {
+ SettingsAttributionsView()
+ }
}
+ #if os(macOS)
+ .formStyle(.grouped)
+ #endif
+ .navigationTitle("Settings")
}
- #if os(macOS)
- .formStyle(.grouped)
- #endif
- .navigationTitle("Settings")
}
}