Search in sources :

Example 21 with Room

use of org.matrix.androidsdk.data.Room in project matrix-android-sdk by matrix-org.

the class MatrixMessageListFragment method onSearchResponse.

/**
 * Manage the search response.
 *
 * @param searchResponse         the search response
 * @param onSearchResultListener the search result listener
 */
protected void onSearchResponse(final SearchResponse searchResponse, final OnSearchResultListener onSearchResultListener) {
    List<SearchResult> searchResults = searchResponse.searchCategories.roomEvents.results;
    ArrayList<MessageRow> messageRows = new ArrayList<>(searchResults.size());
    for (SearchResult searchResult : searchResults) {
        RoomState roomState = null;
        if (null != mRoom) {
            roomState = mRoom.getState();
        }
        if (null == roomState) {
            Room room = mSession.getDataHandler().getStore().getRoom(searchResult.result.roomId);
            if (null != room) {
                roomState = room.getState();
            }
        }
        boolean isValidMessage = false;
        if ((null != searchResult.result) && (null != searchResult.result.getContent())) {
            JsonObject object = searchResult.result.getContentAsJsonObject();
            if (null != object) {
                isValidMessage = (0 != object.entrySet().size());
            }
        }
        if (isValidMessage) {
            messageRows.add(new MessageRow(searchResult.result, roomState));
        }
    }
    Collections.reverse(messageRows);
    mAdapter.clear();
    mAdapter.addAll(messageRows);
    mNextBatch = searchResponse.searchCategories.roomEvents.nextBatch;
    if (null != onSearchResultListener) {
        try {
            onSearchResultListener.onSearchSucceed(messageRows.size());
        } catch (Exception e) {
            Log.e(LOG_TAG, "onSearchResponse failed with " + e.getMessage());
        }
    }
}
Also used : MessageRow(org.matrix.androidsdk.adapters.MessageRow) ArrayList(java.util.ArrayList) JsonObject(com.google.gson.JsonObject) SearchResult(org.matrix.androidsdk.rest.model.search.SearchResult) Room(org.matrix.androidsdk.data.Room) RoomState(org.matrix.androidsdk.data.RoomState)

Example 22 with Room

use of org.matrix.androidsdk.data.Room in project matrix-android-sdk by matrix-org.

the class MXFileStore method loadSummary.

/**
 * Load the room summary from the files system.
 *
 * @param roomId the room id.
 * @return true if the operation succeeds;
 */
private boolean loadSummary(final String roomId) {
    boolean succeed = true;
    // do not check if the room exists here.
    // if the user is invited to a room, the room object is not created until it is joined.
    RoomSummary summary = null;
    try {
        File messagesListFile = new File(mStoreRoomsSummaryFolderFile, roomId);
        Object summaryAsVoid = readObject("loadSummary " + roomId, messagesListFile);
        if (null == summaryAsVoid) {
            Log.e(LOG_TAG, "loadSummary failed");
            return false;
        }
        summary = (RoomSummary) summaryAsVoid;
    } catch (Exception e) {
        succeed = false;
        Log.e(LOG_TAG, "loadSummary failed : " + e.getMessage());
    }
    if (null != summary) {
        // summary.getLatestReceivedEvent().finalizeDeserialization();
        Room room = getRoom(summary.getRoomId());
        // it is restored from the room
        if (null != room) {
            summary.setLatestRoomState(room.getState());
        }
        mRoomSummaries.put(roomId, summary);
    }
    return succeed;
}
Also used : File(java.io.File) Room(org.matrix.androidsdk.data.Room) RoomSummary(org.matrix.androidsdk.data.RoomSummary)

Example 23 with Room

use of org.matrix.androidsdk.data.Room in project matrix-android-sdk by matrix-org.

the class MXFileStore method loadRoomAccountData.

/**
 * Load the account Data of a dedicated room.
 * @param roomId the room Id
 * @return true if the operation succeeds.
 */
private boolean loadRoomAccountData(final String roomId) {
    boolean succeeded = true;
    RoomAccountData roomAccountData = null;
    try {
        File accountDataFile = new File(mStoreRoomsAccountDataFolderFile, roomId);
        if (accountDataFile.exists()) {
            Object accountAsVoid = readObject("loadRoomAccountData " + roomId, accountDataFile);
            if (null == accountAsVoid) {
                Log.e(LOG_TAG, "loadRoomAccountData failed");
                return false;
            }
            roomAccountData = (RoomAccountData) accountAsVoid;
        }
    } catch (Exception e) {
        succeeded = false;
        Log.e(LOG_TAG, "loadRoomAccountData failed : " + e.toString());
    }
    // succeeds to extract the message list
    if (null != roomAccountData) {
        Room room = getRoom(roomId);
        if (null != room) {
            room.setAccountData(roomAccountData);
        }
    }
    return succeeded;
}
Also used : RoomAccountData(org.matrix.androidsdk.data.RoomAccountData) File(java.io.File) Room(org.matrix.androidsdk.data.Room)

Example 24 with Room

use of org.matrix.androidsdk.data.Room in project matrix-android-sdk by matrix-org.

the class MXDataHandler method roomIdByAlias.

/**
 * Retrieve a room Id by its alias.
 *
 * @param roomAlias the room alias
 * @param callback  the asynchronous callback
 */
