Blur link card images when status is sensitive

Closes #412
This commit is contained in:
Shadowfacts 2023-06-26 21:35:15 -07:00
parent c3cf38b0c9
commit 28ee0908d7
2 changed files with 43 additions and 3 deletions

View File

@ -46,6 +46,13 @@ class CachedImageView: UIImageView {
}
}
func showOnlyBlurHash(_ blurhash: String, for url: URL) {
if url != self.url {
self.url = url
updateBlurhash(blurhash, for: url)
}
}
@objc private func preferencesChanged() {
if isGrayscale != Preferences.shared.grayscaleImages {
updateImage()

View File

@ -30,7 +30,7 @@ class StatusCardView: UIView {
private var titleLabel: UILabel!
private var descriptionLabel: UILabel!
private var domainLabel: UILabel!
private var imageView: CachedImageView!
private var imageView: StatusCardImageView!
private var placeholderImageView: UIImageView!
private var leadingSpacer: UIView!
private var trailingSpacer: UIView!
@ -80,7 +80,7 @@ class StatusCardView: UIView {
vStack.alignment = .leading
vStack.spacing = 0
imageView = CachedImageView(cache: .attachments)
imageView = StatusCardImageView(cache: .attachments)
imageView.contentMode = .scaleAspectFill
imageView.clipsToBounds = true
@ -167,7 +167,18 @@ class StatusCardView: UIView {
}
if let image = card.image {
if status.sensitive {
if let blurhash = card.blurhash {
imageView.blurImage = false
imageView.showOnlyBlurHash(blurhash, for: URL(image)!)
} else {
// if we don't have a blurhash, load the image and show it behind a blur
imageView.blurImage = true
imageView.update(for: URL(image), blurhash: nil)
}
} else {
imageView.update(for: URL(image), blurhash: card.blurhash)
}
imageView.isHidden = false
leadingSpacer.isHidden = true
} else {
@ -257,3 +268,25 @@ extension StatusCardView: UIContextMenuInteractionDelegate {
}
}
}
private class StatusCardImageView: CachedImageView {
@Lazy private var blurView = UIVisualEffectView(effect: UIBlurEffect(style: .dark))
var blurImage = false {
didSet {
if blurImage {
if !_blurView.isInitialized {
blurView.translatesAutoresizingMaskIntoConstraints = false
addSubview(blurView)
NSLayoutConstraint.activate([
blurView.leadingAnchor.constraint(equalTo: leadingAnchor),
blurView.trailingAnchor.constraint(equalTo: trailingAnchor),
blurView.topAnchor.constraint(equalTo: topAnchor),
blurView.bottomAnchor.constraint(equalTo: bottomAnchor),
])
}
} else {
_blurView.valueIfInitialized?.removeFromSuperview()
}
}
}
}