summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--resources/qml/RoomList.qml3
-rw-r--r--resources/qml/TopBar.qml1
-rw-r--r--src/timeline/RoomlistModel.cpp6
-rw-r--r--src/timeline/RoomlistModel.h2
-rw-r--r--src/timeline/TimelineModel.cpp13
-rw-r--r--src/timeline/TimelineModel.h4
6 files changed, 29 insertions, 0 deletions
diff --git a/resources/qml/RoomList.qml b/resources/qml/RoomList.qml
index a0009174..fcb2644e 100644
--- a/resources/qml/RoomList.qml
+++ b/resources/qml/RoomList.qml
@@ -143,6 +143,8 @@ Page {
             required property int notificationCount
             required property bool hasLoudNotification
             required property bool hasUnreadMessages
+            required property int roomMemberCount
+            required property string directChatAvatarMxid
 
             color: background
             height: avatarSize + 2 * Nheko.paddingMedium
@@ -237,6 +239,7 @@ Page {
                     width: avatarSize
                     url: avatarUrl.replace("mxc://", "image://MxcImage/")
                     displayName: roomName
+                    userid: roomMemberCount < 3 ?  directChatAvatarMxid : roomId
 
                     Rectangle {
                         id: collapsedNotificationBubble
diff --git a/resources/qml/TopBar.qml b/resources/qml/TopBar.qml
index 7f67c028..0b50f7c6 100644
--- a/resources/qml/TopBar.qml
+++ b/resources/qml/TopBar.qml
@@ -65,6 +65,7 @@ Rectangle {
             width: Nheko.avatarSize
             height: Nheko.avatarSize
             url: avatarUrl.replace("mxc://", "image://MxcImage/")
+            userid: room.roomMemberCount < 3 ? room.directChatAvatarMxid : room.roomId
             displayName: roomName
             onClicked: {
                 if (room)
diff --git a/src/timeline/RoomlistModel.cpp b/src/timeline/RoomlistModel.cpp
index 942a4b05..88411236 100644
--- a/src/timeline/RoomlistModel.cpp
+++ b/src/timeline/RoomlistModel.cpp
@@ -76,6 +76,8 @@ RoomlistModel::roleNames() const
           {IsSpace, "isSpace"},
           {Tags, "tags"},
           {ParentSpaces, "parentSpaces"},
+          {RoomMemberCount, "roomMemberCount"},
+          {DirectChatAvatarMxid, "directChatAvatarMxid"},
         };
 }
 
@@ -129,6 +131,10 @@ RoomlistModel::data(const QModelIndex &index, int role) const
                                         list.push_back(QString::fromStdString(t));
                                 return list;
                         }
+                        case Roles::RoomMemberCount:
+                                return room->roomMemberCount();
+                        case Roles::DirectChatAvatarMxid:
+                                return room->directChatAvatarMxid();
                         default:
                                 return {};
                         }
diff --git a/src/timeline/RoomlistModel.h b/src/timeline/RoomlistModel.h
index 6ac6da18..aca74ea1 100644
--- a/src/timeline/RoomlistModel.h
+++ b/src/timeline/RoomlistModel.h
@@ -65,6 +65,8 @@ public:
                 IsPreviewFetched,
                 Tags,
                 ParentSpaces,
+                RoomMemberCount,
+                DirectChatAvatarMxid,
         };
 
         RoomlistModel(TimelineViewManager *parent = nullptr);
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index 78409e1d..4daf44f3 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -2073,3 +2073,16 @@ TimelineModel::roomMemberCount() const
 {
         return (int)cache::client()->memberCount(room_id_.toStdString());
 }
+
+QString
+TimelineModel::directChatAvatarMxid() const
+{
+        if (roomMemberCount() < 3) {
+                QString id;
+                for (auto member : cache::getMembers(room_id_.toStdString()))
+                        if (member.user_id != UserSettings::instance()->userId())
+                                id = member.user_id;
+                return id;
+        } else
+                return "";
+}
diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h
index 417fbb7f..8c34fc1d 100644
--- a/src/timeline/TimelineModel.h
+++ b/src/timeline/TimelineModel.h
@@ -176,6 +176,8 @@ class TimelineModel : public QAbstractListModel
         Q_PROPERTY(bool isEncrypted READ isEncrypted NOTIFY encryptionChanged)
         Q_PROPERTY(bool isSpace READ isSpace CONSTANT)
         Q_PROPERTY(int trustlevel READ trustlevel NOTIFY trustlevelChanged)
+        Q_PROPERTY(
+          QString directChatAvatarMxid READ directChatAvatarMxid NOTIFY directChatAvatarMxidChanged)
         Q_PROPERTY(InputBar *input READ input CONSTANT)
         Q_PROPERTY(Permissions *permissions READ permissions NOTIFY permissionsChanged)
 
@@ -292,6 +294,7 @@ public:
         bool isEncrypted() const { return isEncrypted_; }
         crypto::Trust trustlevel() const;
         int roomMemberCount() const;
+        QString directChatAvatarMxid() const;
 
         std::optional<mtx::events::collections::TimelineEvents> eventById(const QString &id)
         {
@@ -391,6 +394,7 @@ signals:
         void roomTopicChanged();
         void roomAvatarUrlChanged();
         void roomMemberCountChanged();
+        void directChatAvatarMxidChanged();
         void permissionsChanged();
         void forwardToRoom(mtx::events::collections::TimelineEvents *e, QString roomId);