mastodon-ios/CoreDataStack/Entity/Attachment.swift

127 lines
3.7 KiB
Swift

//
// Attachment.swift
// CoreDataStack
//
// Created by MainasuK Cirno on 2021-2-23.
//
import CoreData
import Foundation
public final class Attachment: NSManagedObject {
public typealias ID = String
@NSManaged public private(set) var id: ID
@NSManaged public private(set) var domain: String
@NSManaged public private(set) var typeRaw: String
@NSManaged public private(set) var url: String
@NSManaged public private(set) var previewURL: String?
@NSManaged public private(set) var remoteURL: String?
@NSManaged public private(set) var metaData: Data?
@NSManaged public private(set) var textURL: String?
@NSManaged public private(set) var descriptionString: String?
@NSManaged public private(set) var blurhash: String?
@NSManaged public private(set) var createdAt: Date
@NSManaged public private(set) var updatedAt: Date
@NSManaged public private(set) var index: NSNumber
// many-to-one relationship
@NSManaged public private(set) var status: Status?
}
public extension Attachment {
override func awakeFromInsert() {
super.awakeFromInsert()
setPrimitiveValue(Date(), forKey: #keyPath(Attachment.createdAt))
}
@discardableResult
static func insert(
into context: NSManagedObjectContext,
property: Property
) -> Attachment {
let attachment: Attachment = context.insertObject()
attachment.domain = property.domain
attachment.index = property.index
attachment.id = property.id
attachment.typeRaw = property.typeRaw
attachment.url = property.url
attachment.previewURL = property.previewURL
attachment.remoteURL = property.remoteURL
attachment.metaData = property.metaData
attachment.textURL = property.textURL
attachment.descriptionString = property.descriptionString
attachment.blurhash = property.blurhash
attachment.updatedAt = property.networkDate
return attachment
}
func didUpdate(at networkDate: Date) {
self.updatedAt = networkDate
}
}
public extension Attachment {
struct Property {
public let domain: String
public let index: NSNumber
public let id: ID
public let typeRaw: String
public let url: String
public let previewURL: String?
public let remoteURL: String?
public let metaData: Data?
public let textURL: String?
public let descriptionString: String?
public let blurhash: String?
public let networkDate: Date
public init(
domain: String,
index: Int,
id: Attachment.ID,
typeRaw: String,
url: String,
previewURL: String?,
remoteURL: String?,
metaData: Data?,
textURL: String?,
descriptionString: String?,
blurhash: String?,
networkDate: Date
) {
self.domain = domain
self.index = NSNumber(value: index)
self.id = id
self.typeRaw = typeRaw
self.url = url
self.previewURL = previewURL
self.remoteURL = remoteURL
self.metaData = metaData
self.textURL = textURL
self.descriptionString = descriptionString
self.blurhash = blurhash
self.networkDate = networkDate
}
}
}
extension Attachment: Managed {
public static var defaultSortDescriptors: [NSSortDescriptor] {
return [NSSortDescriptor(keyPath: \Attachment.createdAt, ascending: false)]
}
}