mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Add additional usernames indexing
This commit is contained in:
parent
4844818014
commit
4d1335d8c6
@ -599,7 +599,7 @@ public enum ContactListPeer: Equatable {
|
||||
case let .peer(peer, _, _):
|
||||
return peer.indexName
|
||||
case let .deviceContact(_, contact):
|
||||
return .personName(first: contact.firstName, last: contact.lastName, addressName: "", phoneNumber: "")
|
||||
return .personName(first: contact.firstName, last: contact.lastName, addressNames: [], phoneNumber: "")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1679,7 +1679,8 @@ public func channelVisibilityController(context: AccountContext, updatedPresenta
|
||||
action = presentationData.strings.Channel_Setup_ActivateAlertShow
|
||||
}
|
||||
presentControllerImpl?(textAlertController(context: context, title: title, text: text, actions: [TextAlertAction(type: .genericAction, title: presentationData.strings.Common_Cancel, action: {}), TextAlertAction(type: .defaultAction, title: action, action: {
|
||||
let _ = context.engine.peers.toggleAddressNameActive(domain: .peer(peerId), name: name, active: true).start(error: { error in
|
||||
let _ = (context.engine.peers.toggleAddressNameActive(domain: .peer(peerId), name: name, active: true)
|
||||
|> deliverOnMainQueue).start(error: { error in
|
||||
let errorText: String
|
||||
switch error {
|
||||
case .activeLimitReached:
|
||||
|
@ -1,27 +1,27 @@
|
||||
import Foundation
|
||||
|
||||
public enum PeerIndexNameRepresentation: Equatable {
|
||||
case title(title: String, addressName: String?)
|
||||
case personName(first: String, last: String, addressName: String?, phoneNumber: String?)
|
||||
case title(title: String, addressNames: [String])
|
||||
case personName(first: String, last: String, addressNames: [String], phoneNumber: String?)
|
||||
|
||||
public var isEmpty: Bool {
|
||||
switch self {
|
||||
case let .title(title, addressName):
|
||||
case let .title(title, addressNames):
|
||||
if !title.isEmpty {
|
||||
return false
|
||||
}
|
||||
if let addressName = addressName, !addressName.isEmpty {
|
||||
if !addressNames.isEmpty {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
case let .personName(first, last, addressName, phoneNumber):
|
||||
case let .personName(first, last, addressNames, phoneNumber):
|
||||
if !first.isEmpty {
|
||||
return false
|
||||
}
|
||||
if !last.isEmpty {
|
||||
return false
|
||||
}
|
||||
if let addressName = addressName, !addressName.isEmpty {
|
||||
if !addressNames.isEmpty {
|
||||
return false
|
||||
}
|
||||
if let phoneNumber = phoneNumber, !phoneNumber.isEmpty {
|
||||
@ -72,16 +72,16 @@ extension PeerIndexNameRepresentation {
|
||||
|
||||
public var indexTokens: [ValueBoxKey] {
|
||||
switch self {
|
||||
case let .title(title, addressName):
|
||||
case let .title(title, addressNames):
|
||||
var tokens: [ValueBoxKey] = stringIndexTokens(title, transliteration: .combined)
|
||||
if let addressName = addressName {
|
||||
for addressName in addressNames {
|
||||
tokens.append(contentsOf: stringIndexTokens(addressName, transliteration: .none))
|
||||
}
|
||||
return tokens
|
||||
case let .personName(first, last, addressName, phoneNumber):
|
||||
case let .personName(first, last, addressNames, phoneNumber):
|
||||
var tokens: [ValueBoxKey] = stringIndexTokens(first, transliteration: .combined)
|
||||
tokens.append(contentsOf: stringIndexTokens(last, transliteration: .combined))
|
||||
if let addressName = addressName {
|
||||
for addressName in addressNames {
|
||||
tokens.append(contentsOf: stringIndexTokens(addressName, transliteration: .none))
|
||||
}
|
||||
if let phoneNumber = phoneNumber {
|
||||
|
@ -168,7 +168,11 @@ public final class TelegramChannel: Peer, Equatable {
|
||||
public let usernames: [TelegramPeerUsername]
|
||||
|
||||
public var indexName: PeerIndexNameRepresentation {
|
||||
return .title(title: self.title, addressName: self.username)
|
||||
var addressNames = self.usernames.map { $0.username }
|
||||
if addressNames.isEmpty, let username = self.username, !username.isEmpty {
|
||||
addressNames = [username]
|
||||
}
|
||||
return .title(title: self.title, addressNames: addressNames)
|
||||
}
|
||||
|
||||
public var associatedMediaIds: [MediaId]? { return nil }
|
||||
|
@ -89,7 +89,7 @@ public final class TelegramGroup: Peer, Equatable {
|
||||
public let version: Int
|
||||
|
||||
public var indexName: PeerIndexNameRepresentation {
|
||||
return .title(title: self.title, addressName: nil)
|
||||
return .title(title: self.title, addressNames: [])
|
||||
}
|
||||
|
||||
public var associatedMediaIds: [MediaId]? { return nil }
|
||||
|
@ -11,7 +11,7 @@ public final class TelegramSecretChat: Peer, Equatable {
|
||||
public let messageAutoremoveTimeout: Int32?
|
||||
|
||||
public var indexName: PeerIndexNameRepresentation {
|
||||
return .title(title: "", addressName: nil)
|
||||
return .title(title: "", addressNames: [])
|
||||
}
|
||||
|
||||
public var associatedMediaIds: [MediaId]? { return nil }
|
||||
|
@ -137,7 +137,11 @@ public final class TelegramUser: Peer, Equatable {
|
||||
}
|
||||
|
||||
public var indexName: PeerIndexNameRepresentation {
|
||||
return .personName(first: self.firstName ?? "", last: self.lastName ?? "", addressName: self.username, phoneNumber: self.phone)
|
||||
var addressNames = self.usernames.map { $0.username }
|
||||
if addressNames.isEmpty, let username = self.username, !username.isEmpty {
|
||||
addressNames = [username]
|
||||
}
|
||||
return .personName(first: self.firstName ?? "", last: self.lastName ?? "", addressNames: addressNames, phoneNumber: self.phone)
|
||||
}
|
||||
|
||||
public var associatedMediaIds: [MediaId]? {
|
||||
|
@ -222,8 +222,12 @@ func _internal_toggleAddressNameActive(account: Account, domain: AddressNameDoma
|
||||
switch domain {
|
||||
case .account:
|
||||
return account.network.request(Api.functions.account.toggleUsername(username: name, active: active ? .boolTrue : .boolFalse), automaticFloodWait: false)
|
||||
|> mapError { _ -> ToggleAddressNameActiveError in
|
||||
return .generic
|
||||
|> mapError { error -> ToggleAddressNameActiveError in
|
||||
if error.errorDescription == "USERNAMES_ACTIVE_TOO_MUCH" {
|
||||
return .activeLimitReached
|
||||
} else {
|
||||
return .generic
|
||||
}
|
||||
}
|
||||
|> mapToSignal { result -> Signal<Void, ToggleAddressNameActiveError> in
|
||||
return account.postbox.transaction { transaction -> Void in
|
||||
@ -276,8 +280,12 @@ func _internal_toggleAddressNameActive(account: Account, domain: AddressNameDoma
|
||||
case let .peer(peerId):
|
||||
if let peer = transaction.getPeer(peerId), let inputChannel = apiInputChannel(peer) {
|
||||
return account.network.request(Api.functions.channels.toggleUsername(channel: inputChannel, username: name, active: active ? .boolTrue : .boolFalse), automaticFloodWait: false)
|
||||
|> mapError { _ -> ToggleAddressNameActiveError in
|
||||
return .generic
|
||||
|> mapError { error -> ToggleAddressNameActiveError in
|
||||
if error.errorDescription == "USERNAMES_ACTIVE_TOO_MUCH" {
|
||||
return .activeLimitReached
|
||||
} else {
|
||||
return .generic
|
||||
}
|
||||
}
|
||||
|> mapToSignal { result -> Signal<Void, ToggleAddressNameActiveError> in
|
||||
return account.postbox.transaction { transaction -> Void in
|
||||
|
@ -145,27 +145,27 @@ public enum EnginePeer: Equatable {
|
||||
}
|
||||
|
||||
public enum IndexName: Equatable {
|
||||
case title(title: String, addressName: String?)
|
||||
case personName(first: String, last: String, addressName: String?, phoneNumber: String?)
|
||||
case title(title: String, addressNames: [String])
|
||||
case personName(first: String, last: String, addressNames: [String], phoneNumber: String?)
|
||||
|
||||
public var isEmpty: Bool {
|
||||
switch self {
|
||||
case let .title(title, addressName):
|
||||
case let .title(title, addressNames):
|
||||
if !title.isEmpty {
|
||||
return false
|
||||
}
|
||||
if let addressName = addressName, !addressName.isEmpty {
|
||||
if !addressNames.isEmpty {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
case let .personName(first, last, addressName, phoneNumber):
|
||||
case let .personName(first, last, addressNames, phoneNumber):
|
||||
if !first.isEmpty {
|
||||
return false
|
||||
}
|
||||
if !last.isEmpty {
|
||||
return false
|
||||
}
|
||||
if let addressName = addressName, !addressName.isEmpty {
|
||||
if !addressNames.isEmpty {
|
||||
return false
|
||||
}
|
||||
if let phoneNumber = phoneNumber, !phoneNumber.isEmpty {
|
||||
@ -396,19 +396,19 @@ public extension EnginePeer.Presence {
|
||||
public extension EnginePeer.IndexName {
|
||||
init(_ indexName: PeerIndexNameRepresentation) {
|
||||
switch indexName {
|
||||
case let .title(title, addressName):
|
||||
self = .title(title: title, addressName: addressName)
|
||||
case let .personName(first, last, addressName, phoneNumber):
|
||||
self = .personName(first: first, last: last, addressName: addressName, phoneNumber: phoneNumber)
|
||||
case let .title(title, addressNames):
|
||||
self = .title(title: title, addressNames: addressNames)
|
||||
case let .personName(first, last, addressNames, phoneNumber):
|
||||
self = .personName(first: first, last: last, addressNames: addressNames, phoneNumber: phoneNumber)
|
||||
}
|
||||
}
|
||||
|
||||
func _asIndexName() -> PeerIndexNameRepresentation {
|
||||
switch self {
|
||||
case let .title(title, addressName):
|
||||
return .title(title: title, addressName: addressName)
|
||||
case let .personName(first, last, addressName, phoneNumber):
|
||||
return .personName(first: first, last: last, addressName: addressName, phoneNumber: phoneNumber)
|
||||
case let .title(title, addressNames):
|
||||
return .title(title: title, addressNames: addressNames)
|
||||
case let .personName(first, last, addressNames, phoneNumber):
|
||||
return .personName(first: first, last: last, addressNames: addressNames, phoneNumber: phoneNumber)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user