Tusker/Tusker/CoreData/FilterMO.swift

67 lines
1.8 KiB
Swift

//
// FilterMO.swift
// Tusker
//
// Created by Shadowfacts on 11/30/22.
// Copyright © 2022 Shadowfacts. All rights reserved.
//
import Foundation
import CoreData
import Pachyderm
@objc(FilterMO)
public final class FilterMO: NSManagedObject, FilterProtocol {
@nonobjc public class func fetchRequest() -> NSFetchRequest<FilterMO> {
return NSFetchRequest(entityName: "Filter")
}
@NSManaged public var id: String
@NSManaged public var phrase: String
@NSManaged private var context: String
@NSManaged public var expiresAt: Date?
@NSManaged public var irreversible: Bool
@NSManaged public var wholeWord: Bool
private var _contexts: [Filter.Context]?
public var contexts: [Filter.Context] {
get {
if let _contexts {
return _contexts
} else {
_contexts = context.split(separator: ",").compactMap { .init(rawValue: String($0)) }
return _contexts!
}
}
set {
_contexts = newValue
context = newValue.map(\.rawValue).joined(separator: ",")
}
}
public override func didChangeValue(forKey key: String) {
super.didChangeValue(forKey: key)
if key == "context" {
_contexts = nil
}
}
}
extension FilterMO {
convenience init(apiFilter filter: Filter, context: NSManagedObjectContext) {
self.init(context: context)
self.updateFrom(apiFilter: filter)
}
func updateFrom(apiFilter filter: Filter) {
self.id = filter.id
self.phrase = filter.phrase
self.contexts = filter.contexts
self.expiresAt = filter.expiresAt
self.irreversible = filter.irreversible
self.wholeWord = filter.wholeWord
}
}