@@ -129,7 +129,7 @@ class Preferences {
129129 static var hideWindowlessApps : Bool { defaults. bool ( " hideWindowlessApps " ) }
130130 // periphery:ignore
131131 static var startAtLogin : Bool { defaults. bool ( " startAtLogin " ) }
132- static var blacklist : [ BlacklistEntry ] { jsonDecode ( [ BlacklistEntry ] . self , defaults. string ( " blacklist " ) ) }
132+ static var blacklist : [ BlacklistEntry ] { defaults. json ( " blacklist " , [ BlacklistEntry ] . self ) }
133133 static var previewFocusedWindow : Bool { defaults. bool ( " previewFocusedWindow " ) }
134134 static var screenRecordingPermissionSkipped : Bool { defaults. bool ( " screenRecordingPermissionSkipped " ) }
135135
@@ -424,10 +424,6 @@ class Preferences {
424424 } )
425425 }
426426
427- static func jsonDecode< T> ( _ type: T . Type , _ value: String ) -> T where T: Decodable {
428- return try ! JSONDecoder ( ) . decode ( type, from: value. data ( using: . utf8) !)
429- }
430-
431427 static func jsonEncode< T> ( _ value: T ) -> String where T: Encodable {
432428 return String ( data: try ! JSONEncoder ( ) . encode ( value) , encoding: . utf8) !
433429 }
@@ -1075,10 +1071,10 @@ enum CrashPolicyPreference: CaseIterable, MacroPreference {
10751071 }
10761072}
10771073
1078- enum BlacklistHidePreference : CaseIterable , MacroPreference , Codable {
1079- case none
1080- case always
1081- case whenNoOpenWindow
1074+ enum BlacklistHidePreference : String /* required for jsonEncode */ , CaseIterable , MacroPreference , Codable {
1075+ case none = " 0 "
1076+ case always = " 1 "
1077+ case whenNoOpenWindow = " 2 "
10821078
10831079 var localizedString : LocalizedString {
10841080 switch self {
@@ -1089,10 +1085,10 @@ enum BlacklistHidePreference: CaseIterable, MacroPreference, Codable {
10891085 }
10901086}
10911087
1092- enum BlacklistIgnorePreference : CaseIterable , MacroPreference , Codable {
1093- case none
1094- case always
1095- case whenFullscreen
1088+ enum BlacklistIgnorePreference : String /* required for jsonEncode */ , CaseIterable , MacroPreference , Codable {
1089+ case none = " 0 "
1090+ case always = " 1 "
1091+ case whenFullscreen = " 2 "
10961092
10971093 var localizedString : LocalizedString {
10981094 switch self {
@@ -1152,4 +1148,12 @@ extension UserDefaults {
11521148 func macroPref< A> ( _ key: String , _ macroPreferences: [ A ] ) -> A {
11531149 return getThenConvertOrReset ( key, { s in Int ( s) . flatMap { macroPreferences [ safe: $0] } } )
11541150 }
1151+
1152+ func json< T> ( _ key: String , _ type: T . Type ) -> T where T: Decodable {
1153+ return getThenConvertOrReset ( key, { s in jsonDecode ( s, type) } )
1154+ }
1155+
1156+ private func jsonDecode< T> ( _ value: String , _ type: T . Type ) -> T ? where T: Decodable {
1157+ return value. data ( using: . utf8) . flatMap { try ? JSONDecoder ( ) . decode ( type, from: $0) }
1158+ }
11551159}
0 commit comments