Remove ad animation

This commit is contained in:
Isaac 2024-03-27 23:03:32 +04:00
parent bf3541fca2
commit 9e1fdb3c8d
3 changed files with 64 additions and 2 deletions

View File

@ -764,6 +764,31 @@ private class AdMessagesHistoryContextImpl {
}
let _ = signal.start()
}
func remove(opaqueId: Data) {
if var stateValue = self.stateValue {
if let index = stateValue.messages.firstIndex(where: { $0.adAttribute?.opaqueId == opaqueId }) {
stateValue.messages.remove(at: index)
self.stateValue = stateValue
}
}
let peerId = self.peerId
let _ = (self.account.postbox.transaction { transaction -> Void in
let key = ValueBoxKey(length: 8)
key.setInt64(0, value: peerId.toInt64())
let id = ItemCacheEntryId(collectionId: Namespaces.CachedItemCollection.cachedAdMessageStates, key: key)
guard var cachedState = transaction.retrieveItemCacheEntry(id: id)?.get(CachedState.self) else {
return
}
if let index = cachedState.messages.firstIndex(where: { $0.opaqueId == opaqueId }) {
cachedState.messages.remove(at: index)
if let entry = CodableEntry(cachedState) {
transaction.putItemCacheEntry(id: id, entry: entry)
}
}
}).start()
}
}
public class AdMessagesHistoryContext {
@ -803,4 +828,10 @@ public class AdMessagesHistoryContext {
impl.markAction(opaqueId: opaqueId)
}
}
public func remove(opaqueId: Data) {
self.impl.with { impl in
impl.remove(opaqueId: opaqueId)
}
}
}

View File

@ -0,0 +1,25 @@
import Foundation
import TelegramPresentationData
import AccountContext
import Postbox
import TelegramCore
import SwiftSignalKit
import Display
import TelegramPresentationData
import PresentationDataUtils
import ChatMessageItemView
extension ChatControllerImpl {
func removeAd(opaqueId: Data) {
var foundItemNode: ChatMessageItemView?
self.chatDisplayNode.historyNode.forEachItemNode { itemNode in
if let itemNode = itemNode as? ChatMessageItemView, let item = itemNode.item, let adAttribute = item.message.adAttribute, adAttribute.opaqueId == opaqueId {
foundItemNode = itemNode
}
}
if let foundItemNode, let message = foundItemNode.item?.message {
self.chatDisplayNode.historyNode.setCurrentDeleteAnimationCorrelationIds(Set([message.stableId]))
}
self.chatDisplayNode.historyNode.adMessagesContext?.remove(opaqueId: opaqueId)
}
}

View File

@ -499,8 +499,14 @@ func contextMenuForChatPresentationInterfaceState(chatPresentationInterfaceState
opaqueId: adAttribute.opaqueId,
title: title,
options: options,
completed: {
completed: { [weak interfaceInteraction] in
guard let interfaceInteraction else {
return
}
guard let chatController = interfaceInteraction.chatController() as? ChatControllerImpl else {
return
}
chatController.removeAd(opaqueId: adAttribute.opaqueId)
}
)
)