diff --git a/TelegramCore/Account.swift b/TelegramCore/Account.swift index 6e781c1cfe..1e7216c4a3 100644 --- a/TelegramCore/Account.swift +++ b/TelegramCore/Account.swift @@ -1221,10 +1221,14 @@ public class Account { public func resetStateManagement() { self.stateManager.reset() - self.contactSyncManager.beginSync(importableContacts: self.importableContacts.get()) + self.restartContactManagement() self.managedStickerPacksDisposable.set(manageStickerPacks(network: self.network, postbox: self.postbox).start()) } + public func restartContactManagement() { + self.contactSyncManager.beginSync(importableContacts: self.importableContacts.get()) + } + public func peerInputActivities(peerId: PeerId) -> Signal<[(PeerId, PeerInputActivity)], NoError> { return self.peerInputActivityManager.activities(peerId: peerId) |> map { activities in diff --git a/TelegramCore/ContactManagement.swift b/TelegramCore/ContactManagement.swift index b4939e1861..cee45293ea 100644 --- a/TelegramCore/ContactManagement.swift +++ b/TelegramCore/ContactManagement.swift @@ -167,17 +167,31 @@ public func deleteContactPeerInteractively(account: Account, peerId: PeerId) -> |> switchToLatest } -public func deleteAllContacts(postbox: Postbox, network: Network) -> Signal { - return postbox.transaction { transaction -> [Api.InputUser] in +public func deleteAllContacts(account: Account) -> Signal { + return account.postbox.transaction { transaction -> [Api.InputUser] in return transaction.getContactPeerIds().compactMap(transaction.getPeer).compactMap({ apiInputUser($0) }).compactMap({ $0 }) } - |> mapToSignal { users -> Signal in - return network.request(Api.functions.contacts.deleteContacts(id: users)) + |> mapToSignal { users -> Signal in + let deleteContacts = account.network.request(Api.functions.contacts.deleteContacts(id: users)) |> `catch` { _ -> Signal in return .single(.boolFalse) } - |> mapToSignal { _ -> Signal in - return .complete() + let deleteImported = account.network.request(Api.functions.contacts.resetSaved()) + |> `catch` { _ -> Signal in + return .single(.boolFalse) + } + return combineLatest(deleteContacts, deleteImported) + |> mapToSignal { _ -> Signal in + return account.postbox.transaction { transaction -> Void in + transaction.replaceContactPeerIds(Set()) + transaction.clearDeviceContactImportInfoIdentifiers() + } + |> mapToSignal { _ -> Signal in + account.restartContactManagement() + + return .complete() + } + |> ignoreValues } } } diff --git a/TelegramCore/NotificationExceptionsList.swift b/TelegramCore/NotificationExceptionsList.swift index 2e17529bf7..c9ceff6734 100644 --- a/TelegramCore/NotificationExceptionsList.swift +++ b/TelegramCore/NotificationExceptionsList.swift @@ -11,7 +11,7 @@ public final class NotificationExceptionsList: Equatable { public let peers: [PeerId: Peer] public let settings: [PeerId: TelegramPeerNotificationSettings] - init(peers: [PeerId: Peer], settings: [PeerId: TelegramPeerNotificationSettings]) { + public init(peers: [PeerId: Peer], settings: [PeerId: TelegramPeerNotificationSettings]) { self.peers = peers self.settings = settings }