mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Various fixes
This commit is contained in:
parent
874fac0c63
commit
c9c4d78e30
@ -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:
|
||||||
|
@ -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
|
||||||
|
@ -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] = [
|
||||||
|
@ -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))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user