Implement calcDisplayname without local part
This commit is contained in:
parent
01daa3ec44
commit
7e9c8f88f3
|
@ -1134,8 +1134,13 @@ class Room {
|
||||||
final Set<String> _requestingMatrixIds = {};
|
final Set<String> _requestingMatrixIds = {};
|
||||||
|
|
||||||
/// Requests a missing [User] for this room. Important for clients using
|
/// Requests a missing [User] for this room. Important for clients using
|
||||||
/// lazy loading.
|
/// lazy loading. If the user can't be found this method tries to fetch
|
||||||
Future<User> requestUser(String mxID, {bool ignoreErrors = false}) async {
|
/// the displayname and avatar from the profile if [requestProfile] is true.
|
||||||
|
Future<User> requestUser(
|
||||||
|
String mxID, {
|
||||||
|
bool ignoreErrors = false,
|
||||||
|
bool requestProfile = true,
|
||||||
|
}) async {
|
||||||
if (getState(EventTypes.RoomMember, mxID) != null) {
|
if (getState(EventTypes.RoomMember, mxID) != null) {
|
||||||
return getState(EventTypes.RoomMember, mxID).asUser;
|
return getState(EventTypes.RoomMember, mxID).asUser;
|
||||||
}
|
}
|
||||||
|
@ -1147,10 +1152,24 @@ class Room {
|
||||||
EventTypes.RoomMember,
|
EventTypes.RoomMember,
|
||||||
mxID,
|
mxID,
|
||||||
);
|
);
|
||||||
|
} catch (exception) {
|
||||||
|
if (!ignoreErrors) {
|
||||||
|
_requestingMatrixIds.remove(mxID);
|
||||||
|
rethrow;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (resp == null && requestProfile) {
|
||||||
|
try {
|
||||||
|
final profile = await client.api.requestProfile(mxID);
|
||||||
|
resp = {
|
||||||
|
'displayname': profile.displayname,
|
||||||
|
'avatar_url': profile.avatarUrl,
|
||||||
|
};
|
||||||
} catch (exception) {
|
} catch (exception) {
|
||||||
_requestingMatrixIds.remove(mxID);
|
_requestingMatrixIds.remove(mxID);
|
||||||
if (!ignoreErrors) rethrow;
|
if (!ignoreErrors) rethrow;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (resp == null) {
|
if (resp == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,11 +97,14 @@ class User extends Event {
|
||||||
/// has no displayname. If [formatLocalpart] is true, then the localpart will
|
/// has no displayname. If [formatLocalpart] is true, then the localpart will
|
||||||
/// be formatted in the way, that all "_" characters are becomming white spaces and
|
/// be formatted in the way, that all "_" characters are becomming white spaces and
|
||||||
/// the first character of each word becomes uppercase.
|
/// the first character of each word becomes uppercase.
|
||||||
String calcDisplayname({bool formatLocalpart = true}) {
|
/// If [mxidLocalPartFallback] is true, then the local part of the mxid will be shown
|
||||||
|
/// if there is no other displayname available. If not then this will return "Unknown user".
|
||||||
|
String calcDisplayname(
|
||||||
|
{bool formatLocalpart = true, bool mxidLocalPartFallback = true}) {
|
||||||
if (displayName?.isNotEmpty ?? false) {
|
if (displayName?.isNotEmpty ?? false) {
|
||||||
return displayName;
|
return displayName;
|
||||||
}
|
}
|
||||||
if (stateKey != null) {
|
if (stateKey != null && mxidLocalPartFallback) {
|
||||||
if (!formatLocalpart) {
|
if (!formatLocalpart) {
|
||||||
return stateKey.localpart;
|
return stateKey.localpart;
|
||||||
}
|
}
|
||||||
|
@ -113,7 +116,7 @@ class User extends Event {
|
||||||
}
|
}
|
||||||
return words.join(' ');
|
return words.join(' ');
|
||||||
}
|
}
|
||||||
return 'Unknown User';
|
return 'Unknown user';
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Call the Matrix API to kick this user from this room.
|
/// Call the Matrix API to kick this user from this room.
|
||||||
|
|
|
@ -81,6 +81,8 @@ void main() {
|
||||||
expect(user2.calcDisplayname(), 'SuperAlice');
|
expect(user2.calcDisplayname(), 'SuperAlice');
|
||||||
expect(user3.calcDisplayname(), 'Alice Mep');
|
expect(user3.calcDisplayname(), 'Alice Mep');
|
||||||
expect(user3.calcDisplayname(formatLocalpart: false), 'alice_mep');
|
expect(user3.calcDisplayname(formatLocalpart: false), 'alice_mep');
|
||||||
|
expect(
|
||||||
|
user3.calcDisplayname(mxidLocalPartFallback: false), 'Unknown user');
|
||||||
});
|
});
|
||||||
test('kick', () async {
|
test('kick', () async {
|
||||||
await client.checkServer('https://fakeserver.notexisting');
|
await client.checkServer('https://fakeserver.notexisting');
|
||||||
|
|
Loading…
Reference in a new issue