mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 01:20:12 +00:00
Add user search for dm chats (#739)
* Add searchUsers in ClientProxy * Add UserSearchProtocol * Delete UserSearch file * Add search * Refine StartChatScreen * Improve StartChatViewModel * Add localizations * Fix no result style * Update localizations * Add UTs * Add UI tests * Cleanup * Refine tests * Add changelog.d file * Naming refactor * Refactor ClientProxyProtocol api * Fix typo * Add mark * Rename tests * Update Dangerfile * Improve UI test code * Refactor search api * Improve style * Improve combine chain * Add comment * Improve StartChatScreen * Improve updateState * Add extension Published.Publisher * Improve UI tests * Remove Combine import * Cleanup * Remove “proxy” wording * Delete extra extensions * Refactor Publisher api
This commit is contained in:
@@ -248,6 +248,16 @@ class ClientProxy: ClientProxyProtocol {
|
||||
}
|
||||
}
|
||||
|
||||
func searchUsers(searchTerm: String, limit: UInt) async -> Result<SearchUsersResults, ClientProxyError> {
|
||||
await Task.dispatch(on: clientQueue) {
|
||||
do {
|
||||
return try .success(.init(sdkResults: self.client.searchUsers(searchTerm: searchTerm, limit: UInt64(limit))))
|
||||
} catch {
|
||||
return .failure(.failedSearchingUsers)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Private
|
||||
|
||||
private func loadUserAvatarURLFromCache() {
|
||||
|
||||
@@ -31,6 +31,7 @@ enum ClientProxyError: Error {
|
||||
case failedSettingAccountData
|
||||
case failedRetrievingSessionVerificationController
|
||||
case failedLoadingMedia
|
||||
case failedSearchingUsers
|
||||
}
|
||||
|
||||
enum SlidingSyncConstants {
|
||||
@@ -91,4 +92,6 @@ protocol ClientProxyProtocol: AnyObject, MediaLoaderProtocol {
|
||||
func logout() async
|
||||
|
||||
func setPusher(with configuration: PusherConfiguration) async throws
|
||||
|
||||
func searchUsers(searchTerm: String, limit: UInt) async -> Result<SearchUsersResults, ClientProxyError>
|
||||
}
|
||||
|
||||
@@ -110,4 +110,9 @@ class MockClientProxy: ClientProxyProtocol {
|
||||
setPusherCalled = true
|
||||
setPusherArgument = configuration
|
||||
}
|
||||
|
||||
var searchUsersResult: Result<SearchUsersResults, ClientProxyError> = .success(.init(results: [], limited: false))
|
||||
func searchUsers(searchTerm: String, limit: UInt) async -> Result<SearchUsersResults, ClientProxyError> {
|
||||
searchUsersResult
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,20 +17,32 @@
|
||||
import Foundation
|
||||
import MatrixRustSDK
|
||||
|
||||
struct UserProfileProxy {
|
||||
struct UserProfile {
|
||||
let userID: String
|
||||
let displayName: String?
|
||||
let avatarURL: URL?
|
||||
|
||||
init(userID: String, displayName: String?, avatarURL: URL?) {
|
||||
init(userID: String, displayName: String? = nil, avatarURL: URL? = nil) {
|
||||
self.userID = userID
|
||||
self.displayName = displayName
|
||||
self.avatarURL = avatarURL
|
||||
}
|
||||
|
||||
init(userProfile: UserProfile) {
|
||||
userID = userProfile.userId
|
||||
displayName = userProfile.displayName
|
||||
avatarURL = userProfile.avatarUrl.flatMap(URL.init(string:))
|
||||
init(sdkUserProfile: MatrixRustSDK.UserProfile) {
|
||||
userID = sdkUserProfile.userId
|
||||
displayName = sdkUserProfile.displayName
|
||||
avatarURL = sdkUserProfile.avatarUrl.flatMap(URL.init(string:))
|
||||
}
|
||||
}
|
||||
|
||||
struct SearchUsersResults {
|
||||
let results: [UserProfile]
|
||||
let limited: Bool
|
||||
}
|
||||
|
||||
extension SearchUsersResults {
|
||||
init(sdkResults: MatrixRustSDK.SearchUsersResults) {
|
||||
results = sdkResults.results.map(UserProfile.init)
|
||||
limited = sdkResults.limited
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user