Merge commit '00516523a4bf832cd7ff109facb195c8e9d20d82' into beta

This commit is contained in:
Ilya Laktyushin 2024-09-26 17:18:47 +04:00
commit 154e65211d
6 changed files with 46 additions and 18 deletions

View File

@ -123,8 +123,6 @@ class CaptionScrollWrapperNode: ASDisplayNode {
} }
} }
final class ChatItemGalleryFooterContentNode: GalleryFooterContentNode, ASScrollViewDelegate { final class ChatItemGalleryFooterContentNode: GalleryFooterContentNode, ASScrollViewDelegate {
private let context: AccountContext private let context: AccountContext
private var presentationData: PresentationData private var presentationData: PresentationData
@ -1106,8 +1104,11 @@ final class ChatItemGalleryFooterContentNode: GalleryFooterContentNode, ASScroll
let dustNode = InvisibleInkDustNode(textNode: spoilerTextNode, enableAnimations: self.context.sharedContext.energyUsageSettings.fullTranslucency) let dustNode = InvisibleInkDustNode(textNode: spoilerTextNode, enableAnimations: self.context.sharedContext.energyUsageSettings.fullTranslucency)
self.dustNode = dustNode self.dustNode = dustNode
spoilerTextNode.supernode?.insertSubnode(dustNode, aboveSubnode: spoilerTextNode) if let textSelectionNode = self.textSelectionNode {
spoilerTextNode.supernode?.insertSubnode(dustNode, aboveSubnode: textSelectionNode)
} else {
spoilerTextNode.supernode?.insertSubnode(dustNode, aboveSubnode: spoilerTextNode)
}
} }
if let dustNode = self.dustNode { if let dustNode = self.dustNode {
dustNode.update(size: textFrame.size, color: .white, textColor: .white, rects: textLayout.spoilers.map { $0.1.offsetBy(dx: 3.0, dy: 3.0).insetBy(dx: 0.0, dy: 1.0) }, wordRects: textLayout.spoilerWords.map { $0.1.offsetBy(dx: 3.0, dy: 3.0).insetBy(dx: 0.0, dy: 1.0) }) dustNode.update(size: textFrame.size, color: .white, textColor: .white, rects: textLayout.spoilers.map { $0.1.offsetBy(dx: 3.0, dy: 3.0).insetBy(dx: 0.0, dy: 1.0) }, wordRects: textLayout.spoilerWords.map { $0.1.offsetBy(dx: 3.0, dy: 3.0).insetBy(dx: 0.0, dy: 1.0) })

View File

@ -207,6 +207,22 @@ func _internal_convertStarGift(account: Account, messageId: EngineMessage.Id) ->
|> `catch` { _ -> Signal<Api.Bool?, NoError> in |> `catch` { _ -> Signal<Api.Bool?, NoError> in
return .single(nil) return .single(nil)
} }
|> mapToSignal { result in
if let result, case .boolTrue = result {
return account.postbox.transaction { transaction -> Void in
transaction.updatePeerCachedData(peerIds: Set([account.peerId]), update: { _, cachedData -> CachedPeerData? in
if let cachedData = cachedData as? CachedUserData, let starGiftsCount = cachedData.starGiftsCount {
var updatedData = cachedData
updatedData = updatedData.withUpdatedStarGiftsCount(max(0, starGiftsCount - 1))
return updatedData
} else {
return cachedData
}
})
}
}
return .complete()
}
|> ignoreValues |> ignoreValues
} }
} }

View File

@ -369,7 +369,7 @@ final class GiftOptionsScreenComponent: Component {
} }
var controllers = navigationController.viewControllers var controllers = navigationController.viewControllers
controllers = controllers.filter { !($0 is GiftOptionsScreen) } controllers = controllers.filter { !($0 is GiftOptionsScreen) && !($0 is PeerInfoScreen) && !($0 is ContactSelectionController) }
var foundController = false var foundController = false
for controller in controllers.reversed() { for controller in controllers.reversed() {
if let chatController = controller as? ChatController, case .peer(id: component.peerId) = chatController.chatLocation { if let chatController = controller as? ChatController, case .peer(id: component.peerId) = chatController.chatLocation {

View File

@ -214,7 +214,7 @@ final class GiftSetupScreenComponent: Component {
} }
var controllers = navigationController.viewControllers var controllers = navigationController.viewControllers
controllers = controllers.filter { !($0 is GiftSetupScreen) && !($0 is GiftOptionsScreenProtocol) } controllers = controllers.filter { !($0 is GiftSetupScreen) && !($0 is GiftOptionsScreenProtocol) && !($0 is PeerInfoScreen) && !($0 is ContactSelectionController) }
var foundController = false var foundController = false
for controller in controllers.reversed() { for controller in controllers.reversed() {
if let chatController = controller as? ChatController, case .peer(id: component.peerId) = chatController.chatLocation { if let chatController = controller as? ChatController, case .peer(id: component.peerId) = chatController.chatLocation {

View File

@ -70,6 +70,7 @@ private final class GiftViewSheetContent: CombinedComponent {
var initialized = false var initialized = false
var peerMap: [EnginePeer.Id: EnginePeer] = [:] var peerMap: [EnginePeer.Id: EnginePeer] = [:]
var starGiftsMap: [Int64: StarGift] = [:]
var cachedCloseImage: (UIImage, PresentationTheme)? var cachedCloseImage: (UIImage, PresentationTheme)?
var cachedChevronImage: (UIImage, PresentationTheme)? var cachedChevronImage: (UIImage, PresentationTheme)?
@ -86,14 +87,15 @@ private final class GiftViewSheetContent: CombinedComponent {
if let fromPeerId = arguments.fromPeerId { if let fromPeerId = arguments.fromPeerId {
peerIds.append(fromPeerId) peerIds.append(fromPeerId)
} }
self.disposable = (context.engine.data.get(
EngineDataMap( self.disposable = combineLatest(queue: Queue.mainQueue(),
context.engine.data.get(EngineDataMap(
peerIds.map { peerId -> TelegramEngine.EngineData.Item.Peer.Peer in peerIds.map { peerId -> TelegramEngine.EngineData.Item.Peer.Peer in
return TelegramEngine.EngineData.Item.Peer.Peer(id: peerId) return TelegramEngine.EngineData.Item.Peer.Peer(id: peerId)
} }
) )),
) context.engine.payments.cachedStarGifts()
|> deliverOnMainQueue).startStrict(next: { [weak self] peers in ).startStrict(next: { [weak self] peers, starGifts in
if let strongSelf = self { if let strongSelf = self {
var peersMap: [EnginePeer.Id: EnginePeer] = [:] var peersMap: [EnginePeer.Id: EnginePeer] = [:]
for peerId in peerIds { for peerId in peerIds {
@ -103,6 +105,14 @@ private final class GiftViewSheetContent: CombinedComponent {
} }
strongSelf.peerMap = peersMap strongSelf.peerMap = peersMap
var starGiftsMap: [Int64: StarGift] = [:]
if let starGifts {
for gift in starGifts {
starGiftsMap[gift.id] = gift
}
}
strongSelf.starGiftsMap = starGiftsMap
strongSelf.initialized = true strongSelf.initialized = true
strongSelf.updated(transition: .immediate) strongSelf.updated(transition: .immediate)
@ -170,33 +180,30 @@ private final class GiftViewSheetContent: CombinedComponent {
let convertStars: Int64 let convertStars: Int64
let text: String? let text: String?
let entities: [MessageTextEntity]? let entities: [MessageTextEntity]?
let limitNumber: Int32?
let limitTotal: Int32? let limitTotal: Int32?
var incoming = false var incoming = false
var savedToProfile = false var savedToProfile = false
var converted = false var converted = false
var giftId: Int64 = 0
if let arguments = component.subject.arguments { if let arguments = component.subject.arguments {
animationFile = arguments.gift.file animationFile = arguments.gift.file
stars = arguments.gift.price stars = arguments.gift.price
text = arguments.text text = arguments.text
entities = arguments.entities entities = arguments.entities
limitNumber = arguments.gift.availability?.remains
limitTotal = arguments.gift.availability?.total limitTotal = arguments.gift.availability?.total
convertStars = arguments.convertStars convertStars = arguments.convertStars
incoming = arguments.incoming || arguments.peerId == component.context.account.peerId incoming = arguments.incoming || arguments.peerId == component.context.account.peerId
savedToProfile = arguments.savedToProfile savedToProfile = arguments.savedToProfile
converted = arguments.converted converted = arguments.converted
giftId = arguments.gift.id
} else { } else {
animationFile = nil animationFile = nil
stars = 0 stars = 0
text = nil text = nil
entities = nil entities = nil
limitNumber = nil
limitTotal = nil limitTotal = nil
convertStars = 0 convertStars = 0
} }
let _ = entities
let _ = limitNumber
var descriptionText: String var descriptionText: String
if incoming { if incoming {
@ -326,11 +333,15 @@ private final class GiftViewSheetContent: CombinedComponent {
)) ))
if let limitTotal { if let limitTotal {
var remains: Int32 = 0
if let gift = state.starGiftsMap[giftId], let availability = gift.availability {
remains = availability.remains
}
tableItems.append(.init( tableItems.append(.init(
id: "availability", id: "availability",
title: "Availability", title: "Availability",
component: AnyComponent( component: AnyComponent(
MultilineTextComponent(text: .plain(NSAttributedString(string: "1 of \(limitTotal)", font: tableFont, textColor: tableTextColor))) MultilineTextComponent(text: .plain(NSAttributedString(string: "\(remains) of \(limitTotal)", font: tableFont, textColor: tableTextColor)))
) )
)) ))
} }