diff --git a/tools/chatgui/src/avatars/avatarmanager.cpp b/tools/chatgui/src/avatars/avatarmanager.cpp index c6f184fc..11ed43a4 100644 --- a/tools/chatgui/src/avatars/avatarmanager.cpp +++ b/tools/chatgui/src/avatars/avatarmanager.cpp @@ -118,6 +118,12 @@ QMap AvatarManager::servers() const { } QImage AvatarManager::image(const QString& channel, quint64 owner) { + if (!channel.toULongLong()) { + quint64 selected = 0; + for (const auto& ref : m_refs) if (ref.owner == owner && ref.server && !ref.hash.isEmpty() && (!selected || ref.group < selected)) + selected = ref.group; + return selected ? image(QString::number(selected), owner) : QImage(); + } const QString context = key(channel.toULongLong(), owner); const Ref ref = m_refs.value(context); if (!m_ready || !ref.server || ref.hash.isEmpty()) return {}; m_wanted.insert(context); diff --git a/tools/chatgui/src/messagelist.cpp b/tools/chatgui/src/messagelist.cpp index a7d49a8b..df9f88ab 100644 --- a/tools/chatgui/src/messagelist.cpp +++ b/tools/chatgui/src/messagelist.cpp @@ -339,8 +339,8 @@ MessageList::MessageList(DbManager* db, AudioRecorder* recorder, QWidget *parent auto *layout = new QVBoxLayout(this); if (auto* manager = AvatarManager::instance()) connect(manager, &AvatarManager::changed, this, [this, manager](const QString& channel, quint64 owner) { - if (channel != m_currentChannelId) return; - const QImage image = manager->image(channel, owner); + if (channel != m_currentChannelId && !isDmChannel(m_currentChannelId)) return; + const QImage image = manager->image(m_currentChannelId, owner); for (int row = 0; row < m_model->rowCount(); row++) { auto* item = m_model->item(row); if (item->data(MsgAuthorNodeIdRole).toULongLong() != owner) continue; @@ -1205,6 +1205,10 @@ void MessageList::onDmMessages(const uint8_t* data, int len) { if (!m_avatarCache.contains(author)) m_avatarCache[author] = color; auto avatar = makeAvatar(color, letter); + if (auto* manager = AvatarManager::instance()) { + const QImage image = manager->image(m_currentChannelId, author); + if (!image.isNull()) avatar = QPixmap::fromImage(image); + } auto time = QDateTime::fromMSecsSinceEpoch((qint64)ts).toString("HH:mm"); if (!file && !status.isEmpty()) time += QStringLiteral(" ยท ") + status;