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();
}
}
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;
}
Aggregations