1
0
Fork 0
mirror of https://git.jami.net/savoirfairelinux/jami-client-qt.git synced 2025-09-04 14:13:28 +02:00

conversations: respond to needsSyncingSet signal

When the needsSyncingSet signal is caught, we need to update the
UI to change filter tab, reload the conversation, etc.

Change-Id: I70170d75afa50acad6e79d53fcaeb82752c38e81
This commit is contained in:
Andreas Traczyk 2021-06-25 14:37:55 -04:00 committed by Sébastien Blin
parent 8409355e93
commit 0234fc6f94
4 changed files with 129 additions and 94 deletions

View file

@ -331,14 +331,14 @@ ConversationsAdapter::onSearchResultUpdated()
} }
void void
ConversationsAdapter::onConversationReady(const QString& convId) ConversationsAdapter::updateConversation(const QString& convId)
{ {
// a conversation request has been accepted or a contact has // a conversation request has been accepted or a contact has
// been added, so select the conversation and notify the UI to: // been added, so select the conversation and notify the UI to:
// - switch tabs to the conversation filter tab // - switch tabs to the conversation filter tab
// - clear search bar // - clear search bar
lrcInstance_->selectConversation(convId);
Q_EMIT conversationReady(convId); Q_EMIT conversationReady(convId);
lrcInstance_->selectConversation(convId);
} }
void void
@ -426,51 +426,57 @@ ConversationsAdapter::connectConversationModel()
auto currentConversationModel = lrcInstance_->getCurrentConversationModel(); auto currentConversationModel = lrcInstance_->getCurrentConversationModel();
QObject::connect(currentConversationModel, QObject::connect(currentConversationModel,
&lrc::api::ConversationModel::modelChanged, &ConversationModel::modelChanged,
this, this,
&ConversationsAdapter::onModelChanged, &ConversationsAdapter::onModelChanged,
Qt::UniqueConnection); Qt::UniqueConnection);
QObject::connect(lrcInstance_->getCurrentAccountInfo().contactModel.get(), QObject::connect(lrcInstance_->getCurrentAccountInfo().contactModel.get(),
&lrc::api::ContactModel::profileUpdated, &ContactModel::profileUpdated,
this, this,
&ConversationsAdapter::onProfileUpdated, &ConversationsAdapter::onProfileUpdated,
Qt::UniqueConnection); Qt::UniqueConnection);
QObject::connect(currentConversationModel, QObject::connect(currentConversationModel,
&lrc::api::ConversationModel::conversationUpdated, &ConversationModel::conversationUpdated,
this, this,
&ConversationsAdapter::onConversationUpdated, &ConversationsAdapter::onConversationUpdated,
Qt::UniqueConnection); Qt::UniqueConnection);
QObject::connect(currentConversationModel, QObject::connect(currentConversationModel,
&lrc::api::ConversationModel::filterChanged, &ConversationModel::filterChanged,
this, this,
&ConversationsAdapter::onFilterChanged, &ConversationsAdapter::onFilterChanged,
Qt::UniqueConnection); Qt::UniqueConnection);
QObject::connect(currentConversationModel, QObject::connect(currentConversationModel,
&lrc::api::ConversationModel::conversationCleared, &ConversationModel::conversationCleared,
this, this,
&ConversationsAdapter::onConversationCleared, &ConversationsAdapter::onConversationCleared,
Qt::UniqueConnection); Qt::UniqueConnection);
QObject::connect(currentConversationModel, QObject::connect(currentConversationModel,
&lrc::api::ConversationModel::searchStatusChanged, &ConversationModel::searchStatusChanged,
this, this,
&ConversationsAdapter::onSearchStatusChanged, &ConversationsAdapter::onSearchStatusChanged,
Qt::UniqueConnection); Qt::UniqueConnection);
QObject::connect(currentConversationModel, QObject::connect(currentConversationModel,
&lrc::api::ConversationModel::searchResultUpdated, &ConversationModel::searchResultUpdated,
this, this,
&ConversationsAdapter::onSearchResultUpdated, &ConversationsAdapter::onSearchResultUpdated,
Qt::UniqueConnection); Qt::UniqueConnection);
QObject::connect(currentConversationModel, QObject::connect(currentConversationModel,
&lrc::api::ConversationModel::conversationReady, &ConversationModel::conversationReady,
this, this,
&ConversationsAdapter::onConversationReady, &ConversationsAdapter::updateConversation,
Qt::UniqueConnection);
QObject::connect(currentConversationModel,
&ConversationModel::needsSyncingSet,
this,
&ConversationsAdapter::updateConversation,
Qt::UniqueConnection); Qt::UniqueConnection);
convSrcModel_.reset(new ConversationListModel(lrcInstance_)); convSrcModel_.reset(new ConversationListModel(lrcInstance_));

View file

@ -82,7 +82,7 @@ private Q_SLOTS:
void onConversationCleared(const QString&); void onConversationCleared(const QString&);
void onSearchStatusChanged(const QString&); void onSearchStatusChanged(const QString&);
void onSearchResultUpdated(); void onSearchResultUpdated();
void onConversationReady(const QString&); void updateConversation(const QString&);
void updateConversationFilterData(); void updateConversationFilterData();

