Merge branch 'client-fix-room-sorting' into 'master'
[Client] Better room sorting See merge request famedly/famedlysdk!144
This commit is contained in:
commit
c78330ea58
|
@ -46,6 +46,7 @@ import 'utils/MatrixException.dart';
|
||||||
|
|
||||||
typedef AccountDataEventCB = void Function(AccountData accountData);
|
typedef AccountDataEventCB = void Function(AccountData accountData);
|
||||||
typedef PresenceCB = void Function(Presence presence);
|
typedef PresenceCB = void Function(Presence presence);
|
||||||
|
typedef RoomSorter = int Function(Room a, Room b);
|
||||||
|
|
||||||
enum HTTPType { GET, POST, PUT, DELETE }
|
enum HTTPType { GET, POST, PUT, DELETE }
|
||||||
|
|
||||||
|
@ -532,6 +533,7 @@ class Client {
|
||||||
if (this.store != null) {
|
if (this.store != null) {
|
||||||
await this.store.storeClient();
|
await this.store.storeClient();
|
||||||
this._rooms = await this.store.getRoomList(onlyLeft: false);
|
this._rooms = await this.store.getRoomList(onlyLeft: false);
|
||||||
|
this._sortRooms();
|
||||||
this.accountData = await this.store.getAccountData();
|
this.accountData = await this.store.getAccountData();
|
||||||
this.presences = await this.store.getPresences();
|
this.presences = await this.store.getPresences();
|
||||||
}
|
}
|
||||||
|
@ -948,7 +950,7 @@ class Client {
|
||||||
}
|
}
|
||||||
if (rooms[j].onUpdate != null) rooms[j].onUpdate();
|
if (rooms[j].onUpdate != null) rooms[j].onUpdate();
|
||||||
}
|
}
|
||||||
sortAndUpdate();
|
_sortRooms();
|
||||||
}
|
}
|
||||||
|
|
||||||
void _updateRoomsByEventUpdate(EventUpdate eventUpdate) {
|
void _updateRoomsByEventUpdate(EventUpdate eventUpdate) {
|
||||||
|
@ -991,17 +993,22 @@ class Client {
|
||||||
RoomAccountData.fromJson(eventUpdate.content, rooms[j]);
|
RoomAccountData.fromJson(eventUpdate.content, rooms[j]);
|
||||||
}
|
}
|
||||||
if (rooms[j].onUpdate != null) rooms[j].onUpdate();
|
if (rooms[j].onUpdate != null) rooms[j].onUpdate();
|
||||||
if (eventUpdate.type == "timeline") sortAndUpdate();
|
if (eventUpdate.type == "timeline") _sortRooms();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool sortLock = false;
|
bool _sortLock = false;
|
||||||
|
|
||||||
sortAndUpdate() {
|
/// The compare function how the rooms should be sorted internally. By default
|
||||||
|
/// rooms are sorted by timestamp of the last m.room.message event or the last
|
||||||
|
/// event if there is no known message.
|
||||||
|
RoomSorter sortRoomsBy = (a, b) => b.timeCreated.millisecondsSinceEpoch
|
||||||
|
.compareTo(a.timeCreated.millisecondsSinceEpoch);
|
||||||
|
|
||||||
|
_sortRooms() {
|
||||||
if (prevBatch == null) return;
|
if (prevBatch == null) return;
|
||||||
if (sortLock || rooms.length < 2) return;
|
if (_sortLock || rooms.length < 2) return;
|
||||||
sortLock = true;
|
_sortLock = true;
|
||||||
rooms?.sort((a, b) => b.timeCreated.millisecondsSinceEpoch
|
rooms?.sort(sortRoomsBy);
|
||||||
.compareTo(a.timeCreated.millisecondsSinceEpoch));
|
_sortLock = false;
|
||||||
sortLock = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue