Swiftgram/TelegramUI/LegacySuggestionContext.swift
2018-01-09 13:18:08 +04:00

59 lines
2.4 KiB
Swift

import Foundation
import TelegramCore
import Postbox
import SwiftSignalKit
import LegacyComponents
func legacySuggestionContext(account: Account, peerId: PeerId) -> TGSuggestionContext {
let context = TGSuggestionContext()
context.userListSignal = { mention in
return SSignal { subscriber in
if let mention = mention {
let normalizedQuery = mention.lowercased()
let disposable = peerParticipants(postbox: account.postbox, id: peerId).start(next: { peers in
let filteredPeers = peers.filter { peer in
if peer.indexName.matchesByTokens(normalizedQuery) {
return true
}
if let addressName = peer.addressName, addressName.lowercased().hasPrefix(normalizedQuery) {
return true
}
return false
}
let sortedPeers = filteredPeers.sorted(by: { lhs, rhs in
let result = lhs.indexName.indexName(.lastNameFirst).compare(rhs.indexName.indexName(.lastNameFirst))
return result == .orderedAscending
})
let users = NSMutableArray()
for peer in sortedPeers {
let user = TGUser()
if let peer = peer as? TelegramUser {
user.uid = peer.id.id
user.firstName = peer.firstName
user.lastName = peer.lastName
user.userName = peer.addressName
if let representation = smallestImageRepresentation(peer.photo) {
user.photoUrlSmall = legacyImageLocationUri(resource: representation.resource)
}
users.add(user)
}
}
subscriber?.putNext(users)
subscriber?.putCompletion()
})
return SBlockDisposable {
disposable.dispose()
}
} else {
subscriber?.putNext(NSArray())
subscriber?.putCompletion()
return nil
}
}
}
return context
}