summaryrefslogtreecommitdiff
path: root/Sora/Views/Settings/Section/SettingsSectionContentRatingsView.swift
blob: 85b28af11b0e3f746bf50a2b0771bb4c66eaa99c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import SwiftUI

struct SettingsSectionContentRatingsView: View {
  @EnvironmentObject var settings: SettingsManager

  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 {
  SettingsSectionContentRatingsView()
    .environmentObject(SettingsManager())
}