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

@ -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 {
switch self {
case let user as TelegramUser:

View File

@ -4,6 +4,7 @@ import AsyncDisplayKit
import Display
import ComponentFlow
import SwiftSignalKit
import Postbox
import TelegramCore
import TextFormat
import TelegramPresentationData
@ -211,27 +212,46 @@ private final class QuickShareScreenComponent: Component {
self.state = state
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(),
component.context.engine.peers.recentPeers() |> take(1),
peers,
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 {
return
}
var result: [EnginePeer] = []
switch recentPeers {
case let .peers(peers):
result = peers.map(EnginePeer.init)
case .disabled:
break
}
if !result.isEmpty, let accountPeer {
self.peers = Array([accountPeer] + result.prefix(4))
if !peers.isEmpty, let accountPeer {
self.peers = Array([accountPeer] + peers.prefix(4))
self.state?.updated()
component.ready.set(.single(true))
} else {
self.environment?.controller()?.dismiss()
}
component.ready.set(.single(true))
})
component.gesture.externalUpdated = { [weak self] view, point in

View File

@ -2462,13 +2462,23 @@ private final class GiftViewSheetContent: CombinedComponent {
if let uniqueGift {
if isMyUniqueGift, case let .peerId(peerId) = uniqueGift.owner {
var canTransfer = true
if let peer = state.peerMap[peerId], case let .channel(channel) = peer, !channel.flags.contains(.isCreator) {
var canResell = true
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 {
canTransfer = false
}
let buttonsCount = canTransfer ? 3 : 2
var buttonsCount = 1
if canTransfer {
buttonsCount += 1
}
if canResell {
buttonsCount += 1
}
let buttonSpacing: CGFloat = 10.0
let buttonWidth = floor(context.availableSize.width - sideInset * 2.0 - buttonSpacing * CGFloat(buttonsCount - 1)) / CGFloat(buttonsCount)
@ -2560,6 +2570,7 @@ private final class GiftViewSheetContent: CombinedComponent {
)
buttonOriginX += buttonWidth + buttonSpacing
if canResell {
let resellButton = resellButton.update(
component: PlainButtonComponent(
content: AnyComponent(
@ -2583,6 +2594,7 @@ private final class GiftViewSheetContent: CombinedComponent {
.disappear(.default(scale: true, alpha: true))
)
}
}
let order: [StarGift.UniqueGift.Attribute.AttributeType] = [
.model, .backdrop, .pattern, .originalInfo

View File

@ -827,10 +827,13 @@ func openResolvedUrlImpl(
}
case .stars:
dismissInput()
let controller = context.sharedContext.makeStarsIntroScreen(context: context)
if let navigationController = navigationController {
if let starsContext = context.starsContext {
let controller = context.sharedContext.makeStarsTransactionsScreen(context: context, starsContext: starsContext)
controller.navigationPresentation = .modal
if let navigationController {
navigationController.pushViewController(controller, animated: true)
}
}
case let .joinVoiceChat(peerId, invite):
let _ = (context.engine.data.get(TelegramEngine.EngineData.Item.Peer.Peer(id: peerId))
|> deliverOnMainQueue).start(next: { peer in