From 1fdecdcc213fe91711649243a315ebd11809f0f9 Mon Sep 17 00:00:00 2001 From: Loren Burkholder Date: Fri, 13 Aug 2021 20:05:26 -0400 Subject: Get direct chat jdenticons to line up --- src/timeline/RoomlistModel.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/timeline/RoomlistModel.cpp') 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 {}; } -- cgit 1.5.1 From 350fc593ed0a6b36f63a2fabc3918d346597c7c5 Mon Sep 17 00:00:00 2001 From: Loren Burkholder Date: Mon, 30 Aug 2021 20:08:47 -0400 Subject: Use better id loading methodology --- resources/qml/Avatar.qml | 3 ++- resources/qml/RoomList.qml | 5 +++-- resources/qml/TopBar.qml | 3 ++- src/timeline/RoomlistModel.cpp | 6 +++--- src/timeline/RoomlistModel.h | 2 +- src/timeline/TimelineModel.cpp | 6 ++++++ src/timeline/TimelineModel.h | 3 +++ 7 files changed, 20 insertions(+), 8 deletions(-) (limited to 'src/timeline/RoomlistModel.cpp') diff --git a/resources/qml/Avatar.qml b/resources/qml/Avatar.qml index 1b7497c1..bf936bff 100644 --- a/resources/qml/Avatar.qml +++ b/resources/qml/Avatar.qml @@ -12,6 +12,7 @@ Rectangle { property string url property string userid + property string roomid property string displayName property alias textColor: label.color property bool crop: true @@ -43,7 +44,7 @@ Rectangle { id: identicon anchors.fill: parent visible: img.status != Image.Ready && Settings.useIdenticon - source: Settings.useIdenticon ? "image://jdenticon/" + userid + "?radius=" + radius : "" + source: Settings.useIdenticon ? ("image://jdenticon/" + (userid !== "" ? userid : roomid) + "?radius=" + (Settings.avatarCircles ? 100 : 25) + ((avatar.crop) ? "" : "&scale")) : "" layer.enabled: true MouseArea { diff --git a/resources/qml/RoomList.qml b/resources/qml/RoomList.qml index fcb2644e..3b7fa84e 100644 --- a/resources/qml/RoomList.qml +++ b/resources/qml/RoomList.qml @@ -143,7 +143,7 @@ Page { required property int notificationCount required property bool hasLoudNotification required property bool hasUnreadMessages - required property int roomMemberCount + required property bool isDirect required property string directChatAvatarMxid color: background @@ -239,7 +239,8 @@ Page { width: avatarSize url: avatarUrl.replace("mxc://", "image://MxcImage/") displayName: roomName - userid: roomMemberCount < 3 ? directChatAvatarMxid : roomId + userid: isDirect ? directChatAvatarMxid : undefined + roomid: roomId Rectangle { id: collapsedNotificationBubble diff --git a/resources/qml/TopBar.qml b/resources/qml/TopBar.qml index 0b50f7c6..78f81b7f 100644 --- a/resources/qml/TopBar.qml +++ b/resources/qml/TopBar.qml @@ -65,7 +65,8 @@ Rectangle { width: Nheko.avatarSize height: Nheko.avatarSize url: avatarUrl.replace("mxc://", "image://MxcImage/") - userid: room.roomMemberCount < 3 ? room.directChatAvatarMxid : room.roomId + roomid: room.roomId + userid: room.isDirect ? room.directChatAvatarMxid : undefined displayName: roomName onClicked: { if (room) diff --git a/src/timeline/RoomlistModel.cpp b/src/timeline/RoomlistModel.cpp index 88411236..d12fb426 100644 --- a/src/timeline/RoomlistModel.cpp +++ b/src/timeline/RoomlistModel.cpp @@ -76,7 +76,7 @@ RoomlistModel::roleNames() const {IsSpace, "isSpace"}, {Tags, "tags"}, {ParentSpaces, "parentSpaces"}, - {RoomMemberCount, "roomMemberCount"}, + {IsDirect, "isDirect"}, {DirectChatAvatarMxid, "directChatAvatarMxid"}, }; } @@ -131,8 +131,8 @@ RoomlistModel::data(const QModelIndex &index, int role) const list.push_back(QString::fromStdString(t)); return list; } - case Roles::RoomMemberCount: - return room->roomMemberCount(); + case Roles::IsDirect: + return room->isDirect(); case Roles::DirectChatAvatarMxid: return room->directChatAvatarMxid(); default: diff --git a/src/timeline/RoomlistModel.h b/src/timeline/RoomlistModel.h index aca74ea1..57669087 100644 --- a/src/timeline/RoomlistModel.h +++ b/src/timeline/RoomlistModel.h @@ -65,7 +65,7 @@ public: IsPreviewFetched, Tags, ParentSpaces, - RoomMemberCount, + IsDirect, DirectChatAvatarMxid, }; diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index 4daf44f3..0e1e8f5d 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -817,6 +817,12 @@ TimelineModel::syncState(const mtx::responses::State &s) emit roomAvatarUrlChanged(); emit roomNameChanged(); emit roomMemberCountChanged(); + + if (roomMemberCount() <= 2) + { + emit isDirectChanged(); + emit directChatAvatarMxidChanged(); + } } else if (std::holds_alternative>(e)) { this->isEncrypted_ = cache::isRoomEncrypted(room_id_.toStdString()); emit encryptionChanged(); diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h index 8c34fc1d..03e33066 100644 --- a/src/timeline/TimelineModel.h +++ b/src/timeline/TimelineModel.h @@ -176,6 +176,7 @@ 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(bool isDirect READ isDirect NOTIFY isDirectChanged) Q_PROPERTY( QString directChatAvatarMxid READ directChatAvatarMxid NOTIFY directChatAvatarMxidChanged) Q_PROPERTY(InputBar *input READ input CONSTANT) @@ -294,6 +295,7 @@ public: bool isEncrypted() const { return isEncrypted_; } crypto::Trust trustlevel() const; int roomMemberCount() const; + bool isDirect() const { return roomMemberCount() <= 2; } // TODO: handle invites QString directChatAvatarMxid() const; std::optional eventById(const QString &id) @@ -394,6 +396,7 @@ signals: void roomTopicChanged(); void roomAvatarUrlChanged(); void roomMemberCountChanged(); + void isDirectChanged(); void directChatAvatarMxidChanged(); void permissionsChanged(); void forwardToRoom(mtx::events::collections::TimelineEvents *e, QString roomId); -- cgit 1.5.1 From 356723fe0644f6e05f934262ea80dca2d33330c3 Mon Sep 17 00:00:00 2001 From: Loren Burkholder Date: Sat, 4 Sep 2021 20:53:33 -0400 Subject: Use more descriptive property name --- resources/qml/RoomList.qml | 4 ++-- resources/qml/TopBar.qml | 2 +- src/timeline/RoomlistModel.cpp | 6 +++--- src/timeline/RoomlistModel.h | 2 +- src/timeline/TimelineModel.cpp | 4 ++-- src/timeline/TimelineModel.h | 6 +++--- 6 files changed, 12 insertions(+), 12 deletions(-) (limited to 'src/timeline/RoomlistModel.cpp') diff --git a/resources/qml/RoomList.qml b/resources/qml/RoomList.qml index 3b7fa84e..addbf571 100644 --- a/resources/qml/RoomList.qml +++ b/resources/qml/RoomList.qml @@ -144,7 +144,7 @@ Page { required property bool hasLoudNotification required property bool hasUnreadMessages required property bool isDirect - required property string directChatAvatarMxid + required property string directChatOtherUserId color: background height: avatarSize + 2 * Nheko.paddingMedium @@ -239,7 +239,7 @@ Page { width: avatarSize url: avatarUrl.replace("mxc://", "image://MxcImage/") displayName: roomName - userid: isDirect ? directChatAvatarMxid : undefined + userid: isDirect ? directChatOtherUserId : "" roomid: roomId Rectangle { diff --git a/resources/qml/TopBar.qml b/resources/qml/TopBar.qml index 78f81b7f..a8a53a24 100644 --- a/resources/qml/TopBar.qml +++ b/resources/qml/TopBar.qml @@ -66,7 +66,7 @@ Rectangle { height: Nheko.avatarSize url: avatarUrl.replace("mxc://", "image://MxcImage/") roomid: room.roomId - userid: room.isDirect ? room.directChatAvatarMxid : undefined + userid: room.isDirect ? room.directChatOtherUserId : "" displayName: roomName onClicked: { if (room) diff --git a/src/timeline/RoomlistModel.cpp b/src/timeline/RoomlistModel.cpp index d12fb426..094b0df6 100644 --- a/src/timeline/RoomlistModel.cpp +++ b/src/timeline/RoomlistModel.cpp @@ -77,7 +77,7 @@ RoomlistModel::roleNames() const {Tags, "tags"}, {ParentSpaces, "parentSpaces"}, {IsDirect, "isDirect"}, - {DirectChatAvatarMxid, "directChatAvatarMxid"}, + {DirectChatOtherUserId, "directChatOtherUserId"}, }; } @@ -133,8 +133,8 @@ RoomlistModel::data(const QModelIndex &index, int role) const } case Roles::IsDirect: return room->isDirect(); - case Roles::DirectChatAvatarMxid: - return room->directChatAvatarMxid(); + case Roles::DirectChatOtherUserId: + return room->directChatOtherUserId(); default: return {}; } diff --git a/src/timeline/RoomlistModel.h b/src/timeline/RoomlistModel.h index 57669087..c0a87aee 100644 --- a/src/timeline/RoomlistModel.h +++ b/src/timeline/RoomlistModel.h @@ -66,7 +66,7 @@ public: Tags, ParentSpaces, IsDirect, - DirectChatAvatarMxid, + DirectChatOtherUserId, }; RoomlistModel(TimelineViewManager *parent = nullptr); diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp index d5c39bbe..ca303040 100644 --- a/src/timeline/TimelineModel.cpp +++ b/src/timeline/TimelineModel.cpp @@ -820,7 +820,7 @@ TimelineModel::syncState(const mtx::responses::State &s) if (roomMemberCount() <= 2) { emit isDirectChanged(); - emit directChatAvatarMxidChanged(); + emit directChatOtherUserIdChanged(); } } else if (std::holds_alternative>(e)) { this->isEncrypted_ = cache::isRoomEncrypted(room_id_.toStdString()); @@ -2080,7 +2080,7 @@ TimelineModel::roomMemberCount() const } QString -TimelineModel::directChatAvatarMxid() const +TimelineModel::directChatOtherUserId() const { if (roomMemberCount() < 3) { QString id; diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h index 03e33066..582c6b28 100644 --- a/src/timeline/TimelineModel.h +++ b/src/timeline/TimelineModel.h @@ -178,7 +178,7 @@ class TimelineModel : public QAbstractListModel Q_PROPERTY(int trustlevel READ trustlevel NOTIFY trustlevelChanged) Q_PROPERTY(bool isDirect READ isDirect NOTIFY isDirectChanged) Q_PROPERTY( - QString directChatAvatarMxid READ directChatAvatarMxid NOTIFY directChatAvatarMxidChanged) + QString directChatOtherUserId READ directChatOtherUserId NOTIFY directChatOtherUserIdChanged) Q_PROPERTY(InputBar *input READ input CONSTANT) Q_PROPERTY(Permissions *permissions READ permissions NOTIFY permissionsChanged) @@ -296,7 +296,7 @@ public: crypto::Trust trustlevel() const; int roomMemberCount() const; bool isDirect() const { return roomMemberCount() <= 2; } // TODO: handle invites - QString directChatAvatarMxid() const; + QString directChatOtherUserId() const; std::optional eventById(const QString &id) { @@ -397,7 +397,7 @@ signals: void roomAvatarUrlChanged(); void roomMemberCountChanged(); void isDirectChanged(); - void directChatAvatarMxidChanged(); + void directChatOtherUserIdChanged(); void permissionsChanged(); void forwardToRoom(mtx::events::collections::TimelineEvents *e, QString roomId); -- cgit 1.5.1 From 87bff3493d9c884eff09d5653e5df29b3489616d Mon Sep 17 00:00:00 2001 From: Loren Burkholder Date: Mon, 6 Sep 2021 21:45:55 -0400 Subject: Add direct chat handling for previews and invites --- src/timeline/RoomlistModel.cpp | 12 ++++++++++++ src/timeline/TimelineModel.h | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) (limited to 'src/timeline/RoomlistModel.cpp') diff --git a/src/timeline/RoomlistModel.cpp b/src/timeline/RoomlistModel.cpp index 094b0df6..a423090c 100644 --- a/src/timeline/RoomlistModel.cpp +++ b/src/timeline/RoomlistModel.cpp @@ -164,6 +164,13 @@ RoomlistModel::data(const QModelIndex &index, int role) const return false; case Roles::Tags: return QStringList(); + case Roles::IsDirect: + return room.member_count == 1; + case Roles::DirectChatOtherUserId: + // if this is a direct chat, the front member is correct; otherwise, + // it won't be used anyway + return QString::fromStdString( + cache::roomMembers(roomid.toStdString()).front()); default: return {}; } @@ -196,6 +203,11 @@ RoomlistModel::data(const QModelIndex &index, int role) const return true; case Roles::Tags: return QStringList(); + case Roles::IsDirect: + return room.member_count == 1; + case Roles::DirectChatOtherUserId: + return QString::fromStdString( + cache::roomMembers(roomid.toStdString()).front()); default: return {}; } diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h index 46e146b3..66e0622e 100644 --- a/src/timeline/TimelineModel.h +++ b/src/timeline/TimelineModel.h @@ -295,7 +295,7 @@ public: bool isEncrypted() const { return isEncrypted_; } crypto::Trust trustlevel() const; int roomMemberCount() const; - bool isDirect() const { return roomMemberCount() <= 2; } // TODO: handle invites + bool isDirect() const { return roomMemberCount() <= 2; } QString directChatOtherUserId() const; std::optional eventById(const QString &id) -- cgit 1.5.1 From fb53fc86b67efd17288df24dba72085018c29eac Mon Sep 17 00:00:00 2001 From: Loren Burkholder Date: Thu, 9 Sep 2021 21:31:23 -0400 Subject: Fix invites crashing the whole app --- src/Cache.cpp | 54 ++++++++++++++++++++++++++++++++++++++++++ src/Cache.h | 4 ++++ src/Cache_p.h | 8 ++++++- src/timeline/RoomlistModel.cpp | 5 +--- 4 files changed, 66 insertions(+), 5 deletions(-) (limited to 'src/timeline/RoomlistModel.cpp') diff --git a/src/Cache.cpp b/src/Cache.cpp index d009c0d3..6be61633 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -2614,6 +2614,12 @@ Cache::getInviteRoomName(lmdb::txn &txn, lmdb::dbi &statesdb, lmdb::dbi &members return QString("Empty Room"); } +RoomMember +Cache::getDirectInviteMember(const std::string &room_id) +{ + return getMembersFromInvitedRoom(room_id, 0, 1).front(); +} + QString Cache::getInviteRoomAvatarUrl(lmdb::txn &txn, lmdb::dbi &statesdb, lmdb::dbi &membersdb) { @@ -2777,6 +2783,48 @@ Cache::getMembers(const std::string &room_id, std::size_t startIndex, std::size_ return members; } +std::vector +Cache::getMembersFromInvitedRoom(const std::string &room_id, + std::size_t startIndex, + std::size_t len) +{ + auto txn = ro_txn(env_); + auto db = getInviteMembersDb(txn, room_id); + auto cursor = lmdb::cursor::open(txn, db); + + std::size_t currentIndex = 0; + + const auto endIndex = std::min(startIndex + len, db.size(txn)); + + std::vector members; + + std::string_view user_id, user_data; + while (cursor.get(user_id, user_data, MDB_NEXT)) { + if (currentIndex < startIndex) { + currentIndex += 1; + continue; + } + + if (currentIndex >= endIndex) + break; + + try { + MemberInfo tmp = json::parse(user_data); + members.emplace_back( + RoomMember{QString::fromStdString(std::string(user_id)), + QString::fromStdString(tmp.name)}); + } catch (const json::exception &e) { + nhlog::db()->warn("{}", e.what()); + } + + currentIndex += 1; + } + + cursor.close(); + + return members; +} + bool Cache::isRoomMember(const std::string &user_id, const std::string &room_id) { @@ -4816,6 +4864,12 @@ getMembers(const std::string &room_id, std::size_t startIndex, std::size_t len) return instance_->getMembers(room_id, startIndex, len); } +RoomMember +getDirectInviteMember(const std::string &room_id) +{ + return instance_->getDirectInviteMember(room_id); +} + void saveState(const mtx::responses::Sync &res) { diff --git a/src/Cache.h b/src/Cache.h index 57a36d73..2c024722 100644 --- a/src/Cache.h +++ b/src/Cache.h @@ -84,6 +84,10 @@ getRoomAvatarUrl(lmdb::txn &txn, lmdb::dbi &statesdb, lmdb::dbi &membersdb); std::vector getMembers(const std::string &room_id, std::size_t startIndex = 0, std::size_t len = 30); +//! Get the other person from an invite to a direct chat. +RoomMember +getDirectInviteMember(const std::string &room_id); + bool isInitialized(); diff --git a/src/Cache_p.h b/src/Cache_p.h index 6190413f..d4605048 100644 --- a/src/Cache_p.h +++ b/src/Cache_p.h @@ -109,6 +109,10 @@ public: std::vector getMembers(const std::string &room_id, std::size_t startIndex = 0, std::size_t len = 30); + + std::vector getMembersFromInvitedRoom(const std::string &room_id, + std::size_t startIndex = 0, + std::size_t len = 30); size_t memberCount(const std::string &room_id); void saveState(const mtx::responses::Sync &res); @@ -135,6 +139,9 @@ public: //! Retrieve all the user ids from a room. std::vector roomMembers(const std::string &room_id); + //! Get the other user from an invite to a direct chat. + RoomMember getDirectInviteMember(const std::string &room_id); + //! Check if the given user has power leve greater than than //! lowest power level of the given events. bool hasEnoughPowerLevel(const std::vector &eventTypes, @@ -313,7 +320,6 @@ public: return get_skey(a).compare(get_skey(b)); } - signals: void newReadReceipts(const QString &room_id, const std::vector &event_ids); void roomReadStatus(const std::map &status); diff --git a/src/timeline/RoomlistModel.cpp b/src/timeline/RoomlistModel.cpp index a423090c..e1234895 100644 --- a/src/timeline/RoomlistModel.cpp +++ b/src/timeline/RoomlistModel.cpp @@ -167,10 +167,7 @@ RoomlistModel::data(const QModelIndex &index, int role) const case Roles::IsDirect: return room.member_count == 1; case Roles::DirectChatOtherUserId: - // if this is a direct chat, the front member is correct; otherwise, - // it won't be used anyway - return QString::fromStdString( - cache::roomMembers(roomid.toStdString()).front()); + return cache::getDirectInviteMember(roomid.toStdString()).user_id; default: return {}; } -- cgit 1.5.1 From 0b8527eb1be7ae2048e0503eee96e46177c7d5ee Mon Sep 17 00:00:00 2001 From: Loren Burkholder Date: Thu, 9 Sep 2021 21:33:50 -0400 Subject: Don't try to check whether a preview is direct --- src/timeline/RoomlistModel.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src/timeline/RoomlistModel.cpp') diff --git a/src/timeline/RoomlistModel.cpp b/src/timeline/RoomlistModel.cpp index e1234895..c29e1adf 100644 --- a/src/timeline/RoomlistModel.cpp +++ b/src/timeline/RoomlistModel.cpp @@ -201,10 +201,9 @@ RoomlistModel::data(const QModelIndex &index, int role) const case Roles::Tags: return QStringList(); case Roles::IsDirect: - return room.member_count == 1; + return false; case Roles::DirectChatOtherUserId: - return QString::fromStdString( - cache::roomMembers(roomid.toStdString()).front()); + return QString{}; // should never be reached default: return {}; } -- cgit 1.5.1 From b9255803fb32aaf06700d47153bdc802881f1a66 Mon Sep 17 00:00:00 2001 From: Loren Burkholder Date: Sat, 11 Sep 2021 19:45:01 -0400 Subject: Streamline getting other user id from invited direct chat --- src/Cache.cpp | 16 ++++------------ src/Cache.h | 7 +++---- src/Cache_p.h | 6 +++--- src/timeline/RoomlistModel.cpp | 6 +++++- 4 files changed, 15 insertions(+), 20 deletions(-) (limited to 'src/timeline/RoomlistModel.cpp') diff --git a/src/Cache.cpp b/src/Cache.cpp index 6be61633..b1fd0ce0 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -2614,12 +2614,6 @@ Cache::getInviteRoomName(lmdb::txn &txn, lmdb::dbi &statesdb, lmdb::dbi &members return QString("Empty Room"); } -RoomMember -Cache::getDirectInviteMember(const std::string &room_id) -{ - return getMembersFromInvitedRoom(room_id, 0, 1).front(); -} - QString Cache::getInviteRoomAvatarUrl(lmdb::txn &txn, lmdb::dbi &statesdb, lmdb::dbi &membersdb) { @@ -2784,9 +2778,7 @@ Cache::getMembers(const std::string &room_id, std::size_t startIndex, std::size_ } std::vector -Cache::getMembersFromInvitedRoom(const std::string &room_id, - std::size_t startIndex, - std::size_t len) +Cache::getMembersFromInvite(const std::string &room_id, std::size_t startIndex, std::size_t len) { auto txn = ro_txn(env_); auto db = getInviteMembersDb(txn, room_id); @@ -4864,10 +4856,10 @@ getMembers(const std::string &room_id, std::size_t startIndex, std::size_t len) return instance_->getMembers(room_id, startIndex, len); } -RoomMember -getDirectInviteMember(const std::string &room_id) +std::vector +getMembersFromInvite(const std::string &room_id, std::size_t startIndex, std::size_t len) { - return instance_->getDirectInviteMember(room_id); + return instance_->getMembersFromInvite(room_id, startIndex, len); } void diff --git a/src/Cache.h b/src/Cache.h index 2c024722..f8626430 100644 --- a/src/Cache.h +++ b/src/Cache.h @@ -83,10 +83,9 @@ getRoomAvatarUrl(lmdb::txn &txn, lmdb::dbi &statesdb, lmdb::dbi &membersdb); //! Retrieve member info from a room. std::vector getMembers(const std::string &room_id, std::size_t startIndex = 0, std::size_t len = 30); - -//! Get the other person from an invite to a direct chat. -RoomMember -getDirectInviteMember(const std::string &room_id); +//! Retrive member info from an invite. +std::vector +getMembersFromInvite(const std::string &room_id, std::size_t start_index = 0, std::size_t len = 30); bool isInitialized(); diff --git a/src/Cache_p.h b/src/Cache_p.h index d4605048..e98b1c34 100644 --- a/src/Cache_p.h +++ b/src/Cache_p.h @@ -110,9 +110,9 @@ public: std::size_t startIndex = 0, std::size_t len = 30); - std::vector getMembersFromInvitedRoom(const std::string &room_id, - std::size_t startIndex = 0, - std::size_t len = 30); + std::vector getMembersFromInvite(const std::string &room_id, + std::size_t startIndex = 0, + std::size_t len = 30); size_t memberCount(const std::string &room_id); void saveState(const mtx::responses::Sync &res); diff --git a/src/timeline/RoomlistModel.cpp b/src/timeline/RoomlistModel.cpp index c29e1adf..afe53560 100644 --- a/src/timeline/RoomlistModel.cpp +++ b/src/timeline/RoomlistModel.cpp @@ -165,9 +165,13 @@ RoomlistModel::data(const QModelIndex &index, int role) const case Roles::Tags: return QStringList(); case Roles::IsDirect: + // The list of users from the room doesn't contain the invited + // users, so we won't factor the invite into the count return room.member_count == 1; case Roles::DirectChatOtherUserId: - return cache::getDirectInviteMember(roomid.toStdString()).user_id; + return cache::getMembersFromInvite(roomid.toStdString(), 0, 1) + .front() + .user_id; default: return {}; } -- cgit 1.5.1