Various fixes

This commit is contained in:
Ilya Laktyushin 2025-11-14 12:47:55 +04:00
parent cbf23d0df5
commit f91fbff773
10 changed files with 175 additions and 179 deletions

View File

@ -15423,3 +15423,6 @@ Error: %8$@";
"ChatList.AlertResumeLiveStreamTitle" = "Resume Live Stream";
"ChatList.AlertResumeLiveStreamText" = "Do you want to resume an existing Live Stream?";
"ChatList.AlertResumeLiveStreamAction" = "Resume";
"Gift.Options.Gift.JoinAuction" = "Join";
"Gift.Options.Gift.ViewAuction" = "View";

View File

@ -400,6 +400,10 @@ public final class SheetComponent<ChildEnvironmentType: Sendable & Equatable>: C
self.component = component
self.currentHasInputHeight = sheetEnvironment.hasInputHeight
if self.isAnimatingOut {
return availableSize
}
var glassInset: CGFloat = 0.0
var topCornerRadius: CGFloat
var bottomCornerRadius: CGFloat

View File

@ -106,22 +106,6 @@ final class GiftAuctionAccessoryPanel: ASDisplayNode {
let titleText: String = self.strings.ChatList_Auctions_ActiveAuction(Int32(self.states.count))
titleItems.append(AnyComponentWithIdentity(id: "label", component: AnyComponent(MultilineTextComponent(text: .plain(NSAttributedString(string: titleText, font: titleFont, textColor: self.theme.rootController.navigationBar.primaryTextColor))))))
let titleSize = self.title.update(
transition: .immediate,
component: AnyComponent(
HStack(titleItems, spacing: 3.0, alignment: .left)
),
environment: {},
containerSize: size
)
let titleFrame = CGRect(origin: CGPoint(x: 16.0, y: 9.0), size: titleSize)
if let titleView = self.title.view {
if titleView.superview == nil {
self.contentNode.view.addSubview(titleView)
}
titleView.frame = titleFrame
}
let subtitleText: String
var subtitleTextColor = self.theme.rootController.navigationBar.secondaryTextColor
var isOutbid = false
@ -195,20 +179,6 @@ final class GiftAuctionAccessoryPanel: ASDisplayNode {
buttonAnimatedTitleItems.append(AnimatedTextComponent.Item(id: "view", content: .text(self.strings.ChatList_Auctions_View)))
}
let subtitleSize = self.subtitle.update(
transition: .immediate,
component: AnyComponent(MultilineTextComponent(text: .plain(NSAttributedString(string: subtitleText, font: subtitleFont, textColor: subtitleTextColor)))),
environment: {},
containerSize: size
)
let subtitleFrame = CGRect(origin: CGPoint(x: 16.0, y: 29.0), size: subtitleSize)
if let subtitleView = self.subtitle.view {
if subtitleView.superview == nil {
self.contentNode.view.addSubview(subtitleView)
}
subtitleView.frame = subtitleFrame
}
let buttonSize = self.button.update(
transition: .spring(duration: 0.2),
component: AnyComponent(
@ -254,6 +224,36 @@ final class GiftAuctionAccessoryPanel: ASDisplayNode {
buttonView.frame = buttonFrame
}
let titleSize = self.title.update(
transition: .immediate,
component: AnyComponent(
HStack(titleItems, spacing: 3.0, alignment: .left)
),
environment: {},
containerSize: CGSize(width: size.width - buttonSize.width - 48.0, height: size.height)
)
let titleFrame = CGRect(origin: CGPoint(x: 16.0, y: 9.0), size: titleSize)
if let titleView = self.title.view {
if titleView.superview == nil {
self.contentNode.view.addSubview(titleView)
}
titleView.frame = titleFrame
}
let subtitleSize = self.subtitle.update(
transition: .immediate,
component: AnyComponent(MultilineTextComponent(text: .plain(NSAttributedString(string: subtitleText, font: subtitleFont, textColor: subtitleTextColor)))),
environment: {},
containerSize: CGSize(width: size.width - buttonSize.width - 40.0, height: size.height)
)
let subtitleFrame = CGRect(origin: CGPoint(x: 16.0, y: 29.0), size: subtitleSize)
if let subtitleView = self.subtitle.view {
if subtitleView.superview == nil {
self.contentNode.view.addSubview(subtitleView)
}
subtitleView.frame = subtitleFrame
}
transition.updateFrame(node: self.separatorNode, frame: CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: size.width, height: UIScreenPixel)))
}

View File

@ -658,7 +658,11 @@ final class GiftOptionsScreenComponent: Component {
switch gift {
case let .generic(gift):
if gift.flags.contains(.isAuction) {
subject = .starGift(gift: gift, price: "Join")
var action = environment.strings.Gift_Options_Gift_JoinAuction
if gift.availability?.remains == 0 {
action = environment.strings.Gift_Options_Gift_ViewAuction
}
subject = .starGift(gift: gift, price: action)
} else if let availability = gift.availability, availability.remains == 0, let minResaleStars = availability.minResaleStars {
let priceString = presentationStringsFormattedNumber(Int32(minResaleStars), environment.dateTimeFormat.groupingSeparator)
if let resaleConfiguration = self.resaleConfiguration, minResaleStars == resaleConfiguration.starGiftResaleMaxStarsAmount || availability.resale == 1 {
@ -1823,6 +1827,14 @@ final class GiftOptionsScreenComponent: Component {
}
var filteredStarGifts = starGifts
if peerId.namespace == Namespaces.Peer.CloudChannel {
filteredStarGifts = filteredStarGifts?.filter { gift in
if case let .generic(gift) = gift, gift.availability != nil {
return false
}
return true
}
}
if let disallowedGifts = self.disallowedGifts, !disallowedGifts.isEmpty {
filteredStarGifts = filteredStarGifts?.filter { gift in
if case let .generic(gift) = gift {

View File

@ -889,9 +889,10 @@ private final class GiftSetupScreenComponent: Component {
if case .regular = environment.metrics.widthClass {
fillingSize = min(availableSize.width, 414.0) - environment.safeInsets.left * 2.0
} else {
fillingSize = min(availableSize.width, 428.0) - environment.safeInsets.left * 2.0
fillingSize = min(availableSize.width, environment.deviceMetrics.screenSize.width) - environment.safeInsets.left * 2.0
}
let sideInset: CGFloat = floor((availableSize.width - fillingSize) * 0.5) + 24.0
let rawSideInset: CGFloat = floor((availableSize.width - fillingSize) * 0.5)
let sideInset: CGFloat = rawSideInset + 24.0
let peerName = self.peerMap[component.peerId]?.compactDisplayTitle ?? ""
let isSelfGift = component.peerId == component.context.account.peerId
@ -1130,7 +1131,7 @@ private final class GiftSetupScreenComponent: Component {
environment: {},
containerSize: CGSize(width: 40.0, height: 40.0)
)
let closeButtonFrame = CGRect(origin: CGPoint(x: 16.0, y: 16.0), size: closeButtonSize)
let closeButtonFrame = CGRect(origin: CGPoint(x: rawSideInset + 16.0, y: 16.0), size: closeButtonSize)
if let closeButtonView = self.closeButton.view {
if closeButtonView.superview == nil {
self.navigationBarContainer.addSubview(closeButtonView)
@ -1143,64 +1144,6 @@ private final class GiftSetupScreenComponent: Component {
var initialContentHeight = contentHeight
let clippingY: CGFloat
if case let .starGift(starGift, forceUnique) = component.subject, let availability = starGift.availability, availability.resale > 0 {
if let forceUnique, !forceUnique {
} else {
let resaleSectionSize = self.resaleSection.update(
transition: transition,
component: AnyComponent(ListSectionComponent(
theme: environment.theme,
style: .glass,
header: nil,
footer: nil,
items: [
AnyComponentWithIdentity(id: 0, component: AnyComponent(ListActionItemComponent(
theme: environment.theme,
style: .glass,
title: AnyComponent(VStack([
AnyComponentWithIdentity(id: AnyHashable(0), component: AnyComponent(
MultilineTextComponent(
text: .plain(NSAttributedString(string: environment.strings.Gift_Send_AvailableForResale, font: Font.regular(presentationData.listsFontSize.baseDisplaySize), textColor: environment.theme.list.itemPrimaryTextColor))
)
)),
], alignment: .left, spacing: 2.0)),
accessory: .custom(ListActionItemComponent.CustomAccessory(component: AnyComponentWithIdentity(id: 0, component: AnyComponent(MultilineTextComponent(
text: .plain(NSAttributedString(
string: presentationStringsFormattedNumber(Int32(availability.resale), environment.dateTimeFormat.groupingSeparator),
font: Font.regular(presentationData.listsFontSize.baseDisplaySize),
textColor: environment.theme.list.itemSecondaryTextColor
)),
maximumNumberOfLines: 0
))), insets: UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: 16.0))),
action: { [weak self] _ in
guard let self, let component = self.component, let controller = environment.controller() else {
return
}
let storeController = component.context.sharedContext.makeGiftStoreController(
context: component.context,
peerId: component.peerId,
gift: starGift
)
controller.push(storeController)
}
)))
]
)),
environment: {},
containerSize: CGSize(width: availableSize.width - sideInset * 2.0, height: 10000.0)
)
let resaleSectionFrame = CGRect(origin: CGPoint(x: sideInset, y: contentHeight), size: resaleSectionSize)
if let resaleSectionView = self.resaleSection.view {
if resaleSectionView.superview == nil {
self.scrollContentView.addSubview(resaleSectionView)
}
transition.setFrame(view: resaleSectionView, frame: resaleSectionFrame)
}
contentHeight += resaleSectionSize.height
contentHeight += sectionSpacing
}
}
let giftConfiguration = GiftConfiguration.with(appConfiguration: component.context.currentAppConfiguration.with { $0 })
let footerAttributes = MarkdownAttributes(
@ -1211,45 +1154,7 @@ private final class GiftSetupScreenComponent: Component {
return (TelegramTextAttributes.URL, contents)
}
)
// let introFooter: AnyComponent<Empty>?
// switch component.subject {
// case .premium:
// introFooter = AnyComponent(MultilineTextComponent(
// text: .plain(NSAttributedString(
// string: environment.strings.Gift_Send_Customize_Info(peerName).string,
// font: Font.regular(presentationData.listsFontSize.itemListBaseHeaderFontSize),
// textColor: environment.theme.list.freeTextColor
// )),
// maximumNumberOfLines: 0
// ))
// case .starGift:
// introFooter = nil
// }
//
// let introSectionSize = self.introSection.update(
// transition: transition,
// component: AnyComponent(ListSectionComponent(
// theme: environment.theme,
// style: .glass,
// header: nil,
// footer: introFooter,
// items: introSectionItems
// )),
// environment: {},
// containerSize: CGSize(width: availableSize.width - sideInset * 2.0, height: 10000.0)
// )
// let introSectionFrame = CGRect(origin: CGPoint(x: sideInset, y: contentHeight), size: introSectionSize)
// if let introSectionView = self.introSection.view {
// if introSectionView.superview == nil {
// self.scrollContentView.addSubview(introSectionView)
// self.introSection.parentState = state
// }
// transition.setFrame(view: introSectionView, frame: introSectionFrame)
// }
// contentHeight += introSectionSize.height
// contentHeight += sectionSpacing
var inputHeight: CGFloat = 0.0
inputHeight += self.updateInputMediaNode(
component: component,
@ -1270,7 +1175,7 @@ private final class GiftSetupScreenComponent: Component {
}
self.previousInputHeight = inputHeight
let listItemParams = ListViewItemLayoutParams(width: availableSize.width, leftInset: 0.0, rightInset: 0.0, availableHeight: 10000.0, isStandalone: true)
let listItemParams = ListViewItemLayoutParams(width: fillingSize, leftInset: 0.0, rightInset: 0.0, availableHeight: 10000.0, isStandalone: true)
var introContentSize = CGSize()
if let accountPeer = self.peerMap[component.context.account.peerId] {
var inputPanelSize = CGSize()
@ -1377,7 +1282,7 @@ private final class GiftSetupScreenComponent: Component {
chatLocation: nil
)),
environment: {},
containerSize: CGSize(width: availableSize.width - inputPanelInset * 2.0, height: 160.0)
containerSize: CGSize(width: fillingSize - inputPanelInset * 2.0, height: 160.0)
)
}
@ -1410,6 +1315,10 @@ private final class GiftSetupScreenComponent: Component {
if let inputPanelView = self.inputPanel.view as? MessageInputPanelComponent.View, case let .text(text) = inputPanelView.getSendMessageInput(applyAutocorrection: false) {
textInputText = text
}
var inputBottomInset: CGFloat = inputPanelSize.height - 26.0
if component.peerId == component.context.account.peerId {
inputBottomInset += 8.0
}
introContentSize = self.introContent.update(
transition: transition,
component: AnyComponent(
@ -1432,13 +1341,13 @@ private final class GiftSetupScreenComponent: Component {
entities: generateChatInputTextEntities(textInputText),
upgradeStars: self.includeUpgrade ? upgradeStars : nil,
chargeStars: nil,
bottomInset: max(0.0, inputPanelSize.height - 26.0)
bottomInset: max(0.0, inputBottomInset)
),
params: listItemParams
)
),
environment: {},
containerSize: CGSize(width: availableSize.width, height: 10000.0)
containerSize: CGSize(width: fillingSize, height: 10000.0)
)
if let introContentView = self.introContent.view {
if introContentView.superview == nil {
@ -1449,10 +1358,10 @@ private final class GiftSetupScreenComponent: Component {
self.scrollContentView.addSubview(introContentView)
introContentView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.previewTap)))
}
transition.setFrame(view: introContentView, frame: CGRect(origin: CGPoint(), size: introContentSize))
transition.setFrame(view: introContentView, frame: CGRect(origin: CGPoint(x: rawSideInset, y: 0.0), size: introContentSize))
}
let inputPanelFrame = CGRect(origin: CGPoint(x: inputPanelInset, y: contentHeight + introContentSize.height - inputPanelInset - inputPanelSize.height + 6.0), size: inputPanelSize)
let inputPanelFrame = CGRect(origin: CGPoint(x: rawSideInset + inputPanelInset, y: contentHeight + introContentSize.height - inputPanelInset - inputPanelSize.height + 6.0), size: inputPanelSize)
if let inputPanelView = self.inputPanel.view {
if inputPanelView.superview == nil {
self.scrollContentView.addSubview(inputPanelView)
@ -1463,6 +1372,64 @@ private final class GiftSetupScreenComponent: Component {
contentHeight += introContentSize.height
contentHeight += sectionSpacing
if case let .starGift(starGift, forceUnique) = component.subject, let availability = starGift.availability, availability.resale > 0 {
if let forceUnique, !forceUnique {
} else {
let resaleSectionSize = self.resaleSection.update(
transition: transition,
component: AnyComponent(ListSectionComponent(
theme: environment.theme,
style: .glass,
header: nil,
footer: nil,
items: [
AnyComponentWithIdentity(id: 0, component: AnyComponent(ListActionItemComponent(
theme: environment.theme,
style: .glass,
title: AnyComponent(VStack([
AnyComponentWithIdentity(id: AnyHashable(0), component: AnyComponent(
MultilineTextComponent(
text: .plain(NSAttributedString(string: environment.strings.Gift_Send_AvailableForResale, font: Font.regular(presentationData.listsFontSize.baseDisplaySize), textColor: environment.theme.list.itemPrimaryTextColor))
)
)),
], alignment: .left, spacing: 2.0)),
accessory: .custom(ListActionItemComponent.CustomAccessory(component: AnyComponentWithIdentity(id: 0, component: AnyComponent(MultilineTextComponent(
text: .plain(NSAttributedString(
string: presentationStringsFormattedNumber(Int32(availability.resale), environment.dateTimeFormat.groupingSeparator),
font: Font.regular(presentationData.listsFontSize.baseDisplaySize),
textColor: environment.theme.list.itemSecondaryTextColor
)),
maximumNumberOfLines: 0
))), insets: UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: 16.0))),
action: { [weak self] _ in
guard let self, let component = self.component, let controller = environment.controller() else {
return
}
let storeController = component.context.sharedContext.makeGiftStoreController(
context: component.context,
peerId: component.peerId,
gift: starGift
)
controller.push(storeController)
}
)))
]
)),
environment: {},
containerSize: CGSize(width: availableSize.width - sideInset * 2.0, height: 10000.0)
)
let resaleSectionFrame = CGRect(origin: CGPoint(x: sideInset, y: contentHeight), size: resaleSectionSize)
if let resaleSectionView = self.resaleSection.view {
if resaleSectionView.superview == nil {
self.scrollContentView.addSubview(resaleSectionView)
}
transition.setFrame(view: resaleSectionView, frame: resaleSectionFrame)
}
contentHeight += resaleSectionSize.height
contentHeight += sectionSpacing
}
}
switch component.subject {
case let .premium(product):
let balance = component.context.starsContext?.currentState?.balance.value ?? 0
@ -1945,19 +1912,19 @@ private final class GiftSetupScreenComponent: Component {
}
)),
environment: {},
containerSize: CGSize(width: availableSize.width - buttonInsets.left - buttonInsets.right, height: buttonHeight)
containerSize: CGSize(width: fillingSize - buttonInsets.left - buttonInsets.right, height: buttonHeight)
)
var bottomPanelHeight = 13.0 + buttonInsets.bottom + actionButtonSize.height
let bottomEdgeEffectHeight: CGFloat = bottomPanelHeight
let bottomEdgeEffectFrame = CGRect(origin: CGPoint(x: 0.0, y: availableSize.height - bottomEdgeEffectHeight), size: CGSize(width: availableSize.width, height: bottomEdgeEffectHeight))
let bottomEdgeEffectFrame = CGRect(origin: CGPoint(x: rawSideInset, y: availableSize.height - bottomEdgeEffectHeight), size: CGSize(width: fillingSize, height: bottomEdgeEffectHeight))
transition.setFrame(view: self.bottomEdgeEffectView, frame: bottomEdgeEffectFrame)
self.bottomEdgeEffectView.update(content: environment.theme.actionSheet.opaqueItemBackgroundColor, blur: true, alpha: 1.0, rect: bottomEdgeEffectFrame, edge: .bottom, edgeSize: bottomEdgeEffectFrame.height, transition: transition)
if self.bottomEdgeEffectView.superview == nil {
self.containerView.addSubview(self.bottomEdgeEffectView)
}
let actionButtonFrame = CGRect(origin: CGPoint(x: buttonInsets.left, y: availableSize.height - buttonInsets.bottom - actionButtonSize.height), size: actionButtonSize)
let actionButtonFrame = CGRect(origin: CGPoint(x: rawSideInset + buttonInsets.left, y: availableSize.height - buttonInsets.bottom - actionButtonSize.height), size: actionButtonSize)
if let buttonView = self.actionButton.view {
if buttonView.superview == nil {
self.containerView.addSubview(buttonView)
@ -2086,7 +2053,11 @@ public class GiftSetupScreen: ViewControllerComponentContainer {
self.didPlayAppearAnimation = true
if let componentView = self.node.hostView.componentView as? GiftSetupScreenComponent.View {
componentView.animateIn()
componentView.alpha = 0.0
Queue.mainQueue().after(0.01, {
componentView.alpha = 1.0
componentView.animateIn()
})
}
}
}

View File

@ -291,7 +291,7 @@ private final class GiftAuctionAcquiredScreenComponent: Component {
if case .regular = environment.metrics.widthClass {
fillingSize = min(availableSize.width, 414.0) - environment.safeInsets.left * 2.0
} else {
fillingSize = min(availableSize.width, 428.0) - environment.safeInsets.left * 2.0
fillingSize = min(availableSize.width, environment.deviceMetrics.screenSize.width) - environment.safeInsets.left * 2.0
}
let rawSideInset = floor((availableSize.width - fillingSize) * 0.5)
let sideInset: CGFloat = floor((availableSize.width - fillingSize) * 0.5) + 24.0

View File

@ -250,9 +250,10 @@ private final class GiftAuctionActiveBidsScreenComponent: Component {
if case .regular = environment.metrics.widthClass {
fillingSize = min(availableSize.width, 414.0) - environment.safeInsets.left * 2.0
} else {
fillingSize = min(availableSize.width, 428.0) - environment.safeInsets.left * 2.0
fillingSize = min(availableSize.width, environment.deviceMetrics.screenSize.width) - environment.safeInsets.left * 2.0
}
let sideInset: CGFloat = floor((availableSize.width - fillingSize) * 0.5) + 16.0
let rawSideInset: CGFloat = floor((availableSize.width - fillingSize) * 0.5)
let sideInset: CGFloat = rawSideInset + 16.0
if self.component == nil, let giftAuctionsManager = component.context.giftAuctionsManager {
self.auctionStatesDisposable = (giftAuctionsManager.state
@ -403,7 +404,7 @@ private final class GiftAuctionActiveBidsScreenComponent: Component {
environment: {},
containerSize: CGSize(width: 40.0, height: 40.0)
)
let closeButtonFrame = CGRect(origin: CGPoint(x: 16.0, y: 16.0), size: closeButtonSize)
let closeButtonFrame = CGRect(origin: CGPoint(x: rawSideInset + 16.0, y: 16.0), size: closeButtonSize)
if let closeButtonView = self.closeButton.view {
if closeButtonView.superview == nil {
self.navigationBarContainer.addSubview(closeButtonView)
@ -438,7 +439,7 @@ private final class GiftAuctionActiveBidsScreenComponent: Component {
initialContentHeight = contentHeight
let edgeEffectHeight: CGFloat = 80.0
let edgeEffectFrame = CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: availableSize.width, height: edgeEffectHeight))
let edgeEffectFrame = CGRect(origin: CGPoint(x: rawSideInset, y: 0.0), size: CGSize(width: fillingSize, height: edgeEffectHeight))
transition.setFrame(view: self.topEdgeEffectView, frame: edgeEffectFrame)
self.topEdgeEffectView.update(content: environment.theme.actionSheet.opaqueItemBackgroundColor, blur: true, alpha: 1.0, rect: edgeEffectFrame, edge: .top, edgeSize: edgeEffectFrame.height, transition: transition)
if self.topEdgeEffectView.superview == nil {

View File

@ -912,7 +912,7 @@ private final class SliderBackgroundComponent: Component {
topBackgroundTextView.layer.animateSpring(from: NSValue(cgPoint: CGPoint(x: animateTopTextAdditionalX, y: 0.0)), to: NSValue(cgPoint: CGPoint()), keyPath: "position", duration: 0.3, damping: 100.0, additive: true)
}
topForegroundTextView.isHidden = component.topCutoff == nil || topLineFrame.maxX + topTextSize.width + 20.0 > availableSize.width
topForegroundTextView.isHidden = component.topCutoff == nil || topTextFrame.maxX > availableSize.width - 28.0
topBackgroundTextView.isHidden = topForegroundTextView.isHidden
self.topBackgroundLine.isHidden = topX < 10.0
self.topForegroundLine.isHidden = self.topBackgroundLine.isHidden
@ -1438,7 +1438,7 @@ private final class GiftAuctionBidScreenComponent: Component {
private var isLoading = false
private func commitBid(value: Int64) {
guard let component = self.component, case let .generic(gift) = component.gift, let controller = self.environment?.controller() else {
guard let component = self.component, let environment = self.environment, let controller = self.environment?.controller(), let balance = self.balance, case let .generic(gift) = component.gift else {
return
}
@ -1447,7 +1447,9 @@ private final class GiftAuctionBidScreenComponent: Component {
if let peerId = self.giftAuctionState?.myState.bidPeerId {
myBidPeerId = peerId
}
var requiredStars = value
if let myBidAmount = self.giftAuctionState?.myState.bidAmount {
requiredStars = requiredStars - myBidAmount
isUpdate = true
if value == myBidAmount {
controller.dismiss()
@ -1455,6 +1457,29 @@ private final class GiftAuctionBidScreenComponent: Component {
}
}
if balance < StarsAmount(value: requiredStars, nanos: 0) {
let _ = (component.context.engine.payments.starsTopUpOptions()
|> take(1)
|> deliverOnMainQueue).startStandalone(next: { [weak self] options in
guard let self, let component = self.component else {
return
}
guard let starsContext = component.context.starsContext else {
return
}
let purchasePurpose: StarsPurchasePurpose = .generic
let purchaseScreen = component.context.sharedContext.makeStarsPurchaseScreen(context: component.context, starsContext: starsContext, options: options, purpose: purchasePurpose, targetPeerId: nil, customTheme: environment.theme, completion: { result in
let _ = result
//TODO:release
})
self.environment?.controller()?.push(purchaseScreen)
self.environment?.controller()?.dismiss()
})
return
}
let giftsPerRounds = gift.auctionGiftsPerRound ?? 50
let presentationData = component.context.sharedContext.currentPresentationData.with { $0 }
@ -1795,7 +1820,7 @@ private final class GiftAuctionBidScreenComponent: Component {
if case .regular = environment.metrics.widthClass {
fillingSize = min(availableSize.width, 414.0) - environment.safeInsets.left * 2.0
} else {
fillingSize = min(availableSize.width, 428.0) - environment.safeInsets.left * 2.0
fillingSize = min(availableSize.width, environment.deviceMetrics.screenSize.width) - environment.safeInsets.left * 2.0
}
let rawSideInset = floor((availableSize.width - fillingSize) * 0.5)
let sideInset: CGFloat = floor((availableSize.width - fillingSize) * 0.5) + 24.0
@ -2019,7 +2044,7 @@ private final class GiftAuctionBidScreenComponent: Component {
var sliderColor: UIColor = UIColor(rgb: 0xFFB10D)
let liveStreamParams = LiveChatMessageParams(appConfig: component.context.currentAppConfiguration.with({ $0 }))
let color = GroupCallMessagesContext.getStarAmountParamMapping(params: liveStreamParams, value: Int64(self.amount.realValue)).color ?? GroupCallMessagesContext.Message.Color(rawValue: 0x985FDC)
let color = GroupCallMessagesContext.getStarAmountParamMapping(params: liveStreamParams, value: Int64(self.amount.realValue / 5)).color ?? GroupCallMessagesContext.Message.Color(rawValue: 0x985FDC)
sliderColor = StoryLiveChatMessageComponent.getMessageColor(color: color)
var giftsPerRound: Int32 = 50
@ -2546,6 +2571,7 @@ private final class GiftAuctionBidScreenComponent: Component {
if let topPeerItemView = topPeerItem.view {
if topPeerItemView.superview == nil {
self.scrollContentView.addSubview(topPeerItemView)
transition.animateAlpha(view: topPeerItemView, from: 0.0, to: 1.0)
}
topPeerItemView.frame = topPeerItemFrame
}
@ -2635,33 +2661,7 @@ private final class GiftAuctionBidScreenComponent: Component {
isEnabled: true,
displaysProgress: self.isLoading,
action: { [weak self] in
guard let self, let component = self.component else {
return
}
guard let balance = self.balance else {
return
}
if balance < StarsAmount(value: Int64(self.amount.realValue), nanos: 0) {
let _ = (component.context.engine.payments.starsTopUpOptions()
|> take(1)
|> deliverOnMainQueue).startStandalone(next: { [weak self] options in
guard let self, let component = self.component else {
return
}
guard let starsContext = component.context.starsContext else {
return
}
let purchasePurpose: StarsPurchasePurpose = .generic
let purchaseScreen = component.context.sharedContext.makeStarsPurchaseScreen(context: component.context, starsContext: starsContext, options: options, purpose: purchasePurpose, targetPeerId: nil, customTheme: environment.theme, completion: { result in
let _ = result
//TODO:release
})
self.environment?.controller()?.push(purchaseScreen)
self.environment?.controller()?.dismiss()
})
guard let self else {
return
}
self.commitBid(value: Int64(self.amount.realValue))

View File

@ -208,15 +208,17 @@ private final class GiftAuctionCustomBidAlertContentNode: AlertContentNode {
environment: {},
containerSize: CGSize(width: fieldWidth, height: 44.0)
)
let amountFieldFrame = CGRect(origin: CGPoint(x: floor((resultWidth - fieldWidth) / 2.0), y: origin.y - 2.0), size: amountFieldSize)
var amountFieldFrame = CGRect(origin: CGPoint(x: floor((resultWidth - fieldWidth) / 2.0), y: origin.y - 2.0), size: amountFieldSize)
if let amountFieldView = self.amountField.view {
if amountFieldView.superview == nil {
amountFieldView.clipsToBounds = true
self.backgroundView.image = generateStretchableFilledCircleImage(diameter: 12.0, color: self.theme.actionSheet.inputHollowBackgroundColor, strokeColor: self.theme.actionSheet.inputBorderColor, strokeWidth: 1.0)
self.view.addSubview(self.backgroundView)
self.view.addSubview(amountFieldView)
}
self.backgroundView.frame = amountFieldFrame.insetBy(dx: 7.0, dy: 9.0)
amountFieldFrame.size.width -= 14.0
amountFieldView.frame = amountFieldFrame
}

View File

@ -5640,10 +5640,13 @@ final class PeerCellComponent: Component {
let avatarSize = CGSize(width: 22.0, height: 22.0)
let spacing: CGFloat = 6.0
let peerName: String
var peerName: String
let avatarOverride: AvatarNodeImageOverride?
if let peerValue = component.peer {
peerName = peerValue.compactDisplayTitle
if peerName.count > 40 {
peerName = "\(peerName.prefix(40))"
}
avatarOverride = nil
} else {
peerName = component.strings.Gift_View_HiddenName