summaryrefslogtreecommitdiff
path: root/Sora/Data
diff options
context:
space:
mode:
Diffstat (limited to 'Sora/Data')
-rw-r--r--Sora/Data/Booru/BooruRating.swift8
-rw-r--r--Sora/Data/Settings/Settings.swift36
2 files changed, 40 insertions, 4 deletions
diff --git a/Sora/Data/Booru/BooruRating.swift b/Sora/Data/Booru/BooruRating.swift
index 8327868..f4814e8 100644
--- a/Sora/Data/Booru/BooruRating.swift
+++ b/Sora/Data/Booru/BooruRating.swift
@@ -1,7 +1,7 @@
-enum BooruRating {
- case explicit
- case questionable
- case safe
+enum BooruRating: String, CaseIterable, Decodable, Encodable {
+ case explicit = "Explicit"
+ case questionable = "Questionable"
+ case safe = "Safe"
init(_ string: String) {
switch string {
diff --git a/Sora/Data/Settings/Settings.swift b/Sora/Data/Settings/Settings.swift
index 5aac056..d925f62 100644
--- a/Sora/Data/Settings/Settings.swift
+++ b/Sora/Data/Settings/Settings.swift
@@ -33,6 +33,12 @@ class Settings: ObservableObject {
@AppStorage("enableShareShortcut")
var enableShareShortcut: Bool = false
+ @AppStorage("displayRatings")
+ private var displayRatingsData: Data = Settings.initialiseRatingsData()
+
+ @AppStorage("blurRatings")
+ private var blurRatingsData: Data = Settings.initialiseRatingsData()
+
var bookmarks: [Bookmark] {
get {
if let bookmarks = try? JSONDecoder().decode([Bookmark].self, from: bookmarksData) {
@@ -49,6 +55,36 @@ class Settings: ObservableObject {
}
}
+ var displayRatings: [BooruRating] {
+ get { Self.decodeRatings(from: displayRatingsData) }
+ set { if let data = Self.encodeRatings(newValue) { displayRatingsData = data } }
+ }
+
+ var blurRatings: [BooruRating] {
+ get { Self.decodeRatings(from: blurRatingsData) }
+ set { if let data = Self.encodeRatings(newValue) { blurRatingsData = data } }
+ }
+
+ private static func initialiseRatingsData() -> Data {
+ do {
+ return try JSONEncoder().encode(BooruRating.allCases)
+ } catch {
+ return Data()
+ }
+ }
+
+ private static func decodeRatings(from data: Data) -> [BooruRating] {
+ if let ratings = try? JSONDecoder().decode([BooruRating].self, from: data) {
+ return ratings
+ }
+
+ return BooruRating.allCases
+ }
+
+ private static func encodeRatings(_ ratings: [BooruRating]) -> Data? {
+ try? JSONEncoder().encode(ratings)
+ }
+
func resetToDefaults() {
#if DEBUG
detailViewType = .preview