// // FeaturedProfileCollectionViewCell.swift // Tusker // // Created by Shadowfacts on 2/6/21. // Copyright © 2021 Shadowfacts. All rights reserved. // import UIKit import Pachyderm class FeaturedProfileCollectionViewCell: UICollectionViewCell { @IBOutlet weak var headerImageView: UIImageView! @IBOutlet weak var avatarContainerView: UIView! @IBOutlet weak var avatarImageView: UIImageView! @IBOutlet weak var displayNameLabel: EmojiLabel! @IBOutlet weak var noteTextView: StatusContentTextView! var account: Account? private var avatarRequest: ImageCache.Request? private var headerRequest: ImageCache.Request? override func awakeFromNib() { super.awakeFromNib() avatarContainerView.layer.cornerRadius = Preferences.shared.avatarStyle.cornerRadius(for: avatarContainerView) avatarImageView.layer.cornerRadius = Preferences.shared.avatarStyle.cornerRadius(for: avatarImageView) noteTextView.defaultFont = .systemFont(ofSize: 16) noteTextView.textContainer.lineBreakMode = .byTruncatingTail NotificationCenter.default.addObserver(self, selector: #selector(preferencesChanged), name: .preferencesChanged, object: nil) } func updateUI(account: Account) { self.account = account displayNameLabel.updateForAccountDisplayName(account: account) noteTextView.setTextFromHtml(account.note) noteTextView.setEmojis(account.emojis) avatarImageView.image = nil avatarRequest = ImageCache.avatars.get(account.avatar) { [weak self] (_, image) in defer { self?.avatarRequest = nil } guard let self = self, let image = image, self.account?.id == account.id else { return } DispatchQueue.main.async { self.avatarImageView.image = image } } headerImageView.image = nil if let header = account.header { headerRequest = ImageCache.headers.get(header) { [weak self] (_, image) in defer { self?.headerRequest = nil } guard let self = self, let image = image, self.account?.id == account.id else { return } DispatchQueue.main.async { self.headerImageView.image = image } } } } @objc private func preferencesChanged() { avatarContainerView.layer.cornerRadius = Preferences.shared.avatarStyle.cornerRadius(for: avatarContainerView) avatarImageView.layer.cornerRadius = Preferences.shared.avatarStyle.cornerRadius(for: avatarImageView) if let account = account { displayNameLabel.updateForAccountDisplayName(account: account) } } }