View file

@ -119,85 +119,111 @@ MessagesAdapter::setupChatView(const QString& convUid)
} }
void void
MessagesAdapter::connectConversationModel() MessagesAdapter::onNewInteraction(const QString& convUid,
{
auto currentConversationModel = lrcInstance_->getCurrentConversationModel();
QObject::disconnect(newInteractionConnection_);
QObject::disconnect(interactionRemovedConnection_);
QObject::disconnect(interactionStatusUpdatedConnection_);
QObject::disconnect(conversationUpdatedConnection_);
QObject::disconnect(composingConnection_);
newInteractionConnection_
= QObject::connect(currentConversationModel,
&lrc::api::ConversationModel::newInteraction,
[this](const QString& convUid,
const QString& interactionId, const QString& interactionId,
const lrc::api::interaction::Info& interaction) { const lrc::api::interaction::Info& interaction)
{
auto accountId = lrcInstance_->getCurrentAccountId(); auto accountId = lrcInstance_->getCurrentAccountId();
newInteraction(accountId, convUid, interactionId, interaction); newInteraction(accountId, convUid, interactionId, interaction);
}); }
interactionStatusUpdatedConnection_ = QObject::connect( void
currentConversationModel, MessagesAdapter::onInteractionStatusUpdated(const QString& convUid,
&lrc::api::ConversationModel::interactionStatusUpdated,
[this](const QString& convUid,
const QString& interactionId, const QString& interactionId,
const lrc::api::interaction::Info& interaction) { const lrc::api::interaction::Info& interaction)
{
auto currentConversationModel = lrcInstance_->getCurrentConversationModel(); auto currentConversationModel = lrcInstance_->getCurrentConversationModel();
currentConversationModel->clearUnreadInteractions(convUid); currentConversationModel->clearUnreadInteractions(convUid);
updateInteraction(*currentConversationModel, interactionId, interaction); updateInteraction(*currentConversationModel, interactionId, interaction);
}); }
interactionRemovedConnection_ void
= QObject::connect(currentConversationModel, MessagesAdapter::onInteractionRemoved(const QString& convUid, const QString& interactionId)
&lrc::api::ConversationModel::interactionRemoved, {
[this](const QString& convUid, const QString& interactionId) {
Q_UNUSED(convUid); Q_UNUSED(convUid);
removeInteraction(interactionId); removeInteraction(interactionId);
}); }
newMessagesAvailableConnection_ void
= QObject::connect(currentConversationModel, MessagesAdapter::onNewMessagesAvailable(const QString& accountId, const QString& conversationId)
&ConversationModel::newMessagesAvailable, {
[this](const QString& accountId, const QString& conversationId) { auto* convModel = lrcInstance_->accountModel().getAccountInfo(accountId).conversationModel.get();
auto* convModel = lrcInstance_->accountModel()
.getAccountInfo(accountId)
.conversationModel.get();
auto optConv = convModel->getConversationForUid(conversationId); auto optConv = convModel->getConversationForUid(conversationId);
if (!optConv) if (!optConv)
return; return;
updateHistory(*convModel, updateHistory(*convModel, optConv->get().interactions, optConv->get().allMessagesLoaded);
optConv->get().interactions, Utils::oneShotConnect(qmlObj_, SIGNAL(messagesLoaded()), this, SLOT(slotMessagesLoaded()));
optConv->get().allMessagesLoaded); }
Utils::oneShotConnect(qmlObj_,
SIGNAL(messagesLoaded()),
this,
SLOT(slotMessagesLoaded()));
});
conversationUpdatedConnection_ void
= QObject::connect(currentConversationModel, MessagesAdapter::updateConversation(const QString& conversationId)
&ConversationModel::conversationReady, {
[this](const QString& conversationId) {
if (conversationId != lrcInstance_->get_selectedConvUid()) if (conversationId != lrcInstance_->get_selectedConvUid())
return; return;
auto* convModel = lrcInstance_->getCurrentConversationModel(); auto* convModel = lrcInstance_->getCurrentConversationModel();
if (auto optConv = convModel->getConversationForUid(conversationId)) if (auto optConv = convModel->getConversationForUid(conversationId))
setConversationProfileData(optConv->get()); setConversationProfileData(optConv->get());
}); }
composingConnection_
= connect(currentConversationModel, void
&ConversationModel::composingStatusChanged, MessagesAdapter::onComposingStatusChanged(const QString& convId,
[this](const QString& convUid, const QString& contactUri, bool isComposing) { const QString& contactUri,
if (convUid != lrcInstance_->get_selectedConvUid()) bool isComposing)
{
if (convId != lrcInstance_->get_selectedConvUid())
return; return;
if (!settingsManager_->getValue(Settings::Key::EnableTypingIndicator).toBool()) { if (!settingsManager_->getValue(Settings::Key::EnableTypingIndicator).toBool()) {
return; return;
} }
contactIsComposing(contactUri, isComposing); contactIsComposing(contactUri, isComposing);
}); }
void
MessagesAdapter::connectConversationModel()
{
auto currentConversationModel = lrcInstance_->getCurrentConversationModel();
QObject::connect(currentConversationModel,
&ConversationModel::newInteraction,
this,
&MessagesAdapter::onNewInteraction,
Qt::UniqueConnection);
QObject::connect(currentConversationModel,
&ConversationModel::interactionStatusUpdated,
this,
&MessagesAdapter::onInteractionStatusUpdated,
Qt::UniqueConnection);
QObject::connect(currentConversationModel,
&ConversationModel::interactionRemoved,
this,
&MessagesAdapter::onInteractionRemoved,
Qt::UniqueConnection);
QObject::connect(currentConversationModel,
&ConversationModel::newMessagesAvailable,
this,
&MessagesAdapter::onNewMessagesAvailable,
Qt::UniqueConnection);
QObject::connect(currentConversationModel,
&ConversationModel::conversationReady,
this,
&MessagesAdapter::updateConversation,
Qt::UniqueConnection);
QObject::connect(currentConversationModel,
&ConversationModel::needsSyncingSet,
this,
&MessagesAdapter::updateConversation,
Qt::UniqueConnection);
QObject::connect(currentConversationModel,
&ConversationModel::composingStatusChanged,
this,
&MessagesAdapter::onComposingStatusChanged,
Qt::UniqueConnection);
} }
void void
@ -581,7 +607,8 @@ MessagesAdapter::clearChatView()
void void
MessagesAdapter::setDisplayLinks() MessagesAdapter::setDisplayLinks()
{ {
QString s = QString::fromLatin1("setDisplayLinks(%1);") QString s
= QString::fromLatin1("setDisplayLinks(%1);")
.arg(settingsManager_->getValue(Settings::Key::DisplayHyperlinkPreviews).toBool()); .arg(settingsManager_->getValue(Settings::Key::DisplayHyperlinkPreviews).toBool());
QMetaObject::invokeMethod(qmlObj_, "webViewRunJavaScript", Q_ARG(QVariant, s)); QMetaObject::invokeMethod(qmlObj_, "webViewRunJavaScript", Q_ARG(QVariant, s));
} }

