/* * Copyright 2016 OpenMarket Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.matrix.androidsdk.data; import android.text.TextUtils; import org.matrix.androidsdk.MXSession; import org.matrix.androidsdk.rest.callback.ApiCallback; import org.matrix.androidsdk.rest.model.Event; import org.matrix.androidsdk.rest.model.MatrixError; import org.matrix.androidsdk.rest.model.RoomResponse; import java.util.Map; /** * The `RoomEmailInvitation` gathers information for displaying the preview of a room that is unknown for the user. * Such room can come from an email invitation link or a link to a room. */ public class RoomPreviewData { private static final String LOG_TAG = "RoomPreviewData"; // The id of the room to preview. private String mRoomId; // the room Alias private String mRoomAlias; // the id of the event to preview private String mEventId; // In case of email invitation, the information extracted from the email invitation link. private RoomEmailInvitation mRoomEmailInvitation; // preview information // comes from the email invitation or retrieve from an initialSync private String mRoomName; private String mRoomAvatarUrl; // the room state private RoomState mRoomState; // the initial sync data private RoomResponse mRoomResponse; // the session private MXSession mSession; /** * Create an RoomPreviewData instance * @param session the session. * @param roomId the room Id to preview * @param eventId the event Id to preview (optional) * @param emailInvitationParams the email invitation parameters (optional) */ public RoomPreviewData(MXSession session, String roomId, String eventId, String roomAlias, Map<String, String> emailInvitationParams) { mSession = session; mRoomId = roomId; mRoomAlias = roomAlias; mEventId = eventId; if (null != emailInvitationParams) { mRoomEmailInvitation = new RoomEmailInvitation(emailInvitationParams); mRoomName = mRoomEmailInvitation.roomName; mRoomAvatarUrl = mRoomEmailInvitation.roomAvatarUrl; } } /** * @return the room state */ public RoomState getRoomState() { return mRoomState; } /** * Update the room state. * @param roomState the new roomstate */ public void setRoomState(RoomState roomState) { mRoomState = roomState; } /** * @return the room name */ public String getRoomName() { String roomName = mRoomName; if (TextUtils.isEmpty(roomName)) { roomName = getRoomIdOrAlias(); } return roomName; } /** * Set the room name. * @param aRoomName the new room name */ public void setRoomName(String aRoomName) { mRoomName = aRoomName; } /** * @return the room avatar URL */ public String getRoomAvatarUrl() { return mRoomAvatarUrl; } /** * @return the room id */ public String getRoomId() { return mRoomId; } /** * @return the room id or the alias (alias is preferred) */ public String getRoomIdOrAlias() { if (!TextUtils.isEmpty(mRoomAlias)) { return mRoomAlias; } else { return mRoomId; } } /** * @return the event id. */ public String getEventId() { return mEventId; } /** * @return the session */ public MXSession getSession() { return mSession; } /** * @return the initial sync response */ public RoomResponse getRoomResponse() { return mRoomResponse; } /** * @return the room invitation */ public RoomEmailInvitation getRoomEmailInvitation() { return mRoomEmailInvitation; } /** * Attempt to get more information from the homeserver about the room. * @param apiCallback the callback when the operation is done. */ public void fetchPreviewData(final ApiCallback<Void> apiCallback) { mSession.getRoomsApiClient().initialSync(mRoomId, new ApiCallback<RoomResponse>() { @Override public void onSuccess(RoomResponse roomResponse) { // save the initial sync response mRoomResponse = roomResponse; mRoomState = new RoomState(); mRoomState.roomId = mRoomId; for(Event event : roomResponse.state) { mRoomState.applyState(event, EventTimeline.Direction.FORWARDS); } mRoomName = mRoomState.getDisplayName(mSession.getMyUserId()); mRoomAvatarUrl = mRoomState.getAvatarUrl(); apiCallback.onSuccess(null); } @Override public void onNetworkError(Exception e) { mRoomState = new RoomState(); mRoomState.roomId = mRoomId; apiCallback.onNetworkError(e); } @Override public void onMatrixError(MatrixError e) { mRoomState = new RoomState(); mRoomState.roomId = mRoomId; apiCallback.onMatrixError(e); } @Override public void onUnexpectedError(Exception e) { mRoomState = new RoomState(); mRoomState.roomId = mRoomId; apiCallback.onUnexpectedError(e); } }); } }