diff options
Diffstat (limited to 'Sora/Views/Settings')
| -rw-r--r-- | Sora/Views/Settings/Section/SettingsContentRatingsView.swift | 74 | ||||
| -rw-r--r-- | Sora/Views/Settings/Section/SettingsThumbnailsView.swift | 6 | ||||
| -rw-r--r-- | Sora/Views/Settings/SettingsView.swift | 48 |
3 files changed, 101 insertions, 27 deletions
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") } } |