1
0
Fork 0
mirror of https://git.jami.net/savoirfairelinux/jami-client-qt.git synced 2025-07-19 06:55:24 +02:00

lrcinstance: represent the selected conversation as a QML property

Change-Id: I01dbfc0d6cfcf407d6636ba59b136830ee0342bc
This commit is contained in:
Andreas Traczyk 2021-04-08 16:53:12 -04:00
parent ac87d33d9f
commit cc3931b36e
11 changed files with 72 additions and 67 deletions

View file

@ -272,7 +272,7 @@ AccountAdapter::setCurrAccDisplayName(const QString& text)
void
AccountAdapter::setSelectedConvId(const QString& convId)
{
lrcInstance_->setSelectedConvId(convId);
lrcInstance_->set_selectedConvUid(convId);
}
lrc::api::profile::Type
@ -350,7 +350,7 @@ AccountAdapter::passwordSetStatusMessageBox(bool success, QString title, QString
void
AccountAdapter::deselectConversation()
{
if (lrcInstance_->getCurrentConvUid().isEmpty()) {
if (lrcInstance_->get_selectedConvUid().isEmpty()) {
return;
}
@ -361,7 +361,7 @@ AccountAdapter::deselectConversation()
return;
}
lrcInstance_->setSelectedConvId();
lrcInstance_->set_selectedConvUid();
}
void
@ -395,7 +395,7 @@ AccountAdapter::connectAccount(const QString& accountId)
&lrc::api::ContactModel::contactAdded,
[this, accountId](const QString& contactUri) {
const auto& convInfo = lrcInstance_->getConversationFromConvUid(
lrcInstance_->getCurrentConvUid());
lrcInstance_->get_selectedConvUid());
if (convInfo.uid.isEmpty()) {
return;
}

View file

@ -214,7 +214,7 @@ QString
AvAdapter::getCurrentCallId()
{
const auto& convInfo = lrcInstance_->getConversationFromConvUid(
lrcInstance_->getCurrentConvUid());
lrcInstance_->get_selectedConvUid());
auto call = lrcInstance_->getCallInfoForConversation(convInfo);
return call ? call->id : QString();
}

View file

@ -125,7 +125,7 @@ CallAdapter::onCallStatusChanged(const QString& accountId, const QString& callId
void
CallAdapter::placeAudioOnlyCall()
{
const auto convUid = lrcInstance_->getCurrentConvUid();
const auto convUid = lrcInstance_->get_selectedConvUid();
if (!convUid.isEmpty()) {
lrcInstance_->getCurrentConversationModel()->placeAudioOnlyCall(convUid);
}
@ -134,7 +134,7 @@ CallAdapter::placeAudioOnlyCall()
void
CallAdapter::placeCall()
{
const auto convUid = lrcInstance_->getCurrentConvUid();
const auto convUid = lrcInstance_->get_selectedConvUid();
if (!convUid.isEmpty()) {
lrcInstance_->getCurrentConversationModel()->placeCall(convUid);
}
@ -198,7 +198,7 @@ CallAdapter::onShowIncomingCallView(const QString& accountId, const QString& con
}
const auto& currentConvInfo = lrcInstance_->getConversationFromConvUid(
lrcInstance_->getCurrentConvUid());
lrcInstance_->get_selectedConvUid());
// Current call
auto currentConvHasCall = callModel->hasCall(currentConvInfo.callId);
@ -216,7 +216,7 @@ CallAdapter::onShowIncomingCallView(const QString& accountId, const QString& con
}
auto call = callModel->getCall(convInfo.callId);
auto isCallSelected = lrcInstance_->getCurrentConvUid() == convInfo.uid;
auto isCallSelected = lrcInstance_->get_selectedConvUid() == convInfo.uid;
if (call.isOutgoing) {
if (isCallSelected) {
@ -232,7 +232,7 @@ CallAdapter::onShowIncomingCallView(const QString& accountId, const QString& con
}
const auto& currentConvInfo = lrcInstance_->getConversationFromConvUid(
lrcInstance_->getCurrentConvUid());
lrcInstance_->get_selectedConvUid());
// Call in current conversation
auto currentConvHasCall = callModel->hasCall(currentConvInfo.callId);
@ -500,7 +500,7 @@ CallAdapter::connectCallModel(const QString& accountId)
/*
* Reset the call view corresponding accountId, uid.
*/
lrcInstance_->setSelectedConvId(otherConv.uid);
lrcInstance_->set_selectedConvUid(otherConv.uid);
updateCall(otherConv.uid, otherConv.accountId, forceCallOnly);
}
}
@ -514,7 +514,7 @@ CallAdapter::connectCallModel(const QString& accountId)
case lrc::api::call::Status::CONNECTED:
case lrc::api::call::Status::IN_PROGRESS: {
const auto& convInfo = lrcInstance_->getConversationFromCallId(callId, accountId);
if (!convInfo.uid.isEmpty() && convInfo.uid == lrcInstance_->getCurrentConvUid()) {
if (!convInfo.uid.isEmpty() && convInfo.uid == lrcInstance_->get_selectedConvUid()) {
accInfo.conversationModel->selectConversation(convInfo.uid);
}
updateCall(convInfo.uid, accountId);
@ -633,7 +633,7 @@ CallAdapter::maximizeParticipant(const QString& uri)
{
auto* callModel = lrcInstance_->getAccountInfo(accountId_).callModel.get();
const auto& convInfo
= lrcInstance_->getConversationFromConvUid(lrcInstance_->getCurrentConvUid(), accountId_);
= lrcInstance_->getConversationFromConvUid(lrcInstance_->get_selectedConvUid(), accountId_);
auto confId = convInfo.confId;
if (confId.isEmpty())
@ -666,7 +666,7 @@ CallAdapter::minimizeParticipant(const QString& uri)
{
auto* callModel = lrcInstance_->getAccountInfo(accountId_).callModel.get();
const auto& convInfo
= lrcInstance_->getConversationFromConvUid(lrcInstance_->getCurrentConvUid(), accountId_);
= lrcInstance_->getConversationFromConvUid(lrcInstance_->get_selectedConvUid(), accountId_);
auto confId = convInfo.confId;
if (confId.isEmpty())

View file

@ -62,7 +62,7 @@ ContactAdapter::getContactSelectableModel(int type)
// Exclude current sip callee and filtered contact.
bool match = true;
const auto& conv = lrcInstance_->getConversationFromConvUid(
lrcInstance_->getCurrentConvUid());
lrcInstance_->get_selectedConvUid());
if (!conv.participants.isEmpty()) {
QString calleeDisplayId = lrcInstance_->getAccountInfo(lrcInstance_->getCurrAccId())
.contactModel->bestIdForContact(conv.participants[0]);
@ -109,7 +109,7 @@ ContactAdapter::contactSelected(int index)
auto contactIndex = selectableProxyModel_->index(index, 0);
auto* callModel = lrcInstance_->getCurrentCallModel();
const auto& convInfo = lrcInstance_->getConversationFromConvUid(
lrcInstance_->getCurrentConvUid());
lrcInstance_->get_selectedConvUid());
if (contactIndex.isValid()) {
switch (listModeltype_) {
case SmartListModel::Type::CONFERENCE: {

View file

@ -40,7 +40,7 @@ ConversationsAdapter::ConversationsAdapter(SystemTray* systemTray,
});
connect(lrcInstance_, &LRCInstance::conversationSelected, [this]() {
auto convUid = lrcInstance_->getCurrentConvUid();
auto convUid = lrcInstance_->get_selectedConvUid();
if (!convUid.isEmpty()) {
Q_EMIT showConversation(lrcInstance_->getCurrAccId(), convUid);
}
@ -139,7 +139,7 @@ ConversationsAdapter::selectConversation(const QString& accountId, const QString
void
ConversationsAdapter::deselectConversation()
{
if (lrcInstance_->getCurrentConvUid().isEmpty()) {
if (lrcInstance_->get_selectedConvUid().isEmpty()) {
return;
}
@ -149,7 +149,7 @@ ConversationsAdapter::deselectConversation()
return;
}
lrcInstance_->setSelectedConvId();
lrcInstance_->set_selectedConvUid();
}
void
@ -170,7 +170,7 @@ ConversationsAdapter::onNewUnreadInteraction(const QString& accountId,
{
if (!interaction.authorUri.isEmpty()
&& (!QApplication::focusWindow() || accountId != lrcInstance_->getCurrAccId()
|| convUid != lrcInstance_->getCurrentConvUid())) {
|| convUid != lrcInstance_->get_selectedConvUid())) {
auto& accountInfo = lrcInstance_->getAccountInfo(accountId);
auto from = accountInfo.contactModel->bestNameForContact(interaction.authorUri);
#ifdef Q_OS_LINUX
@ -272,7 +272,7 @@ ConversationsAdapter::connectConversationModel(bool updateFilter)
auto* convModel = lrcInstance_->getCurrentConversationModel();
const auto& convInfo = lrcInstance_->getConversationFromConvUid(
lrcInstance_->getCurrentConvUid());
lrcInstance_->get_selectedConvUid());
if (convInfo.uid.isEmpty() || convInfo.participants.isEmpty()) {
return;
@ -307,7 +307,7 @@ ConversationsAdapter::connectConversationModel(bool updateFilter)
[this]() {
conversationSmartListModel_->fillConversationsList();
updateConversationsFilterWidget();
if (!lrcInstance_->getCurrentConvUid().isEmpty())
if (!lrcInstance_->get_selectedConvUid().isEmpty())
Q_EMIT indexRepositionRequested();
Q_EMIT updateListViewRequested();
});
@ -331,7 +331,7 @@ ConversationsAdapter::connectConversationModel(bool updateFilter)
[this](const QString& convUid) {
// If currently selected, switch to welcome screen (deselecting
// current smartlist item).
if (convUid != lrcInstance_->getCurrentConvUid()) {
if (convUid != lrcInstance_->get_selectedConvUid()) {
return;
}
backToWelcomePage();
@ -391,8 +391,8 @@ ConversationsAdapter::updateConversationForNewContact(const QString& convUid)
try {
const auto contact = convModel->owner.contactModel->getContact(convInfo.participants[0]);
if (!contact.profileInfo.uri.isEmpty()
&& contact.profileInfo.uri == lrcInstance_->getCurrentConvUid()) {
lrcInstance_->setSelectedConvId(convUid);
&& contact.profileInfo.uri == lrcInstance_->get_selectedConvUid()) {
lrcInstance_->set_selectedConvUid(convUid);
convModel->selectConversation(convUid);
}
} catch (...) {

View file

@ -238,18 +238,6 @@ LRCInstance::setSelectedAccountId(const QString& accountId)
Q_EMIT currentAccountChanged();
}
const QString&
LRCInstance::getCurrentConvUid()
{
return selectedConvUid_;
}
void
LRCInstance::setSelectedConvId(const QString& convUid)
{
selectedConvUid_ = convUid;
}
int
LRCInstance::getCurrentAccountIndex()
{
@ -384,7 +372,7 @@ LRCInstance::selectConversation(const QString& accountId, const QString& convUid
{
const auto& convInfo = getConversationFromConvUid(convUid, accountId);
if (getCurrentConvUid() != convInfo.uid || convInfo.participants.size() > 0) {
if (get_selectedConvUid() != convInfo.uid || convInfo.participants.size() > 0) {
// If the account is not currently selected, do that first, then
// proceed to select the conversation.
auto selectConversation = [this, accountId, convUid = convInfo.uid] {
@ -393,7 +381,7 @@ LRCInstance::selectConversation(const QString& accountId, const QString& convUid
return;
}
auto& accInfo = getAccountInfo(convInfo.accountId);
setSelectedConvId(convInfo.uid);
set_selectedConvUid(convInfo.uid);
accInfo.conversationModel->clearUnreadInteractions(convInfo.uid);
try {
@ -408,7 +396,7 @@ LRCInstance::selectConversation(const QString& accountId, const QString& convUid
Utils::oneShotConnect(this, &LRCInstance::currentAccountChanged, [selectConversation] {
selectConversation();
});
setSelectedConvId();
set_selectedConvUid();
setSelectedAccountId(convInfo.accountId);
} else {
selectConversation();

View file

@ -54,6 +54,7 @@ using getConvPredicate = std::function<bool(const conversation::Info& conv)>;
class LRCInstance : public QObject
{
Q_OBJECT
QML_PROPERTY(QString, selectedConvUid)
public:
explicit LRCInstance(migrateCallback willMigrateCb = {},
@ -95,9 +96,7 @@ public:
const QString& getCurrAccId();
void setSelectedAccountId(const QString& accountId = {});
const QString& getCurrentConvUid();
void selectConversation(const QString& accountId, const QString& convUid);
void setSelectedConvId(const QString& convUid = {});
int getCurrentAccountIndex();
void setAvatarForAccount(const QPixmap& avatarPixmap, const QString& accountID);
void setCurrAccAvatar(const QPixmap& avatarPixmap);
@ -130,7 +129,6 @@ private:
std::unique_ptr<RenderManager> renderer_;
std::unique_ptr<UpdateManager> updateManager_;
QString selectedAccountId_ {""};
QString selectedConvUid_ {""};
MapStringString contentDrafts_;
MapStringString lastConferences_;

View file

@ -167,7 +167,7 @@ MessagesAdapter::connectConversationModel()
void
MessagesAdapter::sendContactRequest()
{
const auto convUid = lrcInstance_->getCurrentConvUid();
const auto convUid = lrcInstance_->get_selectedConvUid();
if (!convUid.isEmpty()) {
lrcInstance_->getCurrentConversationModel()->makePermanent(convUid);
}
@ -178,7 +178,7 @@ MessagesAdapter::updateConversationForAddedContact()
{
auto* convModel = lrcInstance_->getCurrentConversationModel();
const auto& convInfo = lrcInstance_->getConversationFromConvUid(
lrcInstance_->getCurrentConvUid());
lrcInstance_->get_selectedConvUid());
clear();
setConversationProfileData(convInfo);
@ -191,13 +191,13 @@ MessagesAdapter::slotSendMessageContentSaved(const QString& content)
if (!LastConvUid_.isEmpty()) {
lrcInstance_->setContentDraft(LastConvUid_, lrcInstance_->getCurrAccId(), content);
}
LastConvUid_ = lrcInstance_->getCurrentConvUid();
LastConvUid_ = lrcInstance_->get_selectedConvUid();
Utils::oneShotConnect(qmlObj_, SIGNAL(messagesCleared()), this, SLOT(slotMessagesCleared()));
setInvitation(false);
clear();
auto restoredContent = lrcInstance_->getContentDraft(lrcInstance_->getCurrentConvUid(),
auto restoredContent = lrcInstance_->getContentDraft(lrcInstance_->get_selectedConvUid(),
lrcInstance_->getCurrAccId());
setSendMessageContent(restoredContent);
Q_EMIT needToUpdateSmartList();
@ -217,7 +217,7 @@ MessagesAdapter::slotMessagesCleared()
{
auto* convModel = lrcInstance_->getCurrentConversationModel();
const auto& convInfo = lrcInstance_->getConversationFromConvUid(
lrcInstance_->getCurrentConvUid());
lrcInstance_->get_selectedConvUid());
printHistory(*convModel, convInfo.interactions);
@ -236,7 +236,7 @@ void
MessagesAdapter::sendMessage(const QString& message)
{
try {
const auto convUid = lrcInstance_->getCurrentConvUid();
const auto convUid = lrcInstance_->get_selectedConvUid();
lrcInstance_->getCurrentConversationModel()->sendMessage(convUid, message);
} catch (...) {
qDebug() << "Exception during sendMessage:" << message;
@ -268,7 +268,7 @@ MessagesAdapter::sendImage(const QString& message)
}
try {
auto convUid = lrcInstance_->getCurrentConvUid();
auto convUid = lrcInstance_->get_selectedConvUid();
lrcInstance_->getCurrentConversationModel()->sendFile(convUid, path, fileName);
} catch (...) {
qDebug().noquote() << "Exception during sendFile - base64 img"
@ -291,7 +291,7 @@ MessagesAdapter::sendImage(const QString& message)
QString fileName = fi.fileName();
try {
auto convUid = lrcInstance_->getCurrentConvUid();
auto convUid = lrcInstance_->get_selectedConvUid();
lrcInstance_->getCurrentConversationModel()->sendFile(convUid, msg, fileName);
} catch (...) {
qDebug().noquote() << "Exception during sendFile - image from path"
@ -306,7 +306,7 @@ MessagesAdapter::sendFile(const QString& message)
QFileInfo fi(message);
QString fileName = fi.fileName();
try {
auto convUid = lrcInstance_->getCurrentConvUid();
auto convUid = lrcInstance_->get_selectedConvUid();
lrcInstance_->getCurrentConversationModel()->sendFile(convUid, message, fileName);
} catch (...) {
qDebug() << "Exception during sendFile";
@ -320,7 +320,7 @@ MessagesAdapter::retryInteraction(const QString& arg)
uint64_t interactionUid = arg.toULongLong(&ok);
if (ok) {
lrcInstance_->getCurrentConversationModel()
->retryInteraction(lrcInstance_->getCurrentConvUid(), interactionUid);
->retryInteraction(lrcInstance_->get_selectedConvUid(), interactionUid);
} else {
qDebug() << "retryInteraction - invalid arg" << arg;
}
@ -347,7 +347,7 @@ MessagesAdapter::deleteInteraction(const QString& arg)
uint64_t interactionUid = arg.toULongLong(&ok);
if (ok) {
lrcInstance_->getCurrentConversationModel()
->clearInteractionFromConversation(lrcInstance_->getCurrentConvUid(), interactionUid);
->clearInteractionFromConversation(lrcInstance_->get_selectedConvUid(), interactionUid);
} else {
qDebug() << "DeleteInteraction - invalid arg" << arg;
}
@ -375,7 +375,7 @@ MessagesAdapter::acceptFile(const QString& arg)
{
try {
auto interactionUid = arg.toLongLong();
auto convUid = lrcInstance_->getCurrentConvUid();
auto convUid = lrcInstance_->get_selectedConvUid();
lrcInstance_->getCurrentConversationModel()->acceptTransfer(convUid, interactionUid);
} catch (...) {
qDebug() << "JS bridging - exception during acceptFile: " << arg;
@ -387,7 +387,7 @@ MessagesAdapter::refuseFile(const QString& arg)
{
try {
auto interactionUid = arg.toLongLong();
const auto convUid = lrcInstance_->getCurrentConvUid();
const auto convUid = lrcInstance_->get_selectedConvUid();
lrcInstance_->getCurrentConversationModel()->cancelTransfer(convUid, interactionUid);
} catch (...) {
qDebug() << "JS bridging - exception during refuseFile:" << arg;
@ -447,7 +447,7 @@ MessagesAdapter::onComposing(bool isComposing)
if (!settingsManager_->getValue(Settings::Key::EnableTypingIndicator).toBool()) {
return;
}
lrcInstance_->getCurrentConversationModel()->setIsComposing(lrcInstance_->getCurrentConvUid(),
lrcInstance_->getCurrentConversationModel()->setIsComposing(lrcInstance_->get_selectedConvUid(),
isComposing);
}
@ -493,7 +493,7 @@ MessagesAdapter::newInteraction(const QString& accountId,
{
Q_UNUSED(interactionId);
try {
if (convUid.isEmpty() || convUid != lrcInstance_->getCurrentConvUid()) {
if (convUid.isEmpty() || convUid != lrcInstance_->get_selectedConvUid()) {
return;
}
auto& accountInfo = lrcInstance_->getAccountInfo(accountId);
@ -656,7 +656,7 @@ MessagesAdapter::setSendMessageContent(const QString& content)
void
MessagesAdapter::contactIsComposing(const QString& uid, const QString& contactUri, bool isComposing)
{
if (lrcInstance_->getCurrentConvUid() == uid) {
if (lrcInstance_->get_selectedConvUid() == uid) {
QString s
= QString::fromLatin1("showTypingIndicator(`%1`, %2);").arg(contactUri).arg(isComposing);
QMetaObject::invokeMethod(qmlObj_, "webViewRunJavaScript", Q_ARG(QVariant, s));
@ -666,7 +666,7 @@ MessagesAdapter::contactIsComposing(const QString& uid, const QString& contactUr
void
MessagesAdapter::acceptInvitation(const QString& convUid)
{
const auto currentConvUid = convUid.isEmpty() ? lrcInstance_->getCurrentConvUid() : convUid;
const auto currentConvUid = convUid.isEmpty() ? lrcInstance_->get_selectedConvUid() : convUid;
lrcInstance_->getCurrentConversationModel()->makePermanent(currentConvUid);
if (convUid == currentConvUid_)
currentConvUid_.clear();
@ -676,7 +676,7 @@ MessagesAdapter::acceptInvitation(const QString& convUid)
void
MessagesAdapter::refuseInvitation(const QString& convUid)
{
const auto currentConvUid = convUid.isEmpty() ? lrcInstance_->getCurrentConvUid() : convUid;
const auto currentConvUid = convUid.isEmpty() ? lrcInstance_->get_selectedConvUid() : convUid;
lrcInstance_->getCurrentConversationModel()->removeConversation(currentConvUid, false);
setInvitation(false);
if (convUid == currentConvUid_)
@ -687,7 +687,7 @@ MessagesAdapter::refuseInvitation(const QString& convUid)
void
MessagesAdapter::blockConversation(const QString& convUid)
{
const auto currentConvUid = convUid.isEmpty() ? lrcInstance_->getCurrentConvUid() : convUid;
const auto currentConvUid = convUid.isEmpty() ? lrcInstance_->get_selectedConvUid() : convUid;
lrcInstance_->getCurrentConversationModel()->removeConversation(currentConvUid, true);
setInvitation(false);
if (convUid == currentConvUid_)

View file

@ -1,4 +1,4 @@
/*!
/*
* Copyright (C) 2015-2020 by Savoir-faire Linux
* Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com>
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
@ -24,6 +24,25 @@
#include <QObject>
#define QML_PROPERTY(type, prop) \
private: \
Q_PROPERTY(type prop MEMBER prop##_ NOTIFY prop##Changed); \
type prop##_ {}; \
\
public: \
Q_SIGNAL void prop##Changed(); \
type get_##prop() \
{ \
return prop##_; \
} \
void set_##prop(const type& x = {}) \
{ \
if (prop##_ != x) { \
prop##_ = x; \
Q_EMIT prop##Changed(); \
} \
}
namespace Utils {
template<typename Func1, typename Func2>

View file

@ -174,7 +174,7 @@ SmartListModel::setConferenceableFilter(const QString& filter)
beginResetModel();
auto& accountInfo = lrcInstance_->accountModel().getAccountInfo(lrcInstance_->getCurrAccId());
auto& convModel = accountInfo.conversationModel;
conferenceables_ = convModel->getConferenceableConversations(lrcInstance_->getCurrentConvUid(),
conferenceables_ = convModel->getConferenceableConversations(lrcInstance_->get_selectedConvUid(),
filter);
sectionState_[tr("Calls")] = true;
sectionState_[tr("Contacts")] = true;
@ -242,7 +242,7 @@ SmartListModel::toggleSection(const QString& section)
int
SmartListModel::currentUidSmartListModelIndex()
{
const auto convUid = lrcInstance_->getCurrentConvUid();
const auto convUid = lrcInstance_->get_selectedConvUid();
for (int i = 0; i < rowCount(); i++) {
if (convUid == data(index(i, 0), Role::UID))
return i;

View file

@ -176,13 +176,13 @@ UtilsAdapter::setConversationFilter(const QString& filter)
const QString
UtilsAdapter::getCurrConvId()
{
return lrcInstance_->getCurrentConvUid();
return lrcInstance_->get_selectedConvUid();
}
void
UtilsAdapter::makePermanentCurrentConv()
{
lrcInstance_->getCurrentConversationModel()->makePermanent(lrcInstance_->getCurrentConvUid());
lrcInstance_->getCurrentConversationModel()->makePermanent(lrcInstance_->get_selectedConvUid());
}
const QStringList