refactor: Request user

This commit is contained in:
Christian Pauly 2021-03-01 08:32:50 +01:00
parent 885141968c
commit 5c35799e18
2 changed files with 30 additions and 10 deletions

View File

@ -1216,6 +1216,7 @@ class Room {
/// Returns the [User] object for the given [mxID] or requests it from /// Returns the [User] object for the given [mxID] or requests it from
/// the homeserver and waits for a response. /// the homeserver and waits for a response.
@Deprecated('Use [requestUser] instead')
Future<User> getUserByMXID(String mxID) async { Future<User> getUserByMXID(String mxID) async {
if (states[mxID] != null) return states[mxID].asUser; if (states[mxID] != null) return states[mxID].asUser;
return requestUser(mxID); return requestUser(mxID);
@ -1224,8 +1225,8 @@ class Room {
/// Returns the [User] object for the given [mxID] or requests it from /// Returns the [User] object for the given [mxID] or requests it from
/// the homeserver and returns a default [User] object while waiting. /// the homeserver and returns a default [User] object while waiting.
User getUserByMXIDSync(String mxID) { User getUserByMXIDSync(String mxID) {
if (states[mxID] != null) { if (getState(EventTypes.RoomMember, mxID) != null) {
return states[mxID].asUser; return getState(EventTypes.RoomMember, mxID).asUser;
} else { } else {
requestUser(mxID, ignoreErrors: true); requestUser(mxID, ignoreErrors: true);
return User(mxID, room: this); return User(mxID, room: this);
@ -1242,6 +1243,17 @@ class Room {
bool ignoreErrors = false, bool ignoreErrors = false,
bool requestProfile = true, bool requestProfile = true,
}) async { }) async {
// TODO: Why is this bug happening at all?
if (mxID == null) {
// Show a warning but first generate a stacktrace.
try {
throw Exception();
} catch (e, s) {
Logs().w('requestUser has been called with a null mxID', e, s);
}
return null;
}
if (getState(EventTypes.RoomMember, mxID) != null) { if (getState(EventTypes.RoomMember, mxID) != null) {
return getState(EventTypes.RoomMember, mxID).asUser; return getState(EventTypes.RoomMember, mxID).asUser;
} }
@ -1250,22 +1262,26 @@ class Room {
final user = await client.database.getUser(client.id, mxID, this); final user = await client.database.getUser(client.id, mxID, this);
if (user != null) { if (user != null) {
setState(user); setState(user);
if (onUpdate != null) onUpdate.add(id); onUpdate.add(id);
return user; return user;
} }
} }
if (mxID == null || !_requestingMatrixIds.add(mxID)) return null; if (!_requestingMatrixIds.add(mxID)) return null;
Map<String, dynamic> resp; Map<String, dynamic> resp;
try { try {
Logs().v(
'Request missing user $mxID in room $displayname from the server...');
resp = await client.requestStateContent( resp = await client.requestStateContent(
id, id,
EventTypes.RoomMember, EventTypes.RoomMember,
mxID, mxID,
); );
} catch (exception) { } catch (e, s) {
if (!ignoreErrors) { if (!ignoreErrors) {
_requestingMatrixIds.remove(mxID); _requestingMatrixIds.remove(mxID);
rethrow; rethrow;
} else {
Logs().w('Unable to request the user $mxID from the server', e, s);
} }
} }
if (resp == null && requestProfile) { if (resp == null && requestProfile) {
@ -1275,9 +1291,13 @@ class Room {
'displayname': profile.displayname, 'displayname': profile.displayname,
'avatar_url': profile.avatarUrl.toString(), 'avatar_url': profile.avatarUrl.toString(),
}; };
} catch (exception) { } catch (e, s) {
_requestingMatrixIds.remove(mxID); _requestingMatrixIds.remove(mxID);
if (!ignoreErrors) rethrow; if (!ignoreErrors) {
rethrow;
} else {
Logs().w('Unable to request the profile $mxID from the server', e, s);
}
} }
} }
if (resp == null) { if (resp == null) {
@ -1287,7 +1307,7 @@ class Room {
displayName: resp['displayname'], displayName: resp['displayname'],
avatarUrl: resp['avatar_url'], avatarUrl: resp['avatar_url'],
room: this); room: this);
states[mxID] = user; setState(user);
await client.database?.transaction(() async { await client.database?.transaction(() async {
final content = <String, dynamic>{ final content = <String, dynamic>{
'sender': mxID, 'sender': mxID,
@ -1304,7 +1324,7 @@ class Room {
sortOrder: 0.0), sortOrder: 0.0),
); );
}); });
if (onUpdate != null) onUpdate.add(id); onUpdate.add(id);
_requestingMatrixIds.remove(mxID); _requestingMatrixIds.remove(mxID);
return user; return user;
} }

View File

@ -354,7 +354,7 @@ void main() {
test('getUserByMXID', () async { test('getUserByMXID', () async {
User user; User user;
try { try {
user = await room.getUserByMXID('@getme:example.com'); user = await room.requestUser('@getme:example.com');
} catch (_) {} } catch (_) {}
expect(user.stateKey, '@getme:example.com'); expect(user.stateKey, '@getme:example.com');
expect(user.calcDisplayname(), 'Getme'); expect(user.calcDisplayname(), 'Getme');