Skip to content
Snippets Groups Projects
Commit 951eb3cf authored by Albert  Babí Oller's avatar Albert Babí Oller Committed by Andreas Traczyk
Browse files

swarm: add support for lazy loading conversations

depends on https://review.jami.net/c/ring-lrc/+/16720

Change-Id: Ic254459827c189fc92595be6e2485e0eed31edd8
parent 11119e51
No related branches found
No related tags found
No related merge requests found
...@@ -252,6 +252,10 @@ Rectangle { ...@@ -252,6 +252,10 @@ Rectangle {
function parseI18nData() { function parseI18nData() {
return MessagesAdapter.chatviewTranslatedStrings return MessagesAdapter.chatviewTranslatedStrings
} }
function loadMessages(n) {
return MessagesAdapter.loadMessages(n)
}
} }
WebEngineView { WebEngineView {
......
...@@ -156,7 +156,7 @@ MessagesAdapter::connectConversationModel() ...@@ -156,7 +156,7 @@ MessagesAdapter::connectConversationModel()
newMessagesAvailableConnection_ newMessagesAvailableConnection_
= QObject::connect(currentConversationModel, = QObject::connect(currentConversationModel,
&lrc::api::ConversationModel::newMessagesAvailable, &ConversationModel::newMessagesAvailable,
[this](const QString& accountId, const QString& conversationId) { [this](const QString& accountId, const QString& conversationId) {
auto* convModel = lrcInstance_->accountModel() auto* convModel = lrcInstance_->accountModel()
.getAccountInfo(accountId) .getAccountInfo(accountId)
...@@ -164,7 +164,9 @@ MessagesAdapter::connectConversationModel() ...@@ -164,7 +164,9 @@ MessagesAdapter::connectConversationModel()
auto optConv = convModel->getConversationForUid(conversationId); auto optConv = convModel->getConversationForUid(conversationId);
if (!optConv) if (!optConv)
return; return;
printHistory(*convModel, optConv->get().interactions); updateHistory(*convModel,
optConv->get().interactions,
optConv->get().allMessagesLoaded);
Utils::oneShotConnect(qmlObj_, Utils::oneShotConnect(qmlObj_,
SIGNAL(messagesLoaded()), SIGNAL(messagesLoaded()),
this, this,
...@@ -228,7 +230,7 @@ MessagesAdapter::slotMessagesCleared() ...@@ -228,7 +230,7 @@ MessagesAdapter::slotMessagesCleared()
return; return;
if (convOpt->get().mode != lrc::api::conversation::Mode::NON_SWARM if (convOpt->get().mode != lrc::api::conversation::Mode::NON_SWARM
&& !convOpt->get().allMessagesLoaded) { && !convOpt->get().allMessagesLoaded) {
convModel->loadConversationMessages(convOpt->get().uid, 0); convModel->loadConversationMessages(convOpt->get().uid, 20);
} else { } else {
printHistory(*convModel, convOpt->get().interactions); printHistory(*convModel, convOpt->get().interactions);
Utils::oneShotConnect(qmlObj_, SIGNAL(messagesLoaded()), this, SLOT(slotMessagesLoaded())); Utils::oneShotConnect(qmlObj_, SIGNAL(messagesLoaded()), this, SLOT(slotMessagesLoaded()));
...@@ -556,6 +558,18 @@ MessagesAdapter::printHistory(lrc::api::ConversationModel& conversationModel, ...@@ -556,6 +558,18 @@ MessagesAdapter::printHistory(lrc::api::ConversationModel& conversationModel,
QMetaObject::invokeMethod(qmlObj_, "webViewRunJavaScript", Q_ARG(QVariant, s)); QMetaObject::invokeMethod(qmlObj_, "webViewRunJavaScript", Q_ARG(QVariant, s));
} }
void
MessagesAdapter::updateHistory(lrc::api::ConversationModel& conversationModel,
MessagesList interactions,
bool allLoaded)
{
auto interactionsStr = interactionsToJsonArrayObject(conversationModel, interactions).toUtf8();
QString s = QString::fromLatin1("updateHistory(%1, %2);")
.arg(interactionsStr.constData())
.arg(allLoaded);
QMetaObject::invokeMethod(qmlObj_, "webViewRunJavaScript", Q_ARG(QVariant, s));
}
void void
MessagesAdapter::setSenderImage(const QString& sender, const QString& senderImage) MessagesAdapter::setSenderImage(const QString& sender, const QString& senderImage)
{ {
...@@ -717,3 +731,15 @@ MessagesAdapter::removeConversation(const QString& accountId, ...@@ -717,3 +731,15 @@ MessagesAdapter::removeConversation(const QString& accountId,
if (convUid == currentConvUid_) if (convUid == currentConvUid_)
currentConvUid_.clear(); currentConvUid_.clear();
} }
void
MessagesAdapter::loadMessages(int n)
{
auto* convModel = lrcInstance_->getCurrentConversationModel();
auto convOpt = convModel->getConversationForUid(currentConvUid_);
if (!convOpt)
return;
if (convOpt->get().mode != lrc::api::conversation::Mode::NON_SWARM
&& !convOpt->get().allMessagesLoaded)
convModel->loadConversationMessages(convOpt->get().uid, n);
}
...@@ -67,6 +67,7 @@ protected: ...@@ -67,6 +67,7 @@ protected:
Q_INVOKABLE void refuseFile(const QString& arg); Q_INVOKABLE void refuseFile(const QString& arg);
Q_INVOKABLE void pasteKeyDetected(); Q_INVOKABLE void pasteKeyDetected();
Q_INVOKABLE void onComposing(bool isComposing); Q_INVOKABLE void onComposing(bool isComposing);
Q_INVOKABLE void loadMessages(int n);
// Manually update draft when hiding message web view (Back to welcome page). // Manually update draft when hiding message web view (Back to welcome page).
Q_INVOKABLE void updateDraft(); Q_INVOKABLE void updateDraft();
...@@ -76,7 +77,10 @@ protected: ...@@ -76,7 +77,10 @@ protected:
void requestSendMessageContent(); void requestSendMessageContent();
void setInvitation(bool show, const QString& contactUri = {}, const QString& contactId = {}); void setInvitation(bool show, const QString& contactUri = {}, const QString& contactId = {});
void clear(); void clear();
void printHistory(lrc::api::ConversationModel& conversationModel, MessagesList interactions); void printHistory(ConversationModel& conversationModel, MessagesList interactions);
void updateHistory(ConversationModel& conversationModel,
MessagesList interactions,
bool allLoaded);
void setSenderImage(const QString& sender, const QString& senderImage); void setSenderImage(const QString& sender, const QString& senderImage);
void printNewInteraction(lrc::api::ConversationModel& conversationModel, void printNewInteraction(lrc::api::ConversationModel& conversationModel,
const QString& msgId, const QString& msgId,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment