WEB-29: Improve room page content loading
InitialSync: load the 30 last messages of each room so that a full page of messages can be displayed without additionnal request
This commit is contained in:
parent
f4094c5eb3
commit
45592ccdfd
|
@ -329,13 +329,29 @@ angular.module('eventHandlerService', [])
|
||||||
},
|
},
|
||||||
|
|
||||||
// Handle messages from /initialSync or /messages
|
// Handle messages from /initialSync or /messages
|
||||||
handleRoomMessages: function(room_id, messages, isLiveEvents) {
|
handleRoomMessages: function(room_id, messages, isLiveEvents, dir) {
|
||||||
initRoom(room_id);
|
initRoom(room_id);
|
||||||
this.handleEvents(messages.chunk, isLiveEvents);
|
|
||||||
|
var events = messages.chunk;
|
||||||
|
|
||||||
|
// Handles messages according to their time order
|
||||||
|
if (dir && 'b' === dir) {
|
||||||
|
// paginateBackMessages requests messages to be in reverse chronological order
|
||||||
|
for (var i=0; i<events.length; i++) {
|
||||||
|
this.handleEvent(events[i], isLiveEvents, isLiveEvents);
|
||||||
|
}
|
||||||
|
|
||||||
// Store how far back we've paginated
|
// Store how far back we've paginated
|
||||||
// This assumes the paginations requests are contiguous and in reverse chronological order
|
|
||||||
$rootScope.events.rooms[room_id].pagination.earliest_token = messages.end;
|
$rootScope.events.rooms[room_id].pagination.earliest_token = messages.end;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// InitialSync returns messages in chronological order
|
||||||
|
for (var i=events.length - 1; i>=0; i--) {
|
||||||
|
this.handleEvent(events[i], isLiveEvents, isLiveEvents);
|
||||||
|
}
|
||||||
|
// Store where to start pagination
|
||||||
|
$rootScope.events.rooms[room_id].pagination.earliest_token = messages.start;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
handleInitialSyncDone: function(initialSyncData) {
|
handleInitialSyncDone: function(initialSyncData) {
|
||||||
|
|
|
@ -104,8 +104,10 @@ angular.module('eventStreamService', [])
|
||||||
settings.isActive = true;
|
settings.isActive = true;
|
||||||
var deferred = $q.defer();
|
var deferred = $q.defer();
|
||||||
|
|
||||||
// Initial sync: get all information and the last message of all rooms of the user
|
// Initial sync: get all information and the last 30 messages of all rooms of the user
|
||||||
matrixService.initialSync(1, false).then(
|
// 30 messages should be enough to display a full page of messages in a room
|
||||||
|
// without requiring to make an additional request
|
||||||
|
matrixService.initialSync(30, false).then(
|
||||||
function(response) {
|
function(response) {
|
||||||
var rooms = response.data.rooms;
|
var rooms = response.data.rooms;
|
||||||
for (var i = 0; i < rooms.length; ++i) {
|
for (var i = 0; i < rooms.length; ++i) {
|
||||||
|
|
|
@ -235,7 +235,7 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput'])
|
||||||
matrixService.paginateBackMessages($scope.room_id, $rootScope.events.rooms[$scope.room_id].pagination.earliest_token, numItems).then(
|
matrixService.paginateBackMessages($scope.room_id, $rootScope.events.rooms[$scope.room_id].pagination.earliest_token, numItems).then(
|
||||||
function(response) {
|
function(response) {
|
||||||
|
|
||||||
eventHandlerService.handleRoomMessages($scope.room_id, response.data, false);
|
eventHandlerService.handleRoomMessages($scope.room_id, response.data, false, 'b');
|
||||||
if (response.data.chunk.length < MESSAGES_PER_PAGINATION) {
|
if (response.data.chunk.length < MESSAGES_PER_PAGINATION) {
|
||||||
// no more messages to paginate. this currently never gets turned true again, as we never
|
// no more messages to paginate. this currently never gets turned true again, as we never
|
||||||
// expire paginated contents in the current implementation.
|
// expire paginated contents in the current implementation.
|
||||||
|
|
Loading…
Reference in New Issue