use of org.matrix.androidsdk.rest.model.TokensChunkResponse in project matrix-android-sdk by matrix-org.
the class MXMemoryStore method getEarlierMessages.
@Override
public TokensChunkResponse<Event> getEarlierMessages(final String roomId, final String fromToken, final int limit) {
// For older requests (providing a token), returning null for now
if (null != roomId) {
ArrayList<Event> eventsList;
synchronized (mRoomEventsLock) {
LinkedHashMap<String, Event> events = mRoomEvents.get(roomId);
if ((events == null) || (events.size() == 0)) {
return null;
}
// reach the end of the stored items
if (TextUtils.equals(mRoomTokens.get(roomId), fromToken)) {
return null;
}
// check if the token is known in the sublist
eventsList = new ArrayList<>(events.values());
}
ArrayList<Event> subEventsList = new ArrayList<>();
// search from the latest to the oldest events
Collections.reverse(eventsList);
TokensChunkResponse<Event> response = new TokensChunkResponse<>();
// start the latest event and there is enough events to provide to the caller ?
if ((null == fromToken) && (eventsList.size() <= limit)) {
subEventsList = eventsList;
} else {
int index = 0;
if (null != fromToken) {
// search if token is one of the stored events
for (; (index < eventsList.size()) && (!TextUtils.equals(fromToken, eventsList.get(index).mToken)); index++) ;
index++;
}
// found it ?
if (index < eventsList.size()) {
for (; index < eventsList.size(); index++) {
Event event = eventsList.get(index);
subEventsList.add(event);
// loop until to find an event with a token
if ((subEventsList.size() >= limit) && (event.mToken != null)) {
break;
}
}
}
}
// unknown token
if (subEventsList.size() == 0) {
return null;
}
response.chunk = subEventsList;
Event firstEvent = subEventsList.get(0);
Event lastEvent = subEventsList.get(subEventsList.size() - 1);
response.start = firstEvent.mToken;
// unknown last event token, use the latest known one
if ((null == lastEvent.mToken) && !TextUtils.isEmpty(mRoomTokens.get(roomId))) {
lastEvent.mToken = mRoomTokens.get(roomId);
}
response.end = lastEvent.mToken;
return response;
}
return null;
}
Aggregations