88 lines
3.0 KiB
Swift
88 lines
3.0 KiB
Swift
|
//
|
||
|
// 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)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|