From f5b24f32b8b1c8902c3c9bc907c492037891aa48 Mon Sep 17 00:00:00 2001 From: Black Hat Date: Mon, 10 Sep 2018 07:03:43 +0800 Subject: [PATCH] Fix avatar issue in accountlistmodel. --- src/accountlistmodel.cpp | 26 ++++++++++++++++---------- src/accountlistmodel.h | 1 + 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/accountlistmodel.cpp b/src/accountlistmodel.cpp index 70f7d5f..a66c40d 100644 --- a/src/accountlistmodel.cpp +++ b/src/accountlistmodel.cpp @@ -13,15 +13,7 @@ void AccountListModel::setController(Controller* value) { m_controller = value; for (auto c : m_controller->connections()) { - connect(c->user(), &User::avatarChanged, [=] { - const auto it = - std::find(m_connections.begin(), m_connections.end(), c); - if (it == m_connections.end()) { - return; - } - const auto idx = index(it - m_connections.begin()); - emit dataChanged(idx, idx, {AvatarRole}); - }); + connectConnectionSignals(c); m_connections.append(c); }; @@ -31,6 +23,7 @@ void AccountListModel::setController(Controller* value) { } beginInsertRows(QModelIndex(), m_connections.count(), m_connections.count()); + connectConnectionSignals(conn); m_connections.append(conn); endInsertRows(); }); @@ -71,7 +64,9 @@ QVariant AccountListModel::data(const QModelIndex& index, int role) const { return m_connection->user()->id(); } if (role == AvatarRole) { - return m_connection->user()->avatar(64); + if (!m_connection->user()->avatarUrl().isEmpty()) + return m_connection->user()->avatar(64); + return QImage(); } if (role == ConnectionRole) { return QVariant::fromValue(m_connection); @@ -86,6 +81,17 @@ int AccountListModel::rowCount(const QModelIndex& parent) const { return m_connections.count(); } +void AccountListModel::connectConnectionSignals(Connection* conn) { + connect(conn->user(), &User::avatarChanged, [=] { + const auto it = std::find(m_connections.begin(), m_connections.end(), conn); + if (it == m_connections.end()) { + return; + } + const auto idx = index(it - m_connections.begin()); + emit dataChanged(idx, idx, {AvatarRole}); + }); +} + QHash AccountListModel::roleNames() const { QHash roles; roles[NameRole] = "name"; diff --git a/src/accountlistmodel.h b/src/accountlistmodel.h index ddf7fb4..e8a8061 100644 --- a/src/accountlistmodel.h +++ b/src/accountlistmodel.h @@ -32,6 +32,7 @@ class AccountListModel : public QAbstractListModel { Controller* m_controller; QVector m_connections; + void connectConnectionSignals(Connection* conn); signals: void controllerChanged(); };