use of org.matrix.androidsdk.rest.model.search.SearchUsersRequestResponse in project matrix-android-sdk by matrix-org.
the class EventsRestClient method searchUsers.
/**
* Search users with a patter,
*
* @param text the text to search for.
* @param limit the maximum nbr of users in the response
* @param userIdsFilter the userIds to exclude from the result
* @param callback the request callback
*/
public void searchUsers(final String text, final Integer limit, final Set<String> userIdsFilter, final ApiCallback<SearchUsersResponse> callback) {
SearchUsersParams searchParams = new SearchUsersParams();
searchParams.search_term = text;
searchParams.limit = limit + ((null != userIdsFilter) ? userIdsFilter.size() : 0);
final String uid = mSearchUsersPatternIdentifier = System.currentTimeMillis() + " " + text + " " + limit;
final String description = "searchUsers";
try {
// don't retry to send the request
// if the search fails, stop it
mApi.searchUsers(searchParams, new RestAdapterCallback<SearchUsersRequestResponse>(description, null, new ApiCallback<SearchUsersRequestResponse>() {
/**
* Tells if the current response for the latest request.
*
* @return true if it is the response of the latest request.
*/
private boolean isActiveRequest() {
return TextUtils.equals(mSearchUsersPatternIdentifier, uid);
}
@Override
public void onSuccess(SearchUsersRequestResponse aResponse) {
if (isActiveRequest()) {
SearchUsersResponse response = new SearchUsersResponse();
response.limited = aResponse.limited;
response.results = new ArrayList<>();
Set<String> filter = (null != userIdsFilter) ? userIdsFilter : new HashSet<String>();
if (null != aResponse.results) {
for (SearchUsersRequestResponse.User user : aResponse.results) {
if ((null != user.user_id) && !filter.contains(user.user_id)) {
User addedUser = new User();
addedUser.user_id = user.user_id;
addedUser.avatar_url = user.avatar_url;
addedUser.displayname = user.display_name;
response.results.add(addedUser);
}
}
}
callback.onSuccess(response);
mSearchUsersPatternIdentifier = null;
}
}
@Override
public void onNetworkError(Exception e) {
if (isActiveRequest()) {
callback.onNetworkError(e);
mSearchUsersPatternIdentifier = null;
}
}
@Override
public void onMatrixError(MatrixError e) {
if (isActiveRequest()) {
callback.onMatrixError(e);
mSearchUsersPatternIdentifier = null;
}
}
@Override
public void onUnexpectedError(Exception e) {
if (isActiveRequest()) {
callback.onUnexpectedError(e);
mSearchUsersPatternIdentifier = null;
}
}
}, new RestAdapterCallback.RequestRetryCallBack() {
@Override
public void onRetry() {
searchUsers(text, limit, userIdsFilter, callback);
}
}));
} catch (Throwable t) {
callback.onUnexpectedError(new Exception(t));
}
}
Aggregations