mirror of
https://git.jami.net/savoirfairelinux/jami-client-qt.git
synced 2025-07-14 04:25:22 +02:00
misc: fixes
Change-Id: I83161997e655cbb626f6577cedb53d3b67786c7f
This commit is contained in:
parent
bd3b2f223f
commit
f0675434b9
8 changed files with 80 additions and 50 deletions
|
@ -105,7 +105,7 @@ ConversationListModelBase::dataForItem(item_t item, int role) const
|
|||
return QVariant(static_cast<int>(contact.profileInfo.type));
|
||||
}
|
||||
case Role::IsSwarm: {
|
||||
return QVariant(item.mode != lrc::api::conversation::Mode::NON_SWARM);
|
||||
return QVariant(!item.isNotASwarm());
|
||||
}
|
||||
case Role::IsBanned: {
|
||||
return QVariant(contact.isBanned);
|
||||
|
|
|
@ -139,17 +139,17 @@ ConversationsAdapter::safeInit()
|
|||
|
||||
Q_EMIT modelChanged(QVariant::fromValue(conversationSmartListModel_));
|
||||
|
||||
// connect(&lrcInstance_->behaviorController(),
|
||||
// &BehaviorController::newUnreadInteraction,
|
||||
// this,
|
||||
// &ConversationsAdapter::onNewUnreadInteraction,
|
||||
// Qt::UniqueConnection);
|
||||
connect(&lrcInstance_->behaviorController(),
|
||||
&BehaviorController::newUnreadInteraction,
|
||||
this,
|
||||
&ConversationsAdapter::onNewUnreadInteraction,
|
||||
Qt::UniqueConnection);
|
||||
|
||||
// connect(&lrcInstance_->behaviorController(),
|
||||
// &BehaviorController::newReadInteraction,
|
||||
// this,
|
||||
// &ConversationsAdapter::onNewReadInteraction,
|
||||
// Qt::UniqueConnection);
|
||||
connect(&lrcInstance_->behaviorController(),
|
||||
&BehaviorController::newReadInteraction,
|
||||
this,
|
||||
&ConversationsAdapter::onNewReadInteraction,
|
||||
Qt::UniqueConnection);
|
||||
|
||||
connect(&lrcInstance_->behaviorController(),
|
||||
&BehaviorController::newTrustRequest,
|
||||
|
@ -231,7 +231,7 @@ ConversationsAdapter::onNewUnreadInteraction(const QString& accountId,
|
|||
void
|
||||
ConversationsAdapter::onNewReadInteraction(const QString& accountId,
|
||||
const QString& convUid,
|
||||
uint64_t interactionId)
|
||||
const QString& interactionId)
|
||||
{
|
||||
#ifdef Q_OS_LINUX
|
||||
// hide notification
|
||||
|
@ -424,7 +424,7 @@ ConversationsAdapter::getConvInfoMap(const QString& convId)
|
|||
{"bestId", contactModel->bestIdForContact(peerUri)},
|
||||
{"bestName", contactModel->bestNameForContact(peerUri)},
|
||||
{"uri", peerUri},
|
||||
{"isSwarm", convInfo.mode != lrc::api::conversation::Mode::NON_SWARM},
|
||||
{"isSwarm", !convInfo.isNotASwarm()},
|
||||
{"contactType", static_cast<int>(contact.profileInfo.type)},
|
||||
{"isAudioOnly", isAudioOnly},
|
||||
{"callState", static_cast<int>(callState)},
|
||||
|
|
|
@ -70,7 +70,7 @@ private Q_SLOTS:
|
|||
const interaction::Info& interaction);
|
||||
void onNewReadInteraction(const QString& accountId,
|
||||
const QString& convUid,
|
||||
uint64_t interactionId);
|
||||
const QString& interactionId);
|
||||
void onNewTrustRequest(const QString& accountId, const QString& peerUri);
|
||||
void onTrustRequestTreated(const QString& accountId, const QString& peerUri);
|
||||
|
||||
|
|
|
@ -56,18 +56,6 @@ ContextMenuAutoLoader {
|
|||
false)
|
||||
}
|
||||
},
|
||||
GeneralMenuItem {
|
||||
id: clearConversation
|
||||
|
||||
canTrigger: !isSwarm
|
||||
itemName: JamiStrings.clearConversation
|
||||
iconSource: "qrc:/images/icons/place_audiocall-24px.svg"
|
||||
onClicked: {
|
||||
MessagesAdapter.clearConversationHistory(
|
||||
responsibleAccountId,
|
||||
responsibleConvUid)
|
||||
}
|
||||
},
|
||||
GeneralMenuItem {
|
||||
id: startAudioCall
|
||||
|
||||
|
@ -85,18 +73,19 @@ ContextMenuAutoLoader {
|
|||
GeneralMenuItem {
|
||||
id: clearConversation
|
||||
|
||||
canTrigger: !hasCall
|
||||
canTrigger: !isSwarm && !hasCall
|
||||
itemName: JamiStrings.clearConversation
|
||||
iconSource: "qrc:/images/icons/ic_clear_24px.svg"
|
||||
onClicked: {
|
||||
MessagesAdapter.clearConversationHistory(responsibleAccountId,
|
||||
responsibleConvUid)
|
||||
MessagesAdapter.clearConversationHistory(
|
||||
responsibleAccountId,
|
||||
responsibleConvUid)
|
||||
}
|
||||
},
|
||||
GeneralMenuItem {
|
||||
id: removeContact
|
||||
|
||||
canTrigger: !hasCall && (contactType === Profile.Type.RING
|
||||
canTrigger: !hasCall && (contactType === Profile.Type.JAMI
|
||||
|| contactType === Profile.Type.SIP)
|
||||
itemName: JamiStrings.removeContact
|
||||
iconSource: "qrc:/images/icons/ic_hangup_participant-24px.svg"
|
||||
|
|
|
@ -88,19 +88,19 @@ MessagesAdapter::setupChatView(const QString& convUid)
|
|||
|
||||
QMetaObject::invokeMethod(qmlObj_,
|
||||
"setSendContactRequestButtonVisible",
|
||||
Q_ARG(QVariant, isPending));
|
||||
Q_ARG(QVariant, convInfo.isNotASwarm() && isPending));
|
||||
QMetaObject::invokeMethod(qmlObj_,
|
||||
"setMessagingHeaderButtonsVisible",
|
||||
Q_ARG(QVariant,
|
||||
!(convInfo.mode != lrc::api::conversation::Mode::NON_SWARM
|
||||
!(convInfo.isNotASwarm()
|
||||
&& (convInfo.isRequest || convInfo.needsSyncing))));
|
||||
|
||||
setMessagesVisibility(false);
|
||||
setIsSwarm(convInfo.mode != lrc::api::conversation::Mode::NON_SWARM);
|
||||
setIsSwarm(!convInfo.isNotASwarm());
|
||||
setInvitation(convInfo.isRequest or convInfo.needsSyncing,
|
||||
bestName,
|
||||
contactURI,
|
||||
convInfo.mode != lrc::api::conversation::Mode::NON_SWARM,
|
||||
!convInfo.isNotASwarm(),
|
||||
convInfo.needsSyncing);
|
||||
|
||||
// Type Indicator (contact). TODO: Not shown when invitation request?
|
||||
|
@ -137,6 +137,7 @@ MessagesAdapter::connectConversationModel()
|
|||
QObject::disconnect(newInteractionConnection_);
|
||||
QObject::disconnect(interactionRemovedConnection_);
|
||||
QObject::disconnect(interactionStatusUpdatedConnection_);
|
||||
QObject::disconnect(conversationUpdatedConnection_);
|
||||
|
||||
newInteractionConnection_
|
||||
= QObject::connect(currentConversationModel,
|
||||
|
@ -185,6 +186,17 @@ MessagesAdapter::connectConversationModel()
|
|||
this,
|
||||
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
|
||||
|
@ -241,8 +253,7 @@ MessagesAdapter::slotMessagesCleared()
|
|||
auto convOpt = convModel->getConversationForUid(lrcInstance_->get_selectedConvUid());
|
||||
if (!convOpt)
|
||||
return;
|
||||
if (convOpt->get().mode != lrc::api::conversation::Mode::NON_SWARM
|
||||
&& !convOpt->get().allMessagesLoaded) {
|
||||
if (!convOpt->get().isNotASwarm() && !convOpt->get().allMessagesLoaded) {
|
||||
convModel->loadConversationMessages(convOpt->get().uid, 20);
|
||||
} else {
|
||||
printHistory(*convModel, convOpt->get().interactions);
|
||||
|
@ -470,10 +481,21 @@ MessagesAdapter::setConversationProfileData(const lrc::api::conversation::Info&
|
|||
try {
|
||||
auto& contact = accInfo->contactModel->getContact(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,
|
||||
bestName,
|
||||
contactUri,
|
||||
convInfo.mode != lrc::api::conversation::Mode::NON_SWARM,
|
||||
!convInfo.isNotASwarm(),
|
||||
convInfo.needsSyncing);
|
||||
if (!contact.profileInfo.avatar.isEmpty()) {
|
||||
setSenderImage(contactUri, contact.profileInfo.avatar);
|
||||
|
@ -577,7 +599,10 @@ void
|
|||
MessagesAdapter::printHistory(lrc::api::ConversationModel& conversationModel,
|
||||
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());
|
||||
QMetaObject::invokeMethod(qmlObj_, "webViewRunJavaScript", Q_ARG(QVariant, s));
|
||||
}
|
||||
|
@ -587,7 +612,10 @@ MessagesAdapter::updateHistory(lrc::api::ConversationModel& conversationModel,
|
|||
MessagesList interactions,
|
||||
bool allLoaded)
|
||||
{
|
||||
auto interactionsStr = interactionsToJsonArrayObject(conversationModel, interactions).toUtf8();
|
||||
auto interactionsStr = interactionsToJsonArrayObject(conversationModel,
|
||||
lrcInstance_->get_selectedConvUid(),
|
||||
interactions)
|
||||
.toUtf8();
|
||||
QString s = QString::fromLatin1("updateHistory(%1, %2);")
|
||||
.arg(interactionsStr.constData())
|
||||
.arg(allLoaded);
|
||||
|
@ -613,8 +641,11 @@ MessagesAdapter::printNewInteraction(lrc::api::ConversationModel& conversationMo
|
|||
const QString& msgId,
|
||||
const lrc::api::interaction::Info& interaction)
|
||||
{
|
||||
auto interactionObject
|
||||
= interactionToJsonInteractionObject(conversationModel, msgId, interaction).toUtf8();
|
||||
auto interactionObject = interactionToJsonInteractionObject(conversationModel,
|
||||
lrcInstance_->get_selectedConvUid(),
|
||||
msgId,
|
||||
interaction)
|
||||
.toUtf8();
|
||||
if (interactionObject.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
@ -627,8 +658,11 @@ MessagesAdapter::updateInteraction(lrc::api::ConversationModel& conversationMode
|
|||
const QString& msgId,
|
||||
const lrc::api::interaction::Info& interaction)
|
||||
{
|
||||
auto interactionObject
|
||||
= interactionToJsonInteractionObject(conversationModel, msgId, interaction).toUtf8();
|
||||
auto interactionObject = interactionToJsonInteractionObject(conversationModel,
|
||||
lrcInstance_->get_selectedConvUid(),
|
||||
msgId,
|
||||
interaction)
|
||||
.toUtf8();
|
||||
if (interactionObject.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
@ -686,9 +720,9 @@ MessagesAdapter::contactIsComposing(const QString& uid, const QString& contactUr
|
|||
if (!convInfo)
|
||||
return;
|
||||
auto& conv = convInfo->get();
|
||||
bool showIsComposing = conv.mode != lrc::api::conversation::Mode::NON_SWARM
|
||||
? uid == conv.uid
|
||||
: uid.isEmpty() && conv.participants.first() == contactUri;
|
||||
bool showIsComposing = conv.isNotASwarm()
|
||||
? uid.isEmpty() && conv.participants.first() == contactUri
|
||||
: uid == conv.uid;
|
||||
if (showIsComposing) {
|
||||
QString s
|
||||
= QString::fromLatin1("showTypingIndicator(`%1`, %2);").arg(contactUri).arg(isComposing);
|
||||
|
@ -763,7 +797,6 @@ MessagesAdapter::loadMessages(int n)
|
|||
auto convOpt = convModel->getConversationForUid(currentConvUid_);
|
||||
if (!convOpt)
|
||||
return;
|
||||
if (convOpt->get().mode != lrc::api::conversation::Mode::NON_SWARM
|
||||
&& !convOpt->get().allMessagesLoaded)
|
||||
if (!convOpt->get().isNotASwarm() && !convOpt->get().allMessagesLoaded)
|
||||
convModel->loadConversationMessages(convOpt->get().uid, n);
|
||||
}
|
||||
|
|
|
@ -128,6 +128,7 @@ private:
|
|||
QMetaObject::Connection interactionStatusUpdatedConnection_;
|
||||
QMetaObject::Connection interactionRemovedConnection_;
|
||||
QMetaObject::Connection newMessagesAvailableConnection_;
|
||||
QMetaObject::Connection conversationUpdatedConnection_;
|
||||
|
||||
AppSettingsManager* settingsManager_;
|
||||
};
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
|
||||
QJsonObject
|
||||
buildInteractionJson(lrc::api::ConversationModel& conversationModel,
|
||||
const QString& convId,
|
||||
const QString msgId,
|
||||
const lrc::api::interaction::Info& inter)
|
||||
{
|
||||
|
@ -65,7 +66,7 @@ buildInteractionJson(lrc::api::ConversationModel& conversationModel,
|
|||
case lrc::api::interaction::Type::DATA_TRANSFER: {
|
||||
interactionObject.insert("type", QJsonValue("data_transfer"));
|
||||
lrc::api::datatransfer::Info info = {};
|
||||
// conversationModel.getTransferInfo(msgId, info);
|
||||
conversationModel.getTransferInfo(convId, msgId, info);
|
||||
if (info.status != lrc::api::datatransfer::Status::INVALID) {
|
||||
interactionObject.insert("totalSize", QJsonValue(qint64(info.totalSize)));
|
||||
interactionObject.insert("progress", QJsonValue(qint64(info.progress)));
|
||||
|
@ -130,20 +131,23 @@ buildInteractionJson(lrc::api::ConversationModel& conversationModel,
|
|||
|
||||
QString
|
||||
interactionToJsonInteractionObject(lrc::api::ConversationModel& conversationModel,
|
||||
const QString& convId,
|
||||
const QString& msgId,
|
||||
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));
|
||||
}
|
||||
|
||||
QString
|
||||
interactionsToJsonArrayObject(lrc::api::ConversationModel& conversationModel,
|
||||
const QString& convId,
|
||||
MessagesList interactions)
|
||||
{
|
||||
QJsonArray array;
|
||||
for (const auto& interaction : interactions) {
|
||||
auto interactionObject = buildInteractionJson(conversationModel,
|
||||
convId,
|
||||
interaction.first,
|
||||
interaction.second);
|
||||
if (!interactionObject.isEmpty()) {
|
||||
|
|
|
@ -30,10 +30,13 @@
|
|||
#include "api/conversationmodel.h"
|
||||
|
||||
QJsonObject buildInteractionJson(lrc::api::ConversationModel& conversationModel,
|
||||
const QString& convId,
|
||||
const QString& msgId,
|
||||
lrc::api::interaction::Info& interaction);
|
||||
QString interactionToJsonInteractionObject(lrc::api::ConversationModel& conversationModel,
|
||||
const QString& convId,
|
||||
const QString& msgId,
|
||||
const lrc::api::interaction::Info& interaction);
|
||||
QString interactionsToJsonArrayObject(lrc::api::ConversationModel& conversationModel,
|
||||
const QString& convId,
|
||||
MessagesList interactions);
|
||||
|
|
Loading…
Add table
Reference in a new issue