Use better id loading methodology

This commit is contained in:
Loren Burkholder 2021-08-30 20:08:47 -04:00
parent 1ac4f3a97b
commit 350fc593ed
7 changed files with 20 additions and 8 deletions

View file

@ -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 {

View file

@ -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

View file

@ -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)

View file

@ -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:

View file

@ -65,7 +65,7 @@ public:
IsPreviewFetched,
Tags,
ParentSpaces,
RoomMemberCount,
IsDirect,
DirectChatAvatarMxid,
};

View file

@ -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<StateEvent<state::Encryption>>(e)) {
this->isEncrypted_ = cache::isRoomEncrypted(room_id_.toStdString());
emit encryptionChanged();

View file

@ -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<mtx::events::collections::TimelineEvents> 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);