This commit is contained in:
Ali 2022-02-27 22:22:37 +04:00
parent 12a2c1c948
commit 14a58a25e8
2 changed files with 54 additions and 2 deletions

View File

@ -925,6 +925,7 @@ final class ChatListSearchListPaneNode: ASDisplayNode, ChatListSearchPaneNode {
let downloadItems: Signal<(inProgressItems: [DownloadItem], doneItems: [RenderedRecentDownloadItem]), NoError>
if key == .downloads {
var firstTime = true
downloadItems = combineLatest(queue: .mainQueue(), (context.fetchManager as! FetchManagerImpl).entriesSummary, recentDownloadItems(postbox: context.account.postbox))
|> mapToSignal { entries, recentDownloadItems -> Signal<(inProgressItems: [DownloadItem], doneItems: [RenderedRecentDownloadItem]), NoError> in
var itemSignals: [Signal<DownloadItem?, NoError>] = []
@ -947,7 +948,15 @@ final class ChatListSearchListPaneNode: ASDisplayNode, ChatListSearchPaneNode {
|> map { items -> (inProgressItems: [DownloadItem], doneItems: [RenderedRecentDownloadItem]) in
return (items.compactMap { $0 }, recentDownloadItems)
}
|> delay(0.1, queue: .mainQueue())
|> mapToSignal { value -> Signal<(inProgressItems: [DownloadItem], doneItems: [RenderedRecentDownloadItem]), NoError> in
if firstTime {
firstTime = false
return .single(value)
} else {
return .single(value)
|> delay(0.1, queue: .mainQueue())
}
}
}
} else {
downloadItems = .single(([], []))

View File

@ -3,6 +3,27 @@ import ComponentFlow
import Lottie
import AppBundle
private final class NullActionClass: NSObject, CAAction {
@objc public func run(forKey event: String, object anObject: Any, arguments dict: [AnyHashable : Any]?) {
}
}
private let nullAction = NullActionClass()
private final class HierarchyTrackingLayer: CALayer {
var didEnterHierarchy: (() -> Void)?
var didExitHierarchy: (() -> Void)?
override func action(forKey event: String) -> CAAction? {
if event == kCAOnOrderIn {
self.didEnterHierarchy?()
} else if event == kCAOnOrderOut {
self.didExitHierarchy?()
}
return nullAction
}
}
public final class LottieAnimationComponent: Component {
public struct Animation: Equatable {
public var name: String
@ -40,6 +61,28 @@ public final class LottieAnimationComponent: Component {
private var colorCallbacks: [LOTColorValueCallback] = []
private var animationView: LOTAnimationView?
private let hierarchyTrackingLayer: HierarchyTrackingLayer
override init(frame: CGRect) {
self.hierarchyTrackingLayer = HierarchyTrackingLayer()
super.init(frame: frame)
self.layer.addSublayer(self.hierarchyTrackingLayer)
self.hierarchyTrackingLayer.didEnterHierarchy = { [weak self] in
guard let strongSelf = self, let animationView = strongSelf.animationView else {
return
}
if animationView.loopAnimation {
animationView.play()
}
}
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func update(component: LottieAnimationComponent, availableSize: CGSize, transition: Transition) -> CGSize {
if self.currentAnimation != component.animation {
if let animationView = self.animationView, animationView.isAnimationPlaying {
@ -98,7 +141,7 @@ public final class LottieAnimationComponent: Component {
}
public func makeView() -> View {
return View()
return View(frame: CGRect())
}
public func update(view: View, availableSize: CGSize, state: EmptyComponentState, environment: Environment<Empty>, transition: Transition) -> CGSize {