import SwiftSignalKit import Postbox public enum AddressNameValidationStatus: Equatable { case checking case invalidFormat(AddressNameFormatError) case availability(AddressNameAvailability) } public extension TelegramEngine { final class PeerNames { private let account: Account init(account: Account) { self.account = account } public func addressNameAvailability(domain: AddressNameDomain, name: String) -> Signal { return _internal_addressNameAvailability(account: self.account, domain: domain, name: name) } public func updateAddressName(domain: AddressNameDomain, name: String?) -> Signal { return _internal_updateAddressName(account: self.account, domain: domain, name: name) } public func checkPublicChannelCreationAvailability(location: Bool = false) -> Signal { return _internal_checkPublicChannelCreationAvailability(account: self.account, location: location) } public func adminedPublicChannels(scope: AdminedPublicChannelsScope = .all) -> Signal<[Peer], NoError> { return _internal_adminedPublicChannels(account: self.account, scope: scope) } public func channelAddressNameAssignmentAvailability(peerId: PeerId?) -> Signal { return _internal_channelAddressNameAssignmentAvailability(account: self.account, peerId: peerId) } public func validateAddressNameInteractive(domain: AddressNameDomain, name: String) -> Signal { if let error = _internal_checkAddressNameFormat(name) { return .single(.invalidFormat(error)) } else { return .single(.checking) |> then( self.addressNameAvailability(domain: domain, name: name) |> delay(0.3, queue: Queue.concurrentDefaultQueue()) |> map { result -> AddressNameValidationStatus in .availability(result) } ) } } public func findChannelById(channelId: Int32) -> Signal { return _internal_findChannelById(postbox: self.account.postbox, network: self.account.network, channelId: channelId) } public func supportPeerId() -> Signal { return _internal_supportPeerId(account: self.account) } } }