mirror of
https://github.com/SideStore/SideStore.git
synced 2026-02-12 08:13:26 +01:00
Fix enum to objc core data for app permission
This commit is contained in:
@@ -68,9 +68,30 @@ public extension ALTAppPermissionType {
|
||||
}
|
||||
|
||||
@objc(AppPermission)
|
||||
public class AppPermission: NSManagedObject, Decodable, Fetchable {
|
||||
public class AppPermission: NSManagedObject, Decodable, Fetchable, NSKeyValueObservingCustomization {
|
||||
public static func keyPathsAffectingValue(for key: AnyKeyPath) -> Set<AnyKeyPath> {
|
||||
print("keyPathsAffectingValue: \(String(describing: key))")
|
||||
return Set<AnyKeyPath>([key])
|
||||
}
|
||||
|
||||
public static func automaticallyNotifiesObservers(for key: AnyKeyPath) -> Bool {
|
||||
print("automaticallyNotifiesObservers: \(String(describing: key))")
|
||||
return true
|
||||
}
|
||||
|
||||
/* Properties */
|
||||
@NSManaged public var type: ALTAppPermissionType
|
||||
@objc(type)
|
||||
@NSManaged public var _type: String
|
||||
@nonobjc
|
||||
public var type: ALTAppPermissionType {
|
||||
get {
|
||||
ALTAppPermissionType(rawValue: _type)
|
||||
}
|
||||
set {
|
||||
_type = newValue.stringValue
|
||||
}
|
||||
}
|
||||
|
||||
@NSManaged public var usageDescription: String
|
||||
|
||||
/* Relationships */
|
||||
@@ -95,11 +116,13 @@ public class AppPermission: NSManagedObject, Decodable, Fetchable {
|
||||
usageDescription = try container.decode(String.self, forKey: .usageDescription)
|
||||
|
||||
let rawType = try container.decode(String.self, forKey: .type)
|
||||
guard let type = ALTAppPermissionType(rawValue: rawType) else {
|
||||
throw DecodingError.dataCorrupted(
|
||||
DecodingError.Context(codingPath: [CodingKeys.type],
|
||||
debugDescription: "Invalid value for `ALTAppPermissionType` \"\(rawType)\""))
|
||||
}
|
||||
// guard
|
||||
let type = ALTAppPermissionType(rawValue: rawType)
|
||||
// else {
|
||||
// throw DecodingError.dataCorrupted(
|
||||
// DecodingError.Context(codingPath: [CodingKeys.type],
|
||||
// debugDescription: "Invalid value for `ALTAppPermissionType` \"\(rawType)\""))
|
||||
// }
|
||||
self.type = type
|
||||
} catch {
|
||||
if let context = managedObjectContext {
|
||||
|
||||
@@ -27,8 +27,9 @@ public enum ALTAppPermissionType: Int, CaseIterable {
|
||||
case faceID
|
||||
case siri
|
||||
case motion
|
||||
case null
|
||||
|
||||
public init?(rawValue: String) {
|
||||
public init(rawValue: String) {
|
||||
switch rawValue {
|
||||
case "photos": self = .photos
|
||||
case "camera": self = .camera
|
||||
@@ -47,7 +48,7 @@ public enum ALTAppPermissionType: Int, CaseIterable {
|
||||
case "faceID", "faceid": self = .faceID
|
||||
case "siri": self = .siri
|
||||
case "motion": self = .motion
|
||||
default: return nil
|
||||
default: self = .null
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,6 +88,21 @@ public enum ALTAppPermissionType: Int, CaseIterable {
|
||||
return "siri"
|
||||
case .motion:
|
||||
return "motion"
|
||||
}
|
||||
case .null:
|
||||
return ""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@objc
|
||||
public final class ALTAppPermissionTypeTransformer: ValueTransformer {
|
||||
public override func transformedValue(_ value: Any?) -> Any? {
|
||||
guard let enumValue = value as? ALTAppPermissionType else { return "" }
|
||||
return enumValue.rawValue
|
||||
}
|
||||
|
||||
public override func reverseTransformedValue(_ value: Any?) -> Any? {
|
||||
guard let rawValue = value as? String else { return ALTAppPermissionType.null }
|
||||
return ALTAppPermissionType(rawValue: rawValue)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user