View file

@ -50,7 +50,7 @@ protected:
Q_INVOKABLE void clearConversationHistory(const QString& accountId, const QString& convUid); Q_INVOKABLE void clearConversationHistory(const QString& accountId, const QString& convUid);
// JS Q_INVOKABLE. // JS Q_INVOKABLE.
Q_INVOKABLE void acceptInvitation(const QString& convUid = ""); Q_INVOKABLE void acceptInvitation(const QString& convId = {});
Q_INVOKABLE void refuseInvitation(const QString& convUid = ""); Q_INVOKABLE void refuseInvitation(const QString& convUid = "");
Q_INVOKABLE void blockConversation(const QString& convUid = ""); Q_INVOKABLE void blockConversation(const QString& convUid = "");
Q_INVOKABLE void setNewMessagesContent(const QString& path); Q_INVOKABLE void setNewMessagesContent(const QString& path);
@ -102,11 +102,21 @@ Q_SIGNALS:
void contactBanned(); void contactBanned();
void newInteraction(int type); void newInteraction(int type);
public Q_SLOTS: private Q_SLOTS:
void slotSendMessageContentSaved(const QString& content); void slotSendMessageContentSaved(const QString& content);
void slotUpdateDraft(const QString& content); void slotUpdateDraft(const QString& content);
void slotMessagesCleared(); void slotMessagesCleared();
void slotMessagesLoaded(); void slotMessagesLoaded();
void onNewInteraction(const QString& convUid,
const QString& interactionId,
const interaction::Info& interaction);
void onInteractionStatusUpdated(const QString& convUid,
const QString& interactionId,
const interaction::Info& interaction);
void onInteractionRemoved(const QString& convUid, const QString& interactionId);
void onNewMessagesAvailable(const QString& accountId, const QString& conversationId);
void updateConversation(const QString& conversationId);
void onComposingStatusChanged(const QString& uid, const QString& contactUri, bool isComposing);
private: private:
void setConversationProfileData(const lrc::api::conversation::Info& convInfo); void setConversationProfileData(const lrc::api::conversation::Info& convInfo);
@ -120,13 +130,5 @@ private:
const QVariantMap chatviewTranslatedStrings_ {lrc::api::chatview::getTranslatedStrings()}; const QVariantMap chatviewTranslatedStrings_ {lrc::api::chatview::getTranslatedStrings()};
// Interaction connections.
QMetaObject::Connection newInteractionConnection_;
QMetaObject::Connection interactionStatusUpdatedConnection_;
QMetaObject::Connection interactionRemovedConnection_;
QMetaObject::Connection newMessagesAvailableConnection_;
QMetaObject::Connection conversationUpdatedConnection_;
QMetaObject::Connection composingConnection_;
AppSettingsManager* settingsManager_; AppSettingsManager* settingsManager_;
}; };