From 48746641ba86d7851c0d8d67b974afe34933b3e7 Mon Sep 17 00:00:00 2001 From: Christian Pauly Date: Tue, 23 Jul 2019 15:03:16 +0200 Subject: [PATCH] [Room] Dynamic name generation --- lib/src/Room.dart | 8 ++++++++ lib/src/RoomList.dart | 21 ++++++++------------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/lib/src/Room.dart b/lib/src/Room.dart index fc28689..eaa9d01 100644 --- a/lib/src/Room.dart +++ b/lib/src/Room.dart @@ -43,6 +43,9 @@ class Room { /// The name of the room if set by a participant. String name; + /// Whether this room has a name or the name is generated by member names. + bool hasName = false; + /// The topic of the room if set by a participant. String topic; @@ -104,6 +107,7 @@ class Room { this.id, this.membership, this.name, + this.hasName, this.topic, this.avatar, this.notificationCount, @@ -375,11 +379,14 @@ class Room { /// Returns a Room from a json String which comes normally from the store. static Future getRoomFromTableRow( Map row, Client matrix) async { + bool newHasName = false; String name = row["topic"]; if (name == "" && !row["canonical_alias"].isEmpty) name = row["canonical_alias"]; else if (name == "") name = await matrix.store?.getChatNameFromMemberNames(row["id"]) ?? ""; + else + newHasName = true; String avatarUrl = row["avatar_url"]; if (avatarUrl == "") @@ -388,6 +395,7 @@ class Room { return Room( id: row["id"], name: name, + hasName: newHasName, membership: Membership.values .firstWhere((e) => e.toString() == 'Membership.' + row["membership"]), topic: row["description"], diff --git a/lib/src/RoomList.dart b/lib/src/RoomList.dart index 2e76613..0fa7146 100644 --- a/lib/src/RoomList.dart +++ b/lib/src/RoomList.dart @@ -124,19 +124,7 @@ class RoomList { if (rooms[j].id == eventUpdate.roomID) break; } final bool found = (j < rooms.length && rooms[j].id == eventUpdate.roomID); - if (!found) { - rooms.insert( - 0, - Room( - id: eventUpdate.roomID, - membership: Membership.join, - name: "", - prev_batch: "", - highlightCount: 0, - notificationCount: 0)); - if (onInsert != null) onInsert(0); - j = 0; - } + if (!found) return; // Is this an old timeline event? Then stop here... /*if (eventUpdate.type == "timeline" && @@ -162,6 +150,8 @@ class RoomList { // Update the room avatar rooms[j].avatar = MxContent(eventUpdate.content["content"]["url"]); } + if (eventUpdate.eventType == "m.room.member" && !rooms[j].hasName) + updateMemberName(j); sortAndUpdate(); } @@ -170,6 +160,11 @@ class RoomList { b.timeCreated.toTimeStamp().compareTo(a.timeCreated.toTimeStamp())); if (onUpdate != null) onUpdate(); } + + void updateMemberName(int position) async { + rooms[position].name = + await client.store.getChatNameFromMemberNames(rooms[position].id); + } } typedef onRoomListUpdateCallback = void Function();