1
0
Fork 0
mirror of https://git.jami.net/savoirfairelinux/jami-client-qt.git synced 2025-08-19 22:25:54 +02:00

misc: fixes

Change-Id: I83161997e655cbb626f6577cedb53d3b67786c7f
This commit is contained in:
Sébastien Blin 2021-05-17 14:45:32 -04:00 committed by Andreas Traczyk
parent bd3b2f223f
commit f0675434b9
8 changed files with 80 additions and 50 deletions

View file

@ -105,7 +105,7 @@ ConversationListModelBase::dataForItem(item_t item, int role) const
return QVariant(static_cast<int>(contact.profileInfo.type)); return QVariant(static_cast<int>(contact.profileInfo.type));
} }
case Role::IsSwarm: { case Role::IsSwarm: {
return QVariant(item.mode != lrc::api::conversation::Mode::NON_SWARM); return QVariant(!item.isNotASwarm());
} }
case Role::IsBanned: { case Role::IsBanned: {
return QVariant(contact.isBanned); return QVariant(contact.isBanned);

View file

@ -139,17 +139,17 @@ ConversationsAdapter::safeInit()
Q_EMIT modelChanged(QVariant::fromValue(conversationSmartListModel_)); Q_EMIT modelChanged(QVariant::fromValue(conversationSmartListModel_));
// connect(&lrcInstance_->behaviorController(), connect(&lrcInstance_->behaviorController(),
// &BehaviorController::newUnreadInteraction, &BehaviorController::newUnreadInteraction,
// this, this,
// &ConversationsAdapter::onNewUnreadInteraction, &ConversationsAdapter::onNewUnreadInteraction,
// Qt::UniqueConnection); Qt::UniqueConnection);
// connect(&lrcInstance_->behaviorController(), connect(&lrcInstance_->behaviorController(),
// &BehaviorController::newReadInteraction, &BehaviorController::newReadInteraction,
// this, this,
// &ConversationsAdapter::onNewReadInteraction, &ConversationsAdapter::onNewReadInteraction,
// Qt::UniqueConnection); Qt::UniqueConnection);
connect(&lrcInstance_->behaviorController(), connect(&lrcInstance_->behaviorController(),
&BehaviorController::newTrustRequest, &BehaviorController::newTrustRequest,
@ -231,7 +231,7 @@ ConversationsAdapter::onNewUnreadInteraction(const QString& accountId,
void void
ConversationsAdapter::onNewReadInteraction(const QString& accountId, ConversationsAdapter::onNewReadInteraction(const QString& accountId,
const QString& convUid, const QString& convUid,
uint64_t interactionId) const QString& interactionId)
{ {
#ifdef Q_OS_LINUX #ifdef Q_OS_LINUX
// hide notification // hide notification
@ -424,7 +424,7 @@ ConversationsAdapter::getConvInfoMap(const QString& convId)
{"bestId", contactModel->bestIdForContact(peerUri)}, {"bestId", contactModel->bestIdForContact(peerUri)},
{"bestName", contactModel->bestNameForContact(peerUri)}, {"bestName", contactModel->bestNameForContact(peerUri)},
{"uri", peerUri}, {"uri", peerUri},
{"isSwarm", convInfo.mode != lrc::api::conversation::Mode::NON_SWARM}, {"isSwarm", !convInfo.isNotASwarm()},
{"contactType", static_cast<int>(contact.profileInfo.type)}, {"contactType", static_cast<int>(contact.profileInfo.type)},
{"isAudioOnly", isAudioOnly}, {"isAudioOnly", isAudioOnly},
{"callState", static_cast<int>(callState)}, {"callState", static_cast<int>(callState)},

View file

@ -70,7 +70,7 @@ private Q_SLOTS:
const interaction::Info& interaction); const interaction::Info& interaction);
void onNewReadInteraction(const QString& accountId, void onNewReadInteraction(const QString& accountId,
const QString& convUid, const QString& convUid,
uint64_t interactionId); const QString& interactionId);
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);

View file

@ -56,18 +56,6 @@ ContextMenuAutoLoader {
false) false)
} }
}, },
GeneralMenuItem {
id: clearConversation
canTrigger: !isSwarm
itemName: JamiStrings.clearConversation
iconSource: "qrc:/images/icons/place_audiocall-24px.svg"
onClicked: {
MessagesAdapter.clearConversationHistory(
responsibleAccountId,
responsibleConvUid)
}
},
GeneralMenuItem { GeneralMenuItem {
id: startAudioCall id: startAudioCall
@ -85,18 +73,19 @@ ContextMenuAutoLoader {
GeneralMenuItem { GeneralMenuItem {
id: clearConversation id: clearConversation
canTrigger: !hasCall canTrigger: !isSwarm && !hasCall
itemName: JamiStrings.clearConversation itemName: JamiStrings.clearConversation
iconSource: "qrc:/images/icons/ic_clear_24px.svg" iconSource: "qrc:/images/icons/ic_clear_24px.svg"
onClicked: { onClicked: {
MessagesAdapter.clearConversationHistory(responsibleAccountId, MessagesAdapter.clearConversationHistory(
responsibleAccountId,
responsibleConvUid) responsibleConvUid)
} }
}, },
GeneralMenuItem { GeneralMenuItem {
id: removeContact id: removeContact
canTrigger: !hasCall && (contactType === Profile.Type.RING canTrigger: !hasCall && (contactType === Profile.Type.JAMI
|| contactType === Profile.Type.SIP) || contactType === Profile.Type.SIP)
itemName: JamiStrings.removeContact itemName: JamiStrings.removeContact
iconSource: "qrc:/images/icons/ic_hangup_participant-24px.svg" iconSource: "qrc:/images/icons/ic_hangup_participant-24px.svg"

View file

@ -88,19 +88,19 @@ MessagesAdapter::setupChatView(const QString& convUid)
QMetaObject::invokeMethod(qmlObj_, QMetaObject::invokeMethod(qmlObj_,
"setSendContactRequestButtonVisible", "setSendContactRequestButtonVisible",
Q_ARG(QVariant, isPending)); Q_ARG(QVariant, convInfo.isNotASwarm() && isPending));
QMetaObject::invokeMethod(qmlObj_, QMetaObject::invokeMethod(qmlObj_,
"setMessagingHeaderButtonsVisible", "setMessagingHeaderButtonsVisible",
Q_ARG(QVariant, Q_ARG(QVariant,
!(convInfo.mode != lrc::api::conversation::Mode::NON_SWARM !(convInfo.isNotASwarm()
&& (convInfo.isRequest || convInfo.needsSyncing)))); && (convInfo.isRequest || convInfo.needsSyncing))));
setMessagesVisibility(false); setMessagesVisibility(false);
setIsSwarm(convInfo.mode != lrc::api::conversation::Mode::NON_SWARM); setIsSwarm(!convInfo.isNotASwarm());
setInvitation(convInfo.isRequest or convInfo.needsSyncing, setInvitation(convInfo.isRequest or convInfo.needsSyncing,
bestName, bestName,
contactURI, contactURI,
convInfo.mode != lrc::api::conversation::Mode::NON_SWARM, !convInfo.isNotASwarm(),
convInfo.needsSyncing); convInfo.needsSyncing);
// Type Indicator (contact). TODO: Not shown when invitation request? // Type Indicator (contact). TODO: Not shown when invitation request?
@ -137,6 +137,7 @@ MessagesAdapter::connectConversationModel()
QObject::disconnect(newInteractionConnection_); QObject::disconnect(newInteractionConnection_);
QObject::disconnect(interactionRemovedConnection_); QObject::disconnect(interactionRemovedConnection_);
QObject::disconnect(interactionStatusUpdatedConnection_); QObject::disconnect(interactionStatusUpdatedConnection_);
QObject::disconnect(conversationUpdatedConnection_);
newInteractionConnection_ newInteractionConnection_
= QObject::connect(currentConversationModel, = QObject::connect(currentConversationModel,
@ -185,6 +186,17 @@ MessagesAdapter::connectConversationModel()
this, this,
SLOT(slotMessagesLoaded())); SLOT(slotMessagesLoaded()));
}); });
conversationUpdatedConnection_
= QObject::connect(currentConversationModel,
&ConversationModel::conversationReady,
[this](const QString& conversationId) {
if (conversationId != lrcInstance_->get_selectedConvUid())
return;
auto* convModel = lrcInstance_->getCurrentConversationModel();
if (auto optConv = convModel->getConversationForUid(conversationId))
setConversationProfileData(optConv->get());
});
} }
void void
@ -241,8 +253,7 @@ MessagesAdapter::slotMessagesCleared()
auto convOpt = convModel->getConversationForUid(lrcInstance_->get_selectedConvUid()); auto convOpt = convModel->getConversationForUid(lrcInstance_->get_selectedConvUid());
if (!convOpt) if (!convOpt)
return; return;
if (convOpt->get().mode != lrc::api::conversation::Mode::NON_SWARM if (!convOpt->get().isNotASwarm() && !convOpt->get().allMessagesLoaded) {
&& !convOpt->get().allMessagesLoaded) {
convModel->loadConversationMessages(convOpt->get().uid, 20); convModel->loadConversationMessages(convOpt->get().uid, 20);
} else { } else {
printHistory(*convModel, convOpt->get().interactions); printHistory(*convModel, convOpt->get().interactions);
@ -470,10 +481,21 @@ MessagesAdapter::setConversationProfileData(const lrc::api::conversation::Info&
try { try {
auto& contact = accInfo->contactModel->getContact(contactUri); auto& contact = accInfo->contactModel->getContact(contactUri);
auto bestName = accInfo->contactModel->bestNameForContact(contactUri); auto bestName = accInfo->contactModel->bestNameForContact(contactUri);
bool isPending = contact.profileInfo.type == profile::Type::TEMPORARY;
QMetaObject::invokeMethod(qmlObj_,
"setSendContactRequestButtonVisible",
Q_ARG(QVariant, convInfo.isNotASwarm() && isPending));
QMetaObject::invokeMethod(qmlObj_,
"setMessagingHeaderButtonsVisible",
Q_ARG(QVariant,
!(!convInfo.isNotASwarm()
&& (convInfo.isRequest || convInfo.needsSyncing))));
setInvitation(convInfo.isRequest or convInfo.needsSyncing, setInvitation(convInfo.isRequest or convInfo.needsSyncing,
bestName, bestName,
contactUri, contactUri,
convInfo.mode != lrc::api::conversation::Mode::NON_SWARM, !convInfo.isNotASwarm(),
convInfo.needsSyncing); convInfo.needsSyncing);
if (!contact.profileInfo.avatar.isEmpty()) { if (!contact.profileInfo.avatar.isEmpty()) {
setSenderImage(contactUri, contact.profileInfo.avatar); setSenderImage(contactUri, contact.profileInfo.avatar);
@ -577,7 +599,10 @@ void
MessagesAdapter::printHistory(lrc::api::ConversationModel& conversationModel, MessagesAdapter::printHistory(lrc::api::ConversationModel& conversationModel,
MessagesList interactions) MessagesList interactions)
{ {
auto interactionsStr = interactionsToJsonArrayObject(conversationModel, interactions).toUtf8(); auto interactionsStr = interactionsToJsonArrayObject(conversationModel,
lrcInstance_->get_selectedConvUid(),
interactions)
.toUtf8();
QString s = QString::fromLatin1("printHistory(%1);").arg(interactionsStr.constData()); QString s = QString::fromLatin1("printHistory(%1);").arg(interactionsStr.constData());
QMetaObject::invokeMethod(qmlObj_, "webViewRunJavaScript", Q_ARG(QVariant, s)); QMetaObject::invokeMethod(qmlObj_, "webViewRunJavaScript", Q_ARG(QVariant, s));
} }
@ -587,7 +612,10 @@ MessagesAdapter::updateHistory(lrc::api::ConversationModel& conversationModel,
MessagesList interactions, MessagesList interactions,
bool allLoaded) bool allLoaded)
{ {
auto interactionsStr = interactionsToJsonArrayObject(conversationModel, interactions).toUtf8(); auto interactionsStr = interactionsToJsonArrayObject(conversationModel,
lrcInstance_->get_selectedConvUid(),
interactions)
.toUtf8();
QString s = QString::fromLatin1("updateHistory(%1, %2);") QString s = QString::fromLatin1("updateHistory(%1, %2);")
.arg(interactionsStr.constData()) .arg(interactionsStr.constData())
.arg(allLoaded); .arg(allLoaded);
@ -613,8 +641,11 @@ MessagesAdapter::printNewInteraction(lrc::api::ConversationModel& conversationMo
const QString& msgId, const QString& msgId,
const lrc::api::interaction::Info& interaction) const lrc::api::interaction::Info& interaction)
{ {
auto interactionObject auto interactionObject = interactionToJsonInteractionObject(conversationModel,
= interactionToJsonInteractionObject(conversationModel, msgId, interaction).toUtf8(); lrcInstance_->get_selectedConvUid(),
msgId,
interaction)
.toUtf8();
if (interactionObject.isEmpty()) { if (interactionObject.isEmpty()) {
return; return;
} }
@ -627,8 +658,11 @@ MessagesAdapter::updateInteraction(lrc::api::ConversationModel& conversationMode
const QString& msgId, const QString& msgId,
const lrc::api::interaction::Info& interaction) const lrc::api::interaction::Info& interaction)
{ {
auto interactionObject auto interactionObject = interactionToJsonInteractionObject(conversationModel,
= interactionToJsonInteractionObject(conversationModel, msgId, interaction).toUtf8(); lrcInstance_->get_selectedConvUid(),
msgId,
interaction)
.toUtf8();
if (interactionObject.isEmpty()) { if (interactionObject.isEmpty()) {
return; return;
} }
@ -686,9 +720,9 @@ MessagesAdapter::contactIsComposing(const QString& uid, const QString& contactUr
if (!convInfo) if (!convInfo)
return; return;
auto& conv = convInfo->get(); auto& conv = convInfo->get();
bool showIsComposing = conv.mode != lrc::api::conversation::Mode::NON_SWARM bool showIsComposing = conv.isNotASwarm()
? uid == conv.uid ? uid.isEmpty() && conv.participants.first() == contactUri
: uid.isEmpty() && conv.participants.first() == contactUri; : uid == conv.uid;
if (showIsComposing) { if (showIsComposing) {
QString s QString s
= QString::fromLatin1("showTypingIndicator(`%1`, %2);").arg(contactUri).arg(isComposing); = QString::fromLatin1("showTypingIndicator(`%1`, %2);").arg(contactUri).arg(isComposing);
@ -763,7 +797,6 @@ MessagesAdapter::loadMessages(int n)
auto convOpt = convModel->getConversationForUid(currentConvUid_); auto convOpt = convModel->getConversationForUid(currentConvUid_);
if (!convOpt) if (!convOpt)
return; return;
if (convOpt->get().mode != lrc::api::conversation::Mode::NON_SWARM if (!convOpt->get().isNotASwarm() && !convOpt->get().allMessagesLoaded)
&& !convOpt->get().allMessagesLoaded)
convModel->loadConversationMessages(convOpt->get().uid, n); convModel->loadConversationMessages(convOpt->get().uid, n);
} }

View file

@ -128,6 +128,7 @@ private:
QMetaObject::Connection interactionStatusUpdatedConnection_; QMetaObject::Connection interactionStatusUpdatedConnection_;
QMetaObject::Connection interactionRemovedConnection_; QMetaObject::Connection interactionRemovedConnection_;
QMetaObject::Connection newMessagesAvailableConnection_; QMetaObject::Connection newMessagesAvailableConnection_;
QMetaObject::Connection conversationUpdatedConnection_;
AppSettingsManager* settingsManager_; AppSettingsManager* settingsManager_;
}; };

View file

@ -23,6 +23,7 @@
QJsonObject QJsonObject
buildInteractionJson(lrc::api::ConversationModel& conversationModel, buildInteractionJson(lrc::api::ConversationModel& conversationModel,
const QString& convId,
const QString msgId, const QString msgId,
const lrc::api::interaction::Info& inter) const lrc::api::interaction::Info& inter)
{ {
@ -65,7 +66,7 @@ buildInteractionJson(lrc::api::ConversationModel& conversationModel,
case lrc::api::interaction::Type::DATA_TRANSFER: { case lrc::api::interaction::Type::DATA_TRANSFER: {
interactionObject.insert("type", QJsonValue("data_transfer")); interactionObject.insert("type", QJsonValue("data_transfer"));
lrc::api::datatransfer::Info info = {}; lrc::api::datatransfer::Info info = {};
// conversationModel.getTransferInfo(msgId, info); conversationModel.getTransferInfo(convId, msgId, info);
if (info.status != lrc::api::datatransfer::Status::INVALID) { if (info.status != lrc::api::datatransfer::Status::INVALID) {
interactionObject.insert("totalSize", QJsonValue(qint64(info.totalSize))); interactionObject.insert("totalSize", QJsonValue(qint64(info.totalSize)));
interactionObject.insert("progress", QJsonValue(qint64(info.progress))); interactionObject.insert("progress", QJsonValue(qint64(info.progress)));
@ -130,20 +131,23 @@ buildInteractionJson(lrc::api::ConversationModel& conversationModel,
QString QString
interactionToJsonInteractionObject(lrc::api::ConversationModel& conversationModel, interactionToJsonInteractionObject(lrc::api::ConversationModel& conversationModel,
const QString& convId,
const QString& msgId, const QString& msgId,
const lrc::api::interaction::Info& interaction) const lrc::api::interaction::Info& interaction)
{ {
auto interactionObject = buildInteractionJson(conversationModel, msgId, interaction); auto interactionObject = buildInteractionJson(conversationModel, convId, msgId, interaction);
return QString(QJsonDocument(interactionObject).toJson(QJsonDocument::Compact)); return QString(QJsonDocument(interactionObject).toJson(QJsonDocument::Compact));
} }
QString QString
interactionsToJsonArrayObject(lrc::api::ConversationModel& conversationModel, interactionsToJsonArrayObject(lrc::api::ConversationModel& conversationModel,
const QString& convId,
MessagesList interactions) MessagesList interactions)
{ {
QJsonArray array; QJsonArray array;
for (const auto& interaction : interactions) { for (const auto& interaction : interactions) {
auto interactionObject = buildInteractionJson(conversationModel, auto interactionObject = buildInteractionJson(conversationModel,
convId,
interaction.first, interaction.first,
interaction.second); interaction.second);
if (!interactionObject.isEmpty()) { if (!interactionObject.isEmpty()) {

View file

@ -30,10 +30,13 @@
#include "api/conversationmodel.h" #include "api/conversationmodel.h"
QJsonObject buildInteractionJson(lrc::api::ConversationModel& conversationModel, QJsonObject buildInteractionJson(lrc::api::ConversationModel& conversationModel,
const QString& convId,
const QString& msgId, const QString& msgId,
lrc::api::interaction::Info& interaction); lrc::api::interaction::Info& interaction);
QString interactionToJsonInteractionObject(lrc::api::ConversationModel& conversationModel, QString interactionToJsonInteractionObject(lrc::api::ConversationModel& conversationModel,
const QString& convId,
const QString& msgId, const QString& msgId,
const lrc::api::interaction::Info& interaction); const lrc::api::interaction::Info& interaction);
QString interactionsToJsonArrayObject(lrc::api::ConversationModel& conversationModel, QString interactionsToJsonArrayObject(lrc::api::ConversationModel& conversationModel,
const QString& convId,
MessagesList interactions); MessagesList interactions);