Merge branch 'user-fix-calcDisplayname' into 'master'

User fix calc displayname

See merge request famedly/famedlysdk!27
This commit is contained in:
Marcel 2019-07-03 11:15:54 +00:00
commit b57542b65c
4 changed files with 28 additions and 7 deletions

View file

@ -127,7 +127,8 @@ class Event {
} }
/// Generate a new Event object from a json string, mostly a table row. /// Generate a new Event object from a json string, mostly a table row.
static Event fromJson(Map<String, dynamic> jsonObj, Room room) { static Event fromJson(Map<String, dynamic> jsonObj, Room room,
{User senderUser, User stateKeyUser}) {
Map<String, dynamic> content = jsonObj["content"]; Map<String, dynamic> content = jsonObj["content"];
if (content == null && jsonObj["content_json"] != null) if (content == null && jsonObj["content_json"] != null)
@ -137,12 +138,16 @@ class Event {
print("jsonObj decode of event content failed: ${e.toString()}"); print("jsonObj decode of event content failed: ${e.toString()}");
content = {}; content = {};
} }
else if (content == null) content = {};
if (senderUser == null) senderUser = User.fromJson(jsonObj, room);
if (stateKeyUser == null) stateKeyUser = User(jsonObj["state_key"]);
return Event( return Event(
jsonObj["event_id"] ?? jsonObj["id"], jsonObj["event_id"] ?? jsonObj["id"],
User.fromJson(jsonObj, room), senderUser,
ChatTime(jsonObj["origin_server_ts"]), ChatTime(jsonObj["origin_server_ts"]),
stateKey: User(jsonObj["state_key"]), stateKey: stateKeyUser,
environment: jsonObj["type"], environment: jsonObj["type"],
status: jsonObj["status"] ?? 2, status: jsonObj["status"] ?? 2,
content: content, content: content,

View file

@ -463,11 +463,16 @@ class Store {
/// Returns a list of events for the given room and sets all participants. /// Returns a list of events for the given room and sets all participants.
Future<List<Event>> getEventList(Room room) async { Future<List<Event>> getEventList(Room room) async {
List<Map<String, dynamic>> memberRes = await db.rawQuery(
"SELECT * " + " FROM Users " + " WHERE users.chat_id=?", [room.id]);
Map<String, User> userMap = {};
for (num i = 0; i < memberRes.length; i++)
userMap[memberRes[i]["matrix_id"]] = User.fromJson(memberRes[i], room);
List<Map<String, dynamic>> eventRes = await db.rawQuery( List<Map<String, dynamic>> eventRes = await db.rawQuery(
"SELECT * " + "SELECT * " +
" FROM Events events, User user " + " FROM Events events " +
" WHERE events.chat_id=?" + " WHERE events.chat_id=?" +
" AND events.sender=user.matrix_id " +
" GROUP BY events.id " + " GROUP BY events.id " +
" ORDER BY origin_server_ts DESC", " ORDER BY origin_server_ts DESC",
[room.id]); [room.id]);
@ -475,7 +480,9 @@ class Store {
List<Event> eventList = []; List<Event> eventList = [];
for (num i = 0; i < eventRes.length; i++) for (num i = 0; i < eventRes.length; i++)
eventList.add(Event.fromJson(eventRes[i], room)); eventList.add(Event.fromJson(eventRes[i], room,
senderUser: userMap[eventRes[i]["sender"]],
stateKeyUser: userMap[eventRes[i]["state_key"]]));
return eventList; return eventList;
} }

View file

@ -72,7 +72,7 @@ class User {
/// Returns the displayname or the local part of the Matrix ID if the user /// Returns the displayname or the local part of the Matrix ID if the user
/// has no displayname. /// has no displayname.
String calcDisplayname() => displayName.isEmpty String calcDisplayname() => (displayName == null || displayName.isEmpty)
? id.replaceFirst("@", "").split(":")[0] ? id.replaceFirst("@", "").split(":")[0]
: displayName; : displayName;

View file

@ -51,5 +51,14 @@ void main() {
expect(user.powerLevel, powerLevel); expect(user.powerLevel, powerLevel);
expect(user.calcDisplayname(), displayName); expect(user.calcDisplayname(), displayName);
}); });
test("calcDisplayname", () async {
final User user1 = User("@alice:example.com");
final User user2 = User("@alice:example.com", displayName: "SuperAlice");
final User user3 = User("@alice:example.com", displayName: "");
expect(user1.calcDisplayname(), "alice");
expect(user2.calcDisplayname(), "SuperAlice");
expect(user3.calcDisplayname(), "alice");
});
}); });
} }