// // FollowNotificationTableViewCell.swift // Tusker // // Created by Shadowfacts on 9/2/18. // Copyright © 2018 Shadowfacts. All rights reserved. // import UIKit import MastodonKit class FollowNotificationTableViewCell: UITableViewCell, PreferencesAdaptive { var delegate: StatusTableViewCellDelegate? @IBOutlet weak var followLabel: UILabel! @IBOutlet weak var timestampLabel: UILabel! @IBOutlet weak var avatarImageView: UIImageView! @IBOutlet weak var displayNameLabel: UILabel! @IBOutlet weak var usernameLabel: UILabel! var notification: MastodonKit.Notification! var account: Account! var avatarURL: URL? var updateTimestampWorkItem: DispatchWorkItem? override func awakeFromNib() { super.awakeFromNib() avatarImageView.layer.masksToBounds = true } func updateUIForPreferences() { avatarImageView.layer.cornerRadius = Preferences.shared.avatarStyle.cornerRadius(for: avatarImageView) followLabel.text = "Followed by \(account.realDisplayName)" displayNameLabel.text = account.realDisplayName } func updateUI(for notification: MastodonKit.Notification) { self.notification = notification self.account = notification.account updateUIForPreferences() usernameLabel.text = "@\(account.acct)" avatarImageView.image = nil if let url = URL(string: account.avatar) { avatarURL = url AvatarCache.shared.get(url) { image in DispatchQueue.main.async { self.avatarImageView.image = image self.avatarURL = nil } } } updateTimestamp() } func updateTimestamp() { timestampLabel.text = notification.createdAt.timeAgoString() let delay: DispatchTimeInterval? switch notification.createdAt.timeAgo().1 { case .second: delay = .seconds(10) case .minute: delay = .seconds(60) default: delay = nil } if let delay = delay { updateTimestampWorkItem = DispatchWorkItem { self.updateTimestamp() } DispatchQueue.main.asyncAfter(deadline: .now() + delay, execute: updateTimestampWorkItem!) } else { updateTimestampWorkItem = nil } } override func prepareForReuse() { if let url = avatarURL { AvatarCache.shared.cancel(url) } updateTimestampWorkItem?.cancel() updateTimestampWorkItem = nil } override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) if selected { delegate?.selected(account: account) } } }