public void roomIdByAlias(final String roomAlias, final ApiCallback<String> callback) {
    String roomId = null;
    Collection<Room> rooms = getStore().getRooms();
    for (Room room : rooms) {
        if (TextUtils.equals(room.getState().alias, roomAlias)) {
            roomId = room.getRoomId();
            break;
        } else {
            // getAliases cannot be null
            List<String> aliases = room.getState().getAliases();
            for (String alias : aliases) {
                if (TextUtils.equals(alias, roomAlias)) {
                    roomId = room.getRoomId();
                    break;
                }
            }
            // find one matched room id.
            if (null != roomId) {
                break;
            }
        }
    }
    if (null != roomId) {
        final String fRoomId = roomId;
        Handler handler = new Handler(Looper.getMainLooper());
        handler.post(new Runnable() {

            @Override
            public void run() {
                callback.onSuccess(fRoomId);
            }
        });
    } else {
        mRoomsRestClient.getRoomIdByAlias(roomAlias, new ApiCallback<RoomAliasDescription>() {

            @Override
            public void onSuccess(RoomAliasDescription info) {
                callback.onSuccess(info.room_id);
            }

            @Override
            public void onNetworkError(Exception e) {
                callback.onNetworkError(e);
            }

            @Override
            public void onMatrixError(MatrixError e) {
                callback.onMatrixError(e);
            }

            @Override
            public void onUnexpectedError(Exception e) {
                callback.onUnexpectedError(e);
            }
        });
    }
}
Also used : RoomAliasDescription(org.matrix.androidsdk.rest.model.RoomAliasDescription) MXOsHandler(org.matrix.androidsdk.util.MXOsHandler) Handler(android.os.Handler) MatrixError(org.matrix.androidsdk.rest.model.MatrixError) Room(org.matrix.androidsdk.data.Room) MXDecryptionException(org.matrix.androidsdk.crypto.MXDecryptionException) UnrecognizedCertificateException(org.matrix.androidsdk.ssl.UnrecognizedCertificateException)

Example 25 with Room

use of org.matrix.androidsdk.data.Room in project matrix-android-sdk by matrix-org.

the class MXDataHandler method getDirectChatRoomIdsListRetroCompat.

/**
 * Return the direct chat room list for retro compatibility with 1:1 rooms.
 *
 * @param aStore                         store instance
 * @param aDirectChatRoomIdsListRetValue the other participants in the 1:1 room
 */
private void getDirectChatRoomIdsListRetroCompat(IMXStore aStore, ArrayList<RoomIdsListRetroCompat> aDirectChatRoomIdsListRetValue) {
    RoomIdsListRetroCompat item;
    if ((null != aStore) && (null != aDirectChatRoomIdsListRetValue)) {
        ArrayList<Room> rooms = new ArrayList<>(aStore.getRooms());
        ArrayList<RoomMember> members;
        int otherParticipantIndex;
        for (Room r : rooms) {
            // been moved to a different tag section
            if ((r.getActiveMembers().size() == 2) && (null != r.getAccountData()) && (!r.getAccountData().hasTags())) {
                RoomMember roomMember = r.getMember(getMyUser().user_id);
                members = new ArrayList<>(r.getActiveMembers());
                if (null != roomMember) {
                    String membership = roomMember.membership;
                    if (TextUtils.equals(membership, RoomMember.MEMBERSHIP_JOIN) || TextUtils.equals(membership, RoomMember.MEMBERSHIP_BAN) || TextUtils.equals(membership, RoomMember.MEMBERSHIP_LEAVE)) {
                        if (TextUtils.equals(members.get(0).getUserId(), getMyUser().user_id)) {
                            otherParticipantIndex = 1;
                        } else {
                            otherParticipantIndex = 0;
                        }
                        item = new RoomIdsListRetroCompat(members.get(otherParticipantIndex).getUserId(), r.getRoomId());
                        aDirectChatRoomIdsListRetValue.add(item);
                    }
                }
            }
        }
    }
}
Also used : RoomMember(org.matrix.androidsdk.rest.model.RoomMember) ArrayList(java.util.ArrayList) Room(org.matrix.androidsdk.data.Room)

Aggregations

Room (org.matrix.androidsdk.data.Room)60 MatrixError (org.matrix.androidsdk.rest.model.MatrixError)33 Event (org.matrix.androidsdk.rest.model.Event)27 ArrayList (java.util.ArrayList)26 CountDownLatch (java.util.concurrent.CountDownLatch)26 HashMap (java.util.HashMap)25 JsonObject (com.google.gson.JsonObject)24 Test (org.junit.Test)22 RoomState (org.matrix.androidsdk.data.RoomState)22 MXEventListener (org.matrix.androidsdk.listeners.MXEventListener)19 Context (android.content.Context)15 RoomMember (org.matrix.androidsdk.rest.model.RoomMember)12 EventTimeline (org.matrix.androidsdk.data.EventTimeline)8 IMXStore (org.matrix.androidsdk.data.store.IMXStore)8 File (java.io.File)7 MXDeviceInfo (org.matrix.androidsdk.crypto.data.MXDeviceInfo)6 ApiCallback (org.matrix.androidsdk.rest.callback.ApiCallback)6 Credentials (org.matrix.androidsdk.rest.model.login.Credentials)6 List (java.util.List)5 Uri (android.net.Uri)4