Various fixes

This commit is contained in:
Ilya Laktyushin 2025-05-02 00:45:42 +04:00
parent 874fac0c63
commit c9c4d78e30
4 changed files with 96 additions and 40 deletions

View File

@ -142,7 +142,7 @@ public extension Peer {
var largeProfileImage: TelegramMediaImageRepresentation? { var largeProfileImage: TelegramMediaImageRepresentation? {
return largestImageRepresentation(self.profileImageRepresentations) return largestImageRepresentation(self.profileImageRepresentations)
} }
var isDeleted: Bool { var isDeleted: Bool {
switch self { switch self {
case let user as TelegramUser: case let user as TelegramUser:
@ -152,6 +152,27 @@ public extension Peer {
} }
} }
var isGenericUser: Bool {
switch self {
case let user as TelegramUser:
if user.isDeleted {
return false
}
if user.botInfo != nil {
return false
}
if user.id.isRepliesOrVerificationCodes {
return false
}
if user.id.isTelegramNotifications {
return false
}
return true
default:
return false
}
}
var isScam: Bool { var isScam: Bool {
switch self { switch self {
case let user as TelegramUser: case let user as TelegramUser:

View File

@ -4,6 +4,7 @@ import AsyncDisplayKit
import Display import Display
import ComponentFlow import ComponentFlow
import SwiftSignalKit import SwiftSignalKit
import Postbox
import TelegramCore import TelegramCore
import TextFormat import TextFormat
import TelegramPresentationData import TelegramPresentationData
@ -211,27 +212,46 @@ private final class QuickShareScreenComponent: Component {
self.state = state self.state = state
if self.component == nil { if self.component == nil {
let peers = component.context.engine.peers.recentPeers()
|> take(1)
|> mapToSignal { recentPeers -> Signal<[EnginePeer], NoError> in
if case let .peers(peers) = recentPeers, !peers.isEmpty {
return .single(peers.map(EnginePeer.init))
} else {
return component.context.account.stateManager.postbox.tailChatListView(
groupId: .root,
count: 20,
summaryComponents: ChatListEntrySummaryComponents()
)
|> take(1)
|> map { view -> [EnginePeer] in
var peers: [EnginePeer] = []
for entry in view.0.entries.reversed() {
if case let .MessageEntry(entryData) = entry {
if let user = entryData.renderedPeer.chatMainPeer as? TelegramUser, user.isGenericUser && user.id != component.context.account.peerId && !user.id.isSecretChat {
peers.append(EnginePeer(user))
}
}
}
return peers
}
}
}
self.disposable = combineLatest(queue: Queue.mainQueue(), self.disposable = combineLatest(queue: Queue.mainQueue(),
component.context.engine.peers.recentPeers() |> take(1), peers,
component.context.engine.data.get(TelegramEngine.EngineData.Item.Peer.Peer(id: component.context.account.peerId)) component.context.engine.data.get(TelegramEngine.EngineData.Item.Peer.Peer(id: component.context.account.peerId))
).start(next: { [weak self] recentPeers, accountPeer in ).start(next: { [weak self] peers, accountPeer in
guard let self else { guard let self else {
return return
} }
var result: [EnginePeer] = [] if !peers.isEmpty, let accountPeer {
switch recentPeers { self.peers = Array([accountPeer] + peers.prefix(4))
case let .peers(peers):
result = peers.map(EnginePeer.init)
case .disabled:
break
}
if !result.isEmpty, let accountPeer {
self.peers = Array([accountPeer] + result.prefix(4))
self.state?.updated() self.state?.updated()
component.ready.set(.single(true))
} else { } else {
self.environment?.controller()?.dismiss() self.environment?.controller()?.dismiss()
} }
component.ready.set(.single(true))
}) })
component.gesture.externalUpdated = { [weak self] view, point in component.gesture.externalUpdated = { [weak self] view, point in

View File

@ -2462,13 +2462,23 @@ private final class GiftViewSheetContent: CombinedComponent {
if let uniqueGift { if let uniqueGift {
if isMyUniqueGift, case let .peerId(peerId) = uniqueGift.owner { if isMyUniqueGift, case let .peerId(peerId) = uniqueGift.owner {
var canTransfer = true var canTransfer = true
if let peer = state.peerMap[peerId], case let .channel(channel) = peer, !channel.flags.contains(.isCreator) { var canResell = true
canTransfer = false if let peer = state.peerMap[peerId], case let .channel(channel) = peer {
if !channel.flags.contains(.isCreator) {
canTransfer = false
}
canResell = false
} else if subject.arguments?.transferStars == nil { } else if subject.arguments?.transferStars == nil {
canTransfer = false canTransfer = false
} }
let buttonsCount = canTransfer ? 3 : 2 var buttonsCount = 1
if canTransfer {
buttonsCount += 1
}
if canResell {
buttonsCount += 1
}
let buttonSpacing: CGFloat = 10.0 let buttonSpacing: CGFloat = 10.0
let buttonWidth = floor(context.availableSize.width - sideInset * 2.0 - buttonSpacing * CGFloat(buttonsCount - 1)) / CGFloat(buttonsCount) let buttonWidth = floor(context.availableSize.width - sideInset * 2.0 - buttonSpacing * CGFloat(buttonsCount - 1)) / CGFloat(buttonsCount)
@ -2560,28 +2570,30 @@ private final class GiftViewSheetContent: CombinedComponent {
) )
buttonOriginX += buttonWidth + buttonSpacing buttonOriginX += buttonWidth + buttonSpacing
let resellButton = resellButton.update( if canResell {
component: PlainButtonComponent( let resellButton = resellButton.update(
content: AnyComponent( component: PlainButtonComponent(
HeaderButtonComponent( content: AnyComponent(
title: uniqueGift.resellStars == nil ? strings.Gift_View_Sell : strings.Gift_View_Unlist, HeaderButtonComponent(
iconName: uniqueGift.resellStars == nil ? "Premium/Collectible/Sell" : "Premium/Collectible/Unlist" title: uniqueGift.resellStars == nil ? strings.Gift_View_Sell : strings.Gift_View_Unlist,
) iconName: uniqueGift.resellStars == nil ? "Premium/Collectible/Sell" : "Premium/Collectible/Unlist"
)
),
effectAlignment: .center,
action: { [weak state] in
state?.resellGift()
}
), ),
effectAlignment: .center, environment: {},
action: { [weak state] in availableSize: CGSize(width: buttonWidth, height: buttonHeight),
state?.resellGift() transition: context.transition
} )
), context.add(resellButton
environment: {}, .position(CGPoint(x: buttonOriginX + buttonWidth / 2.0, y: headerHeight - buttonHeight / 2.0 - 16.0))
availableSize: CGSize(width: buttonWidth, height: buttonHeight), .appear(.default(scale: true, alpha: true))
transition: context.transition .disappear(.default(scale: true, alpha: true))
) )
context.add(resellButton }
.position(CGPoint(x: buttonOriginX + buttonWidth / 2.0, y: headerHeight - buttonHeight / 2.0 - 16.0))
.appear(.default(scale: true, alpha: true))
.disappear(.default(scale: true, alpha: true))
)
} }
let order: [StarGift.UniqueGift.Attribute.AttributeType] = [ let order: [StarGift.UniqueGift.Attribute.AttributeType] = [

View File

@ -827,9 +827,12 @@ func openResolvedUrlImpl(
} }
case .stars: case .stars:
dismissInput() dismissInput()
let controller = context.sharedContext.makeStarsIntroScreen(context: context) if let starsContext = context.starsContext {
if let navigationController = navigationController { let controller = context.sharedContext.makeStarsTransactionsScreen(context: context, starsContext: starsContext)
navigationController.pushViewController(controller, animated: true) controller.navigationPresentation = .modal
if let navigationController {
navigationController.pushViewController(controller, animated: true)
}
} }
case let .joinVoiceChat(peerId, invite): case let .joinVoiceChat(peerId, invite):
let _ = (context.engine.data.get(TelegramEngine.EngineData.Item.Peer.Peer(id: peerId)) let _ = (context.engine.data.get(TelegramEngine.EngineData.Item.Peer.Peer(id: peerId))