This commit makes a few changes: - Link preview views are no longer cached, only the metadata. This fixes a memory leak when preview videos. It will keep playing the video forever eventually leading to a crash. This is fixed! - Cache the intrinsic height of previews, when loading notes it looks for the cached height so that things don't pop-in after the fact - Note artifacts and previews are set in the constructor instead of onAppear, this prevents the size from changing and popping after it has been loaded into the lazyvstack Changelog-Fixed: Fix memory leak with inline videos Changelog-Fixed: Eliminate popping when scrolling
46 lines
999 B
Swift
46 lines
999 B
Swift
//
|
|
// LinkView.swift
|
|
// damus
|
|
//
|
|
// Created by Sam DuBois on 12/27/22.
|
|
//
|
|
|
|
import SwiftUI
|
|
import LinkPresentation
|
|
|
|
class CustomLinkView: LPLinkView {
|
|
override var intrinsicContentSize: CGSize { CGSize(width: 0, height: super.intrinsicContentSize.height) }
|
|
|
|
}
|
|
|
|
enum Metadata {
|
|
case linkmeta(CachedMetadata)
|
|
case url(URL)
|
|
}
|
|
|
|
struct LinkViewRepresentable: UIViewRepresentable {
|
|
|
|
typealias UIViewType = CustomLinkView
|
|
|
|
let meta: Metadata
|
|
|
|
func makeUIView(context: Context) -> CustomLinkView {
|
|
switch meta {
|
|
case .linkmeta(let linkmeta):
|
|
return CustomLinkView(metadata: linkmeta.meta)
|
|
case .url(let url):
|
|
return CustomLinkView(url: url)
|
|
}
|
|
}
|
|
|
|
func updateUIView(_ uiView: CustomLinkView, context: Context) {
|
|
switch meta {
|
|
case .linkmeta(let cached):
|
|
cached.intrinsic_height = uiView.intrinsicContentSize.height
|
|
case .url:
|
|
return
|
|
}
|
|
|
|
}
|
|
}
|