Search in sources :

Example 1 with SearchUsersParams

use of org.matrix.androidsdk.rest.model.search.SearchUsersParams 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));
    }
}
Also used : User(org.matrix.androidsdk.rest.model.User) ApiCallback(org.matrix.androidsdk.rest.callback.ApiCallback) SearchUsersParams(org.matrix.androidsdk.rest.model.search.SearchUsersParams) SearchUsersRequestResponse(org.matrix.androidsdk.rest.model.search.SearchUsersRequestResponse) MatrixError(org.matrix.androidsdk.rest.model.MatrixError) SearchUsersResponse(org.matrix.androidsdk.rest.model.search.SearchUsersResponse)

Aggregations

ApiCallback (org.matrix.androidsdk.rest.callback.ApiCallback)1 MatrixError (org.matrix.androidsdk.rest.model.MatrixError)1 User (org.matrix.androidsdk.rest.model.User)1 SearchUsersParams (org.matrix.androidsdk.rest.model.search.SearchUsersParams)1 SearchUsersRequestResponse (org.matrix.androidsdk.rest.model.search.SearchUsersRequestResponse)1 SearchUsersResponse (org.matrix.androidsdk.rest.model.search.SearchUsersResponse)1