Video chat improvements

This commit is contained in:
Isaac
2024-10-01 21:26:30 +08:00
parent 5eeb6088f7
commit fab8c09a37
17 changed files with 468 additions and 129 deletions

View File

@@ -680,22 +680,6 @@ public class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewI
override public var visibility: ListViewItemNodeVisibility {
didSet {
if self.visibility != oldValue {
for contentNode in self.contentNodes {
contentNode.visibility = mapVisibility(self.visibility, boundsSize: self.bounds.size, insets: self.insets, to: contentNode)
}
if let threadInfoNode = self.threadInfoNode {
threadInfoNode.visibility = self.visibility != .none
}
if let replyInfoNode = self.replyInfoNode {
replyInfoNode.visibility = self.visibility != .none
}
if let unlockButtonNode = self.unlockButtonNode {
unlockButtonNode.visibility = self.visibility != .none
}
self.visibilityStatus = self.visibility != .none
self.updateVisibility()
@@ -718,6 +702,8 @@ public class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewI
}
}
private var forceStopAnimations: Bool = false
required public init(rotated: Bool) {
self.mainContextSourceNode = ContextExtractedContentContainingNode()
self.mainContainerNode = ContextControllerSourceNode()
@@ -6207,6 +6193,11 @@ public class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewI
return false
}
override public func updateStickerSettings(forceStopAnimations: Bool) {
self.forceStopAnimations = forceStopAnimations
self.updateVisibility()
}
private func updateVisibility() {
guard let item = self.item else {
return
@@ -6223,11 +6214,35 @@ public class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewI
if !item.controllerInteraction.canReadHistory {
isPlaying = false
}
if self.forceStopAnimations {
isPlaying = false
}
if !isPlaying {
self.removeEffectAnimations()
}
var effectiveVisibility = self.visibility
if !isPlaying {
effectiveVisibility = .none
}
for contentNode in self.contentNodes {
contentNode.visibility = mapVisibility(effectiveVisibility, boundsSize: self.bounds.size, insets: self.insets, to: contentNode)
}
if let threadInfoNode = self.threadInfoNode {
threadInfoNode.visibility = effectiveVisibility != .none
}
if let replyInfoNode = self.replyInfoNode {
replyInfoNode.visibility = effectiveVisibility != .none
}
if let unlockButtonNode = self.unlockButtonNode {
unlockButtonNode.visibility = effectiveVisibility != .none
}
if isPlaying {
var alreadySeen = true
if item.message.flags.contains(.Incoming) {