Fix invoice image loading

This commit is contained in:
Ali 2022-07-06 14:25:24 +02:00
parent 47513f7c00
commit d4f4e10761

View File

@ -8,6 +8,7 @@ import TelegramPresentationData
import ItemListUI
import PresentationDataUtils
import PhotoResources
import Postbox
class BotCheckoutHeaderItem: ListViewItem, ItemListItem {
let account: Account
@ -77,6 +78,8 @@ class BotCheckoutHeaderItemNode: ListViewItemNode {
private var item: BotCheckoutHeaderItem?
private let fetchDisposable = MetaDisposable()
init() {
self.backgroundNode = ASDisplayNode()
self.backgroundNode.isLayerBacked = true
@ -119,6 +122,10 @@ class BotCheckoutHeaderItemNode: ListViewItemNode {
self.addSubnode(self.botNameNode)
}
deinit {
self.fetchDisposable.dispose()
}
func asyncLayout() -> (_ item: BotCheckoutHeaderItem, _ params: ListViewItemLayoutParams, _ neighbors: ItemListNeighbors) -> (ListViewItemNodeLayout, () -> Void) {
let makeTitleLayout = TextNode.asyncLayout(self.titleNode)
let makeTextLayout = TextNode.asyncLayout(self.textNode)
@ -159,12 +166,14 @@ class BotCheckoutHeaderItemNode: ListViewItemNode {
var imageApply: (() -> Void)?
var updatedImageSignal: Signal<(TransformImageArguments) -> DrawingContext?, NoError>?
var updatedFetchSignal: Signal<FetchResourceSourceType, FetchResourceError>?
if let photo = item.invoice.photo, let dimensions = photo.dimensions {
let arguments = TransformImageArguments(corners: ImageCorners(radius: 4.0), imageSize: dimensions.cgSize.aspectFilled(imageSize), boundingSize: imageSize, intrinsicInsets: UIEdgeInsets(), emptyColor: item.theme.list.mediaPlaceholderColor)
imageApply = makeImageLayout(arguments)
maxTextWidth = max(1.0, maxTextWidth - imageSize.width - imageTextSpacing)
if imageUpdated {
updatedImageSignal = chatWebFileImage(account: item.account, file: photo)
updatedFetchSignal = fetchedMediaResource(mediaBox: item.account.postbox.mediaBox, reference: .standalone(resource: photo.resource))
}
}
@ -206,6 +215,9 @@ class BotCheckoutHeaderItemNode: ListViewItemNode {
if let updatedImageSignal = updatedImageSignal {
strongSelf.imageNode.setSignal(updatedImageSignal)
}
if let updatedFetchSignal = updatedFetchSignal {
strongSelf.fetchDisposable.set(updatedFetchSignal.start())
}
strongSelf.imageNode.isHidden = false
} else {
strongSelf.imageNode.isHidden = true