2020-04-11 19:31:37 +00:00
|
|
|
//
|
|
|
|
// AccountMO.swift
|
|
|
|
// Tusker
|
|
|
|
//
|
|
|
|
// Created by Shadowfacts on 4/11/20.
|
|
|
|
// Copyright © 2020 Shadowfacts. All rights reserved.
|
|
|
|
//
|
|
|
|
//
|
|
|
|
|
|
|
|
import Foundation
|
|
|
|
import CoreData
|
2020-04-11 19:33:39 +00:00
|
|
|
import Pachyderm
|
2020-04-11 19:31:37 +00:00
|
|
|
|
|
|
|
@objc(AccountMO)
|
2020-04-12 02:23:31 +00:00
|
|
|
public final class AccountMO: NSManagedObject {
|
2020-04-11 19:31:37 +00:00
|
|
|
|
|
|
|
@nonobjc public class func fetchRequest() -> NSFetchRequest<AccountMO> {
|
|
|
|
return NSFetchRequest<AccountMO>(entityName: "Account")
|
|
|
|
}
|
|
|
|
|
2020-04-12 02:23:31 +00:00
|
|
|
@NSManaged public var acct: String
|
|
|
|
@NSManaged public var avatar: URL
|
2020-04-11 19:31:37 +00:00
|
|
|
@NSManaged public var bot: Bool
|
2020-04-12 02:23:31 +00:00
|
|
|
@NSManaged public var createdAt: Date
|
|
|
|
@NSManaged public var displayName: String
|
|
|
|
@NSManaged private var emojisData: Data?
|
|
|
|
@NSManaged private var fieldsData: Data?
|
|
|
|
@NSManaged public var followersCount: Int
|
|
|
|
@NSManaged public var followingCount: Int
|
|
|
|
@NSManaged public var header: URL
|
|
|
|
@NSManaged public var id: String
|
2020-04-11 19:31:37 +00:00
|
|
|
@NSManaged public var locked: Bool
|
|
|
|
@NSManaged public var moved: Bool
|
2020-04-12 02:23:31 +00:00
|
|
|
@NSManaged public var note: String
|
|
|
|
@NSManaged public var statusesCount: Int
|
|
|
|
@NSManaged public var url: URL
|
|
|
|
@NSManaged public var username: String
|
2020-04-11 19:31:37 +00:00
|
|
|
@NSManaged public var movedTo: AccountMO?
|
|
|
|
|
2020-04-11 19:33:39 +00:00
|
|
|
@LazilyDecoding(arrayFrom: \AccountMO.emojisData)
|
|
|
|
var emojis: [Emoji]
|
|
|
|
|
|
|
|
@LazilyDecoding(arrayFrom: \AccountMO.fieldsData)
|
|
|
|
var fields: [Account.Field]
|
|
|
|
|
2020-04-11 19:31:37 +00:00
|
|
|
}
|
2020-04-12 02:23:31 +00:00
|
|
|
|
|
|
|
extension AccountMO {
|
|
|
|
convenience init(apiAccount account: Pachyderm.Account, container: MastodonCachePersistentStore, context: NSManagedObjectContext) {
|
|
|
|
self.init(context: context)
|
|
|
|
self.updateFrom(apiAccount: account, container: container)
|
|
|
|
}
|
|
|
|
|
|
|
|
func updateFrom(apiAccount account: Pachyderm.Account, container: MastodonCachePersistentStore) {
|
|
|
|
guard let context = managedObjectContext else {
|
|
|
|
// we've been deleted, don't bother updating
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
self.acct = account.acct
|
2020-04-12 16:54:27 +00:00
|
|
|
self.avatar = account.avatarStatic // we don't animate avatars
|
2020-04-12 02:23:31 +00:00
|
|
|
self.bot = account.bot ?? false
|
|
|
|
self.createdAt = account.createdAt
|
|
|
|
self.displayName = account.displayName
|
|
|
|
self.emojis = account.emojis
|
|
|
|
self.fields = account.fields ?? []
|
|
|
|
self.followersCount = account.followersCount
|
|
|
|
self.followingCount = account.followingCount
|
2020-04-12 16:54:27 +00:00
|
|
|
self.header = account.headerStatic // we don't animate headers
|
2020-04-12 02:23:31 +00:00
|
|
|
self.id = account.id
|
|
|
|
self.locked = account.locked
|
|
|
|
self.moved = account.moved ?? false
|
|
|
|
self.note = account.note
|
|
|
|
self.statusesCount = account.statusesCount
|
|
|
|
self.url = account.url
|
|
|
|
self.username = account.username
|
|
|
|
if let movedTo = account.movedTo {
|
|
|
|
self.movedTo = container.account(for: movedTo.id, in: context) ?? AccountMO(apiAccount: movedTo, container: container, context: context)
|
|
|
|
} else {
|
|
|
|
self.movedTo = nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|