mastodon-ios/MastodonSDK/Sources/MastodonUI/View/Content/NewsView+Configuration.swift

64 lines
2.2 KiB
Swift

//
// NewsView+Configuration.swift
//
//
// Created by MainasuK on 2022-4-13.
//
import UIKit
import Combine
import MastodonSDK
import MastodonLocalization
import AlamofireImage
import FaviconFinder
extension NewsView {
public func configure(link: Mastodon.Entity.Link) {
let faviconPlaceholder = UIImage(systemName: "network")
providerFaviconImageView.image = faviconPlaceholder
if let url = URL(string: link.url) {
let token = providerFaviconImageView.tag
FaviconFinder(url: url).downloadFavicon { [weak self] result in
guard let self = self else { return }
switch result {
case .success(let favicon):
DispatchQueue.main.async { [weak self] in
guard let self = self else { return }
guard self.providerFaviconImageView.tag == token else { return }
self.providerFaviconImageView.image = favicon.image
}
case .failure:
break
}
}
}
providerNameLabel.text = link.providerName
headlineLabel.text = link.title
footnoteLabel.text = L10n.Plural.peopleTalking(link.talkingPeopleCount ?? 0)
let configuration = MediaView.Configuration(
info: .image(info: .init(
aspectRadio: CGSize(width: link.width, height: link.height),
assetURL: link.image
)),
blurhash: link.blurhash
)
imageView.setup(configuration: configuration)
if let previewURL = configuration.previewURL,
let url = URL(string: previewURL)
{
let placeholder = UIImage.placeholder(color: .systemGray6)
let request = URLRequest(url: url)
ImageDownloader.default.download(request, completion: { response in
switch response.result {
case .success(let image):
configuration.previewImage = image
case .failure:
configuration.previewImage = placeholder
}
})
}
} // end func
}