Merge pull request #4175 from matrix-org/travis/room-list-updates

Ensure the room list always triggers updates on itself
This commit is contained in:
Travis Ralston 2020-03-04 12:23:58 -07:00 committed by GitHub
commit 7f66198afb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -372,6 +372,14 @@ class RoomListStore extends Store {
_slotRoomIntoList(room, category, tag, existingEntries, newList, lastTimestampFn) { _slotRoomIntoList(room, category, tag, existingEntries, newList, lastTimestampFn) {
const targetCategoryIndex = CATEGORY_ORDER.indexOf(category); const targetCategoryIndex = CATEGORY_ORDER.indexOf(category);
let categoryComparator = (a, b) => lastTimestampFn(a.room) >= lastTimestampFn(b.room);
const sortAlgorithm = getListAlgorithm(tag, this._state.algorithm);
if (sortAlgorithm === ALGO_RECENT) {
categoryComparator = (a, b) => this._recentsComparator(a, b, lastTimestampFn);
} else if (sortAlgorithm === ALGO_ALPHABETIC) {
categoryComparator = (a, b) => this._lexicographicalComparator(a, b);
}
// The slotting algorithm works by trying to position the room in the most relevant // The slotting algorithm works by trying to position the room in the most relevant
// category of the list (red > grey > etc). To accomplish this, we need to consider // category of the list (red > grey > etc). To accomplish this, we need to consider
// a couple cases: the category existing in the list but having other rooms in it and // a couple cases: the category existing in the list but having other rooms in it and
@ -449,7 +457,7 @@ class RoomListStore extends Store {
// based on most recent timestamp. // based on most recent timestamp.
const changedBoundary = entryCategoryIndex > targetCategoryIndex; const changedBoundary = entryCategoryIndex > targetCategoryIndex;
const currentCategory = entryCategoryIndex === targetCategoryIndex; const currentCategory = entryCategoryIndex === targetCategoryIndex;
if (changedBoundary || (currentCategory && lastTimestampFn(room) >= lastTimestampFn(entry.room))) { if (changedBoundary || (currentCategory && categoryComparator({room}, entry) <= 0)) {
if (changedBoundary) { if (changedBoundary) {
// If we changed a boundary, then we've gone too far - go to the top of the last // If we changed a boundary, then we've gone too far - go to the top of the last
// section instead. // section instead.
@ -479,12 +487,6 @@ class RoomListStore extends Store {
_setRoomCategory(room, category) { _setRoomCategory(room, category) {
if (!room) return; // This should only happen in tests if (!room) return; // This should only happen in tests
if (!this._state.orderImportantFirst) {
// XXX bail here early to avoid https://github.com/vector-im/riot-web/issues/9216
// this may mean that category updates are missed whilst not ordering by importance first
return;
}
const listsClone = {}; const listsClone = {};
// Micro optimization: Support lazily loading the last timestamp in a room // Micro optimization: Support lazily loading the last timestamp in a room