Various fixes

This commit is contained in:
Ilya Laktyushin 2023-06-26 01:12:56 +02:00
parent eb28692e92
commit 5f433dc140
3 changed files with 29 additions and 7 deletions

View File

@ -47,7 +47,7 @@ private func getUserPeer(engine: TelegramEngine, peerId: EnginePeer.Id) -> Signa
}
}
public func openAddPersonContactImpl(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)? = nil, peerId: EnginePeer.Id, pushController: @escaping (ViewController) -> Void, present: @escaping (ViewController, Any?) -> Void) {
public func openAddPersonContactImpl(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal<PresentationData, NoError>)? = nil, peerId: EnginePeer.Id, pushController: @escaping (ViewController) -> Void, present: @escaping (ViewController, Any?) -> Void, completion: @escaping () -> Void = {}) {
let _ = (getUserPeer(engine: context.engine, peerId: peerId)
|> deliverOnMainQueue).start(next: { peer, statusSettings in
guard let peer, case let .user(user) = peer, let contactData = DeviceContactExtendedData(peer: peer) else {
@ -61,8 +61,7 @@ public func openAddPersonContactImpl(context: AccountContext, updatedPresentatio
pushController(deviceContactInfoController(context: context, updatedPresentationData: updatedPresentationData, subject: .create(peer: user, contactData: contactData, isSharing: true, shareViaException: shareViaException, completion: { peer, stableId, contactData in
if let peer = peer as? TelegramUser {
if let phone = peer.phone, !phone.isEmpty {
}
completion()
let presentationData = context.sharedContext.currentPresentationData.with { $0 }
present(OverlayStatusController(theme: presentationData.theme, type: .genericSuccess(presentationData.strings.AddContact_StatusSuccess(EnginePeer(peer).compactDisplayTitle).string, true)), nil)

View File

@ -187,7 +187,6 @@ final class PeerInfoScreenData {
let peerNotificationSettings: TelegramPeerNotificationSettings?
let threadNotificationSettings: TelegramPeerNotificationSettings?
let globalNotificationSettings: EngineGlobalNotificationSettings?
let isContact: Bool
let availablePanes: [PeerInfoPaneKey]
let groupsInCommon: GroupsInCommonContext?
let linkedDiscussionPeer: Peer?
@ -202,6 +201,17 @@ final class PeerInfoScreenData {
let appConfiguration: AppConfiguration?
let isPowerSavingEnabled: Bool?
let _isContact: Bool
var forceIsContact: Bool = false
var isContact: Bool {
if self.forceIsContact {
return true
} else {
return self._isContact
}
}
init(
peer: Peer?,
chatPeer: Peer?,
@ -232,7 +242,7 @@ final class PeerInfoScreenData {
self.peerNotificationSettings = peerNotificationSettings
self.threadNotificationSettings = threadNotificationSettings
self.globalNotificationSettings = globalNotificationSettings
self.isContact = isContact
self._isContact = isContact
self.availablePanes = availablePanes
self.groupsInCommon = groupsInCommon
self.linkedDiscussionPeer = linkedDiscussionPeer

View File

@ -2107,6 +2107,7 @@ final class PeerInfoScreenNode: ViewControllerTracingNode, PeerInfoScreenNodePro
avatarUploadProgress: nil,
highlightedButton: nil
)
private var forceIsContactPromise = ValuePromise<Bool>(false)
private let nearbyPeerDistance: Int32?
private let reactionSourceMessageId: MessageId?
private var dataDisposable: Disposable?
@ -3833,11 +3834,19 @@ final class PeerInfoScreenNode: ViewControllerTracingNode, PeerInfoScreenNodePro
self?.updateNavigation(transition: .immediate, additive: true)
}
self.dataDisposable = (screenData
|> deliverOnMainQueue).start(next: { [weak self] data in
self.dataDisposable = combineLatest(
queue: Queue.mainQueue(),
screenData,
self.forceIsContactPromise.get()
).start(next: { [weak self] data, forceIsContact in
guard let strongSelf = self else {
return
}
if data.isContact && forceIsContact {
strongSelf.forceIsContactPromise.set(false)
} else {
data.forceIsContact = forceIsContact
}
strongSelf.updateData(data)
strongSelf.cachedDataPromise.set(.single(data.cachedData))
})
@ -6351,6 +6360,10 @@ final class PeerInfoScreenNode: ViewControllerTracingNode, PeerInfoScreenNodePro
self?.controller?.push(c)
}, present: { c, a in
self?.controller?.present(c, in: .window(.root), with: a)
}, completion: { [weak self] in
if let self {
self.forceIsContactPromise.set(true)
}
})
})
}