mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Don't donate send message intents when passcode is enabled
Delete all already donated intents after passcode has been set up
This commit is contained in:
parent
ef78eb2879
commit
e602216c7f
@ -15,6 +15,7 @@ import AccountContext
|
||||
import LocalAuth
|
||||
import PasscodeUI
|
||||
import TelegramStringFormatting
|
||||
import TelegramIntents
|
||||
|
||||
private final class PasscodeOptionsControllerArguments {
|
||||
let turnPasscodeOff: () -> Void
|
||||
@ -414,6 +415,7 @@ public func passcodeOptionsAccessController(context: AccountContext, animateIn:
|
||||
}, error: { _ in
|
||||
}, completed: {
|
||||
completion(true)
|
||||
deleteAllSendMessageIntents()
|
||||
})
|
||||
}
|
||||
pushController?(setupController)
|
||||
|
@ -58,81 +58,94 @@ public enum SendMessageIntentSubject: CaseIterable {
|
||||
|
||||
public func donateSendMessageIntent(account: Account, sharedContext: SharedAccountContext, intentContext: SendMessageIntentContext, peerIds: [PeerId]) {
|
||||
if #available(iOSApplicationExtension 13.2, iOS 13.2, *) {
|
||||
let _ = (sharedContext.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.intentsSettings])
|
||||
|> mapToSignal { sharedData -> Signal<[(Peer, SendMessageIntentSubject)], NoError> in
|
||||
let settings = (sharedData.entries[ApplicationSpecificSharedDataKeys.intentsSettings] as? IntentsSettings) ?? IntentsSettings.defaultSettings
|
||||
if let accountId = settings.account, accountId != account.peerId {
|
||||
return .single([])
|
||||
}
|
||||
if case .chat = intentContext, settings.onlyShared {
|
||||
return .single([])
|
||||
}
|
||||
return account.postbox.transaction { transaction -> [(Peer, SendMessageIntentSubject)] in
|
||||
var peers: [(Peer, SendMessageIntentSubject)] = []
|
||||
for peerId in peerIds {
|
||||
if peerId.namespace != Namespaces.Peer.SecretChat, let peer = transaction.getPeer(peerId) {
|
||||
var subject: SendMessageIntentSubject?
|
||||
let chatListIndex = transaction.getPeerChatListIndex(peerId)
|
||||
if chatListIndex?.0 == Namespaces.PeerGroup.archive {
|
||||
continue
|
||||
}
|
||||
if peerId.namespace == Namespaces.Peer.CloudUser {
|
||||
if peerId == account.peerId {
|
||||
if !settings.savedMessages {
|
||||
continue
|
||||
}
|
||||
subject = .savedMessages
|
||||
} else if transaction.isPeerContact(peerId: peerId) {
|
||||
if !settings.contacts {
|
||||
continue
|
||||
}
|
||||
subject = .contact
|
||||
} else {
|
||||
if !settings.privateChats {
|
||||
continue
|
||||
}
|
||||
subject = .privateChat
|
||||
}
|
||||
} else if peerId.namespace == Namespaces.Peer.CloudGroup {
|
||||
if !settings.groups {
|
||||
continue
|
||||
}
|
||||
subject = .group
|
||||
} else if let peer = peer as? TelegramChannel {
|
||||
if case .group = peer.info {
|
||||
if !settings.groups {
|
||||
continue
|
||||
}
|
||||
subject = .group
|
||||
} else {
|
||||
continue
|
||||
}
|
||||
} else {
|
||||
continue
|
||||
}
|
||||
|
||||
if let subject = subject {
|
||||
peers.append((peer, subject))
|
||||
}
|
||||
}
|
||||
}
|
||||
return peers
|
||||
let _ = (sharedContext.accountManager.transaction { transaction -> Bool in
|
||||
if case .none = transaction.getAccessChallengeData() {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|> mapToSignal { peers -> Signal<[(Peer, SendMessageIntentSubject, UIImage?)], NoError> in
|
||||
var signals: [Signal<(Peer, SendMessageIntentSubject, UIImage?), NoError>] = []
|
||||
for (peer, subject) in peers {
|
||||
if peer.id == account.peerId {
|
||||
signals.append(.single((peer, subject, savedMessagesAvatar)))
|
||||
} else {
|
||||
let peerAndAvatar = (peerAvatarImage(account: account, peer: peer, authorOfMessage: nil, representation: peer.smallProfileImage, round: false) ?? .single(nil))
|
||||
|> map { avatarImage in
|
||||
return (peer, subject, avatarImage)
|
||||
|> mapToSignal { unlocked -> Signal<[(Peer, SendMessageIntentSubject, UIImage?)], NoError> in
|
||||
if unlocked {
|
||||
return sharedContext.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.intentsSettings])
|
||||
|> mapToSignal { sharedData -> Signal<[(Peer, SendMessageIntentSubject)], NoError> in
|
||||
let settings = (sharedData.entries[ApplicationSpecificSharedDataKeys.intentsSettings] as? IntentsSettings) ?? IntentsSettings.defaultSettings
|
||||
if let accountId = settings.account, accountId != account.peerId {
|
||||
return .single([])
|
||||
}
|
||||
if case .chat = intentContext, settings.onlyShared {
|
||||
return .single([])
|
||||
}
|
||||
return account.postbox.transaction { transaction -> [(Peer, SendMessageIntentSubject)] in
|
||||
var peers: [(Peer, SendMessageIntentSubject)] = []
|
||||
for peerId in peerIds {
|
||||
if peerId.namespace != Namespaces.Peer.SecretChat, let peer = transaction.getPeer(peerId) {
|
||||
var subject: SendMessageIntentSubject?
|
||||
let chatListIndex = transaction.getPeerChatListIndex(peerId)
|
||||
if chatListIndex?.0 == Namespaces.PeerGroup.archive {
|
||||
continue
|
||||
}
|
||||
if peerId.namespace == Namespaces.Peer.CloudUser {
|
||||
if peerId == account.peerId {
|
||||
if !settings.savedMessages {
|
||||
continue
|
||||
}
|
||||
subject = .savedMessages
|
||||
} else if transaction.isPeerContact(peerId: peerId) {
|
||||
if !settings.contacts {
|
||||
continue
|
||||
}
|
||||
subject = .contact
|
||||
} else {
|
||||
if !settings.privateChats {
|
||||
continue
|
||||
}
|
||||
subject = .privateChat
|
||||
}
|
||||
} else if peerId.namespace == Namespaces.Peer.CloudGroup {
|
||||
if !settings.groups {
|
||||
continue
|
||||
}
|
||||
subject = .group
|
||||
} else if let peer = peer as? TelegramChannel {
|
||||
if case .group = peer.info {
|
||||
if !settings.groups {
|
||||
continue
|
||||
}
|
||||
subject = .group
|
||||
} else {
|
||||
continue
|
||||
}
|
||||
} else {
|
||||
continue
|
||||
}
|
||||
|
||||
if let subject = subject {
|
||||
peers.append((peer, subject))
|
||||
}
|
||||
}
|
||||
}
|
||||
return peers
|
||||
}
|
||||
signals.append(peerAndAvatar)
|
||||
}
|
||||
|> mapToSignal { peers -> Signal<[(Peer, SendMessageIntentSubject, UIImage?)], NoError> in
|
||||
var signals: [Signal<(Peer, SendMessageIntentSubject, UIImage?), NoError>] = []
|
||||
for (peer, subject) in peers {
|
||||
if peer.id == account.peerId {
|
||||
signals.append(.single((peer, subject, savedMessagesAvatar)))
|
||||
} else {
|
||||
let peerAndAvatar = (peerAvatarImage(account: account, peer: peer, authorOfMessage: nil, representation: peer.smallProfileImage, round: false) ?? .single(nil))
|
||||
|> map { avatarImage in
|
||||
return (peer, subject, avatarImage)
|
||||
}
|
||||
signals.append(peerAndAvatar)
|
||||
}
|
||||
}
|
||||
return combineLatest(signals)
|
||||
}
|
||||
} else {
|
||||
return .single([])
|
||||
}
|
||||
return combineLatest(signals)
|
||||
}
|
||||
|> deliverOnMainQueue).start(next: { peers in
|
||||
let presentationData = sharedContext.currentPresentationData.with { $0 }
|
||||
|
Loading…
x
Reference in New Issue
Block a user