Various improvements

This commit is contained in:
Ilya Laktyushin
2022-10-20 08:03:43 +03:00
parent 6075e6c335
commit 6af5dcf332
17 changed files with 223 additions and 66 deletions

View File

@@ -172,8 +172,49 @@ func _internal_updateAddressName(account: Account, domain: AddressNameDomain, na
} |> mapError { _ -> UpdateAddressNameError in } |> switchToLatest
}
public enum DeactivateAllAddressNamesError {
case generic
}
func _internal_deactivateAllAddressNames(account: Account, peerId: EnginePeer.Id) -> Signal<Never, DeactivateAllAddressNamesError> {
return account.postbox.transaction { transaction -> Signal<Never, DeactivateAllAddressNamesError> in
if let peer = transaction.getPeer(peerId), let inputChannel = apiInputChannel(peer) {
return account.network.request(Api.functions.channels.deactivateAllUsernames(channel: inputChannel), automaticFloodWait: false)
|> mapError { _ -> DeactivateAllAddressNamesError in
return .generic
}
|> mapToSignal { result -> Signal<Never, DeactivateAllAddressNamesError> in
return account.postbox.transaction { transaction -> Signal<Void, DeactivateAllAddressNamesError> in
if case .boolTrue = result, let peer = transaction.getPeer(account.peerId) as? TelegramChannel {
var updatedNames: [TelegramPeerUsername] = []
for username in peer.usernames {
var updatedFlags = username.flags
updatedFlags.remove(.isActive)
updatedNames.append(TelegramPeerUsername(flags: updatedFlags, username: username.username))
}
let updatedUser = peer.withUpdatedAddressNames(updatedNames)
updatePeers(transaction: transaction, peers: [updatedUser], update: { _, updated in
return updated
})
}
return .complete()
}
|> castError(DeactivateAllAddressNamesError.self)
|> switchToLatest
|> ignoreValues
}
} else {
return .never()
}
}
|> mapError { _ -> DeactivateAllAddressNamesError in
}
|> switchToLatest
}
public enum ToggleAddressNameActiveError {
case generic
case activeLimitReached
}
func _internal_toggleAddressNameActive(account: Account, domain: AddressNameDomain, name: String, active: Bool) -> Signal<Void, ToggleAddressNameActiveError> {

View File

@@ -47,6 +47,10 @@ public extension TelegramEngine {
return _internal_updateAddressName(account: self.account, domain: domain, name: name)
}
public func deactivateAllAddressNames(peerId: EnginePeer.Id) -> Signal<Never, DeactivateAllAddressNamesError> {
return _internal_deactivateAllAddressNames(account: self.account, peerId: peerId)
}
public func toggleAddressNameActive(domain: AddressNameDomain, name: String, active: Bool) -> Signal<Void, ToggleAddressNameActiveError> {
return _internal_toggleAddressNameActive(account: self.account, domain: domain, name: name, active: active)
}