Browse Source

Reuse shared channel avatars in direct message conversations

master
evgeny 1 week ago
parent
commit
405755f06a
  1. 6
      tools/chatgui/src/avatars/avatarmanager.cpp
  2. 8
      tools/chatgui/src/messagelist.cpp

6
tools/chatgui/src/avatars/avatarmanager.cpp

@ -118,6 +118,12 @@ QMap<quint64, QString> 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);

8
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;

Loading…
Cancel
Save