// // StatusTableViewCell.swift // Tusker // // Created by Shadowfacts on 8/16/18. // Copyright © 2018 Shadowfacts. All rights reserved. // import UIKit import MastodonKit import SwiftSoup protocol StatusTableViewCellDelegate { func selected(mention: Mention) func selected(tag: MastodonKit.Tag) func selected(url: URL) } class StatusTableViewCell: UITableViewCell { var delegate: StatusTableViewCellDelegate? @IBOutlet weak var displayNameLabel: UILabel! @IBOutlet weak var usernameLabel: UILabel! @IBOutlet weak var contentLabel: StatusContentLabel! @IBOutlet weak var avatarImageView: UIImageView! var status: Status! var avatarURL: URL? var layoutManager: NSLayoutManager! var textContainer: NSTextContainer! var textStorage: NSTextStorage! var links: [NSRange: URL] = [:] func updateUI(for status: Status) { self.status = status let account: Account if let reblog = status.reblog { account = reblog.account } else { account = status.account } displayNameLabel.text = account.displayName usernameLabel.text = "@\(account.acct)" avatarImageView.layer.cornerRadius = 5 avatarImageView.layer.masksToBounds = true avatarImageView.image = nil if let url = URL(string: account.avatar) { AvatarCache.shared.get(url) { image in DispatchQueue.main.async { self.avatarImageView.image = image } } } contentLabel.status = status contentLabel.delegate = self } override func prepareForReuse() { if let url = avatarURL { AvatarCache.shared.cancel(url) } } } extension StatusTableViewCell: StatusContentLabelDelegate { func selected(mention: Mention) { delegate?.selected(mention: mention) } func selected(tag: MastodonKit.Tag) { delegate?.selected(tag: tag) } func selected(url: URL) { delegate?.selected(url: url) } }