Search in sources :

Example 11 with ReceiptData

use of org.matrix.androidsdk.rest.model.ReceiptData in project matrix-android-sdk by matrix-org.

the class MatrixMessageListFragment method onReceiptEvent.

@Override
public void onReceiptEvent(List<String> senderIds) {
    // avoid useless refresh
    boolean shouldRefresh = true;
    try {
        IMXStore store = mSession.getDataHandler().getStore();
        int firstPos = mMessageListView.getFirstVisiblePosition();
        int lastPos = mMessageListView.getLastVisiblePosition();
        ArrayList<String> senders = new ArrayList<>();
        ArrayList<String> eventIds = new ArrayList<>();
        for (int index = firstPos; index <= lastPos; index++) {
            Event event = mAdapter.getItem(index).getEvent();
            if ((null != event.getSender()) && (null != event.eventId)) {
                senders.add(event.getSender());
                eventIds.add(event.eventId);
            }
        }
        shouldRefresh = false;
        // check if the receipt will trigger a refresh
        for (String sender : senderIds) {
            if (!TextUtils.equals(sender, mSession.getMyUserId())) {
                ReceiptData receipt = store.getReceipt(mRoom.getRoomId(), sender);
                // sanity check
                if (null != receipt) {
                    // test if the event is displayed
                    int pos = eventIds.indexOf(receipt.eventId);
                    // if displayed
                    if (pos >= 0) {
                        // the sender is not displayed as a reader (makes sense...)
                        shouldRefresh = !TextUtils.equals(senders.get(pos), sender);
                        if (shouldRefresh) {
                            break;
                        }
                    }
                }
            }
        }
    } catch (Exception e) {
        Log.e(LOG_TAG, "onReceiptEvent failed with " + e.getMessage());
    }
    if (shouldRefresh) {
        mAdapter.notifyDataSetChanged();
    }
}
Also used : IMXStore(org.matrix.androidsdk.data.store.IMXStore) ArrayList(java.util.ArrayList) MotionEvent(android.view.MotionEvent) Event(org.matrix.androidsdk.rest.model.Event) ReceiptData(org.matrix.androidsdk.rest.model.ReceiptData)

Example 12 with ReceiptData

use of org.matrix.androidsdk.rest.model.ReceiptData in project matrix-android-sdk by matrix-org.

the class MXFileStore method loadReceipts.

/**
 * Load the events receipts.
 * @param roomId the room Id
 * @return true if the operation succeeds.
 */
private boolean loadReceipts(String roomId) {
    Map<String, ReceiptData> receiptsMap = null;
    File file = new File(mStoreRoomsMessagesReceiptsFolderFile, roomId);
    if (file.exists()) {
        Object receiptsAsVoid = readObject("loadReceipts " + roomId, file);
        if (null != receiptsAsVoid) {
            try {
                List<ReceiptData> receipts = (List<ReceiptData>) receiptsAsVoid;
                receiptsMap = new HashMap<>();
                for (ReceiptData r : receipts) {
                    receiptsMap.put(r.userId, r);
                }
            } catch (Exception e) {
                Log.e(LOG_TAG, "loadReceipts failed : " + e.getMessage());
                return false;
            }
        } else {
            return false;
        }
    }
    if (null != receiptsMap) {
        Map<String, ReceiptData> currentReceiptMap;
        synchronized (mReceiptsByRoomIdLock) {
            currentReceiptMap = mReceiptsByRoomId.get(roomId);
            mReceiptsByRoomId.put(roomId, receiptsMap);
        }
        // merge the current read receipts
        if (null != currentReceiptMap) {
            Collection<ReceiptData> receipts = currentReceiptMap.values();
            for (ReceiptData receipt : receipts) {
                storeReceipt(receipt, roomId);
            }
        }
        dispatchOnReadReceiptsLoaded(roomId);
    }
    return true;
}
Also used : ReceiptData(org.matrix.androidsdk.rest.model.ReceiptData) ArrayList(java.util.ArrayList) List(java.util.List) File(java.io.File)

Aggregations

ReceiptData (org.matrix.androidsdk.rest.model.ReceiptData)12 ArrayList (java.util.ArrayList)7 Event (org.matrix.androidsdk.rest.model.Event)6 File (java.io.File)2 HandlerThread (android.os.HandlerThread)1 MotionEvent (android.view.MotionEvent)1 JsonObject (com.google.gson.JsonObject)1 Type (java.lang.reflect.Type)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Room (org.matrix.androidsdk.data.Room)1 RoomSummary (org.matrix.androidsdk.data.RoomSummary)1 IMXStore (org.matrix.androidsdk.data.store.IMXStore)1