Merge branch 'main' into karthi/cache-get-config
This commit is contained in:
commit
e1b80a1f3f
|
|
@ -502,6 +502,7 @@ class KeyManager {
|
|||
Future<OutboundGroupSession> _createOutboundGroupSession(
|
||||
String roomId) async {
|
||||
await clearOrUseOutboundGroupSession(roomId, wipe: true);
|
||||
await client.firstSyncReceived;
|
||||
final room = client.getRoomById(roomId);
|
||||
if (room == null) {
|
||||
throw Exception(
|
||||
|
|
|
|||
|
|
@ -1595,9 +1595,9 @@ class Client extends MatrixApi {
|
|||
);
|
||||
|
||||
/// Timeout of 0, so that we don't see a spinner for 30 seconds.
|
||||
final syncFuture = _sync(timeout: Duration.zero);
|
||||
firstSyncReceived = _sync(timeout: Duration.zero);
|
||||
if (waitForFirstSync) {
|
||||
await syncFuture;
|
||||
await firstSyncReceived;
|
||||
}
|
||||
return;
|
||||
} catch (e, s) {
|
||||
|
|
@ -2350,6 +2350,7 @@ class Client extends MatrixApi {
|
|||
Future? userDeviceKeysLoading;
|
||||
Future? roomsLoading;
|
||||
Future? _accountDataLoading;
|
||||
Future? firstSyncReceived;
|
||||
|
||||
Future? get accountDataLoading => _accountDataLoading;
|
||||
|
||||
|
|
|
|||
|
|
@ -223,6 +223,29 @@ class Room {
|
|||
return pinned is Iterable ? pinned.map((e) => e.toString()).toList() : [];
|
||||
}
|
||||
|
||||
/// Returns the heroes as `User` objects.
|
||||
/// This is very useful if you want to make sure that all users are loaded
|
||||
/// from the database, that you need to correctly calculate the displayname
|
||||
/// and the avatar of the room.
|
||||
Future<List<User>> loadHeroUsers() async {
|
||||
var heroes = summary.mHeroes;
|
||||
if (heroes == null) {
|
||||
final directChatMatrixID = this.directChatMatrixID;
|
||||
if (directChatMatrixID != null) {
|
||||
heroes = [directChatMatrixID];
|
||||
}
|
||||
}
|
||||
|
||||
if (heroes == null) return [];
|
||||
|
||||
return await Future.wait(heroes.map((hero) async =>
|
||||
(await requestUser(
|
||||
hero,
|
||||
ignoreErrors: true,
|
||||
)) ??
|
||||
User(hero, room: this)));
|
||||
}
|
||||
|
||||
/// Returns a localized displayname for this server. If the room is a groupchat
|
||||
/// without a name, then it will return the localized version of 'Group with Alice' instead
|
||||
/// of just 'Alice' to make it different to a direct chat.
|
||||
|
|
|
|||
|
|
@ -81,6 +81,9 @@ void main() {
|
|||
stateKey: '',
|
||||
));
|
||||
|
||||
final heroUsers = await room.loadHeroUsers();
|
||||
expect(heroUsers.length, 3);
|
||||
|
||||
expect(room.id, id);
|
||||
expect(room.membership, membership);
|
||||
expect(room.notificationCount, notificationCount);
|
||||
|
|
|
|||
Loading…
Reference in New Issue