Skip to content
Snippets Groups Projects
Commit de261df8 authored by Andreas Traczyk's avatar Andreas Traczyk Committed by Sébastien Blin
Browse files

conversationadapter: use slots instead of lambdas

The UniqueConnections need slots to compare bindings. Also, member
functions are cleaner and easier to debug than lambdas.

Change-Id: I16ae3882e0f5ff0b92d1ca6c7ce383e5ceef8a79
parent e5858588
No related branches found
No related tags found
No related merge requests found
...@@ -240,6 +240,89 @@ ConversationsAdapter::onTrustRequestTreated(const QString& accountId, const QStr ...@@ -240,6 +240,89 @@ ConversationsAdapter::onTrustRequestTreated(const QString& accountId, const QStr
#endif #endif
} }
void
ConversationsAdapter::onModelChanged()
{
conversationSmartListModel_->fillConversationsList();
updateConversationsFilterWidget();
auto* convModel = lrcInstance_->getCurrentConversationModel();
const auto& convInfo = lrcInstance_->getConversationFromConvUid(
lrcInstance_->get_selectedConvUid());
if (convInfo.uid.isEmpty() || convInfo.participants.isEmpty()) {
return;
}
const auto contactURI = convInfo.participants[0];
if (contactURI.isEmpty()
|| convModel->owner.contactModel->getContact(contactURI).profileInfo.type
== lrc::api::profile::Type::TEMPORARY) {
return;
}
Q_EMIT modelSorted(QVariant::fromValue(convInfo.uid));
}
void
ConversationsAdapter::onProfileUpdated(const QString& contactUri)
{
conversationSmartListModel_->updateContactAvatarUid(contactUri);
Q_EMIT updateListViewRequested();
}
void
ConversationsAdapter::onConversationUpdated(const QString&)
{
updateConversationsFilterWidget();
Q_EMIT updateListViewRequested();
}
void
ConversationsAdapter::onFilterChanged()
{
conversationSmartListModel_->fillConversationsList();
updateConversationsFilterWidget();
if (!lrcInstance_->get_selectedConvUid().isEmpty())
Q_EMIT indexRepositionRequested();
Q_EMIT updateListViewRequested();
}
void
ConversationsAdapter::onNewConversation(const QString& convUid)
{
conversationSmartListModel_->fillConversationsList();
updateConversationForNewContact(convUid);
}
void
ConversationsAdapter::onConversationRemoved(const QString&)
{
backToWelcomePage();
}
void
ConversationsAdapter::onConversationCleared(const QString& convUid)
{
// If currently selected, switch to welcome screen (deselecting
// current smartlist item).
if (convUid != lrcInstance_->get_selectedConvUid()) {
return;
}
backToWelcomePage();
}
void
ConversationsAdapter::onSearchStatusChanged(const QString& status)
{
Q_EMIT showSearchStatus(status);
}
void
ConversationsAdapter::onSearchResultUpdated()
{
conversationSmartListModel_->fillConversationsList();
Q_EMIT updateListViewRequested();
}
void void
ConversationsAdapter::updateConversationsFilterWidget() ConversationsAdapter::updateConversationsFilterWidget()
{ {
...@@ -264,115 +347,58 @@ ConversationsAdapter::connectConversationModel(bool updateFilter) ...@@ -264,115 +347,58 @@ ConversationsAdapter::connectConversationModel(bool updateFilter)
// Signal connections // Signal connections
auto currentConversationModel = lrcInstance_->getCurrentConversationModel(); auto currentConversationModel = lrcInstance_->getCurrentConversationModel();
QObject::connect( QObject::connect(currentConversationModel,
currentConversationModel,
&lrc::api::ConversationModel::modelChanged, &lrc::api::ConversationModel::modelChanged,
this, this,
[this]() { &ConversationsAdapter::onModelChanged,
conversationSmartListModel_->fillConversationsList();
updateConversationsFilterWidget();
auto* convModel = lrcInstance_->getCurrentConversationModel();
const auto& convInfo = lrcInstance_->getConversationFromConvUid(
lrcInstance_->get_selectedConvUid());
if (convInfo.uid.isEmpty() || convInfo.participants.isEmpty()) {
return;
}
const auto contactURI = convInfo.participants[0];
if (contactURI.isEmpty()
|| convModel->owner.contactModel->getContact(contactURI).profileInfo.type
== lrc::api::profile::Type::TEMPORARY) {
return;
}
Q_EMIT modelSorted(QVariant::fromValue(convInfo.uid));
},
Qt::UniqueConnection); Qt::UniqueConnection);
QObject::connect( QObject::connect(lrcInstance_->getCurrentAccountInfo().contactModel.get(),
lrcInstance_->getCurrentAccountInfo().contactModel.get(),
&lrc::api::ContactModel::profileUpdated, &lrc::api::ContactModel::profileUpdated,
this, this,
[this](const QString& contactUri) { &ConversationsAdapter::onProfileUpdated,
conversationSmartListModel_->updateContactAvatarUid(contactUri);
Q_EMIT updateListViewRequested();
},
Qt::UniqueConnection); Qt::UniqueConnection);
QObject::connect( QObject::connect(currentConversationModel,
currentConversationModel,
&lrc::api::ConversationModel::conversationUpdated, &lrc::api::ConversationModel::conversationUpdated,
this, this,
[this](const QString&) { &ConversationsAdapter::onConversationUpdated,
updateConversationsFilterWidget();
Q_EMIT updateListViewRequested();
},
Qt::UniqueConnection); Qt::UniqueConnection);
QObject::connect( QObject::connect(currentConversationModel,
currentConversationModel,
&lrc::api::ConversationModel::filterChanged, &lrc::api::ConversationModel::filterChanged,
this, this,
[this]() { &ConversationsAdapter::onFilterChanged,
conversationSmartListModel_->fillConversationsList();
updateConversationsFilterWidget();
if (!lrcInstance_->get_selectedConvUid().isEmpty())
Q_EMIT indexRepositionRequested();
Q_EMIT updateListViewRequested();
},
Qt::UniqueConnection); Qt::UniqueConnection);
QObject::connect( QObject::connect(currentConversationModel,
currentConversationModel,
&lrc::api::ConversationModel::newConversation, &lrc::api::ConversationModel::newConversation,
this, this,
[this](const QString& convUid) { &ConversationsAdapter::onNewConversation,
conversationSmartListModel_->fillConversationsList();
updateConversationForNewContact(convUid);
},
Qt::UniqueConnection); Qt::UniqueConnection);
QObject::connect( QObject::connect(currentConversationModel,
currentConversationModel,
&lrc::api::ConversationModel::conversationRemoved, &lrc::api::ConversationModel::conversationRemoved,
this, this,
[this]() { backToWelcomePage(); }, &ConversationsAdapter::onConversationRemoved,
Qt::UniqueConnection); Qt::UniqueConnection);
QObject::connect( QObject::connect(currentConversationModel,
currentConversationModel,
&lrc::api::ConversationModel::conversationCleared, &lrc::api::ConversationModel::conversationCleared,
this, this,
[this](const QString& convUid) { &ConversationsAdapter::onConversationCleared,
// If currently selected, switch to welcome screen (deselecting
// current smartlist item).
if (convUid != lrcInstance_->get_selectedConvUid()) {
return;
}
backToWelcomePage();
},
Qt::UniqueConnection); Qt::UniqueConnection);
QObject::connect( QObject::connect(currentConversationModel,
currentConversationModel,
&lrc::api::ConversationModel::searchStatusChanged, &lrc::api::ConversationModel::searchStatusChanged,
this, this,
[this](const QString& status) { Q_EMIT showSearchStatus(status); }, &ConversationsAdapter::onSearchStatusChanged,
Qt::UniqueConnection); Qt::UniqueConnection);
// This connection is ideal when separated search results list. QObject::connect(currentConversationModel,
// This signal is guaranteed to fire just after filterChanged during a search if results are
// changed, and once before filterChanged when calling setFilter.
// NOTE: Currently, when searching, the entire conversation list will be copied 2-3 times each
// keystroke :/.
QObject::connect(
currentConversationModel,
&lrc::api::ConversationModel::searchResultUpdated, &lrc::api::ConversationModel::searchResultUpdated,
this, this,
[this]() { &ConversationsAdapter::onSearchResultUpdated,
conversationSmartListModel_->fillConversationsList();
Q_EMIT updateListViewRequested();
},
Qt::UniqueConnection); Qt::UniqueConnection);
if (updateFilter) { if (updateFilter) {
......
...@@ -73,6 +73,16 @@ private Q_SLOTS: ...@@ -73,6 +73,16 @@ private Q_SLOTS:
void onNewTrustRequest(const QString& accountId, const QString& peerUri); void onNewTrustRequest(const QString& accountId, const QString& peerUri);
void onTrustRequestTreated(const QString& accountId, const QString& peerUri); void onTrustRequestTreated(const QString& accountId, const QString& peerUri);
void onModelChanged();
void onProfileUpdated(const QString&);
void onConversationUpdated(const QString&);
void onFilterChanged();
void onNewConversation(const QString&);
void onConversationRemoved(const QString&);
void onConversationCleared(const QString&);
void onSearchStatusChanged(const QString&);
void onSearchResultUpdated();
private: private:
void backToWelcomePage(); void backToWelcomePage();
void updateConversationForNewContact(const QString& convUid); void updateConversationForNewContact(const QString& convUid);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment