From 06d00de59b975d95a454b01366c7d02304e0caa4 Mon Sep 17 00:00:00 2001 From: Gaelle Braud Date: Fri, 3 Jan 2025 17:04:40 +0100 Subject: [PATCH] fix #LINQT-1512 do not return to conference list when cancel meeting creation --- .../core/conference/ConferenceInfoCore.cpp | 8 ++++- .../core/conference/ConferenceInfoCore.hpp | 3 +- .../model/conference/ConferenceInfoModel.cpp | 30 ++++++++++--------- .../view/Page/Main/Meeting/MeetingPage.qml | 2 +- 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/Linphone/core/conference/ConferenceInfoCore.cpp b/Linphone/core/conference/ConferenceInfoCore.cpp index cec0b7fc0..89b23e64a 100644 --- a/Linphone/core/conference/ConferenceInfoCore.cpp +++ b/Linphone/core/conference/ConferenceInfoCore.cpp @@ -562,7 +562,7 @@ void ConferenceInfoCore::writeIntoModel(std::shared_ptr mod void ConferenceInfoCore::save() { mustBeInMainThread(getClassName() + "::save()"); ConferenceInfoCore *thisCopy = new ConferenceInfoCore(*this); // Pointer to avoid multiple copies in lambdas - if (mConferenceInfoModel) { + if (mConferenceInfoModel && mConferenceInfoModel->getConferenceScheduler()) { mConfInfoModelConnection->invokeToModel([this, thisCopy]() { // Copy values to avoid concurrency mustBeInLinphoneThread(getClassName() + "::save()"); thisCopy->writeIntoModel(mConferenceInfoModel); @@ -634,6 +634,12 @@ void ConferenceInfoCore::undo() { } } +void ConferenceInfoCore::cancelCreation() { + if (mConferenceInfoModel) { + mConferenceInfoModel->setConferenceScheduler(nullptr); + } +} + //------------------------------------------------------------------------------------------------- void ConferenceInfoCore::onInvitationsSent(const std::list> &failedInvitations) { diff --git a/Linphone/core/conference/ConferenceInfoCore.hpp b/Linphone/core/conference/ConferenceInfoCore.hpp index 358010cb3..fa5234b27 100644 --- a/Linphone/core/conference/ConferenceInfoCore.hpp +++ b/Linphone/core/conference/ConferenceInfoCore.hpp @@ -128,6 +128,7 @@ public: Q_INVOKABLE void save(); Q_INVOKABLE void undo(); + Q_INVOKABLE void cancelCreation(); virtual void onInvitationsSent(const std::list> &failedInvitations); @@ -153,7 +154,7 @@ signals: void saveFailed(); void invitationsSent(); - void removed(ConferenceInfoCore* confInfo); + void removed(ConferenceInfoCore *confInfo); void lCancelConferenceInfo(); void lDeleteConferenceInfo(); // Remove completly this conference info from DB diff --git a/Linphone/model/conference/ConferenceInfoModel.cpp b/Linphone/model/conference/ConferenceInfoModel.cpp index 154c57fb3..711fc07b6 100644 --- a/Linphone/model/conference/ConferenceInfoModel.cpp +++ b/Linphone/model/conference/ConferenceInfoModel.cpp @@ -58,20 +58,22 @@ void ConferenceInfoModel::setConferenceScheduler(const std::shared_ptrremoveListener(); } mConferenceSchedulerModel = model; - connect(mConferenceSchedulerModel.get(), &ConferenceSchedulerModel::stateChanged, - [this](linphone::ConferenceScheduler::State state) { - if (mConferenceSchedulerModel->getConferenceInfo()) - mConferenceInfo = mConferenceSchedulerModel->getConferenceInfo()->clone(); - if (state == linphone::ConferenceScheduler::State::Ready && mInviteEnabled) { - auto params = CoreModel::getInstance()->getCore()->createDefaultChatRoomParams(); - // TODO : wait for new sdk api to send the invitations again - // mConferenceSchedulerModel->getMonitor()->sendInvitations(params); - } - emit schedulerStateChanged(state); - }); - connect(mConferenceSchedulerModel.get(), &ConferenceSchedulerModel::invitationsSent, this, - &ConferenceInfoModel::invitationsSent); - mConferenceSchedulerModel->setSelf(mConferenceSchedulerModel); + if (mConferenceSchedulerModel) { + connect(mConferenceSchedulerModel.get(), &ConferenceSchedulerModel::stateChanged, + [this](linphone::ConferenceScheduler::State state) { + if (mConferenceSchedulerModel->getConferenceInfo()) + mConferenceInfo = mConferenceSchedulerModel->getConferenceInfo()->clone(); + if (state == linphone::ConferenceScheduler::State::Ready && mInviteEnabled) { + auto params = CoreModel::getInstance()->getCore()->createDefaultChatRoomParams(); + // TODO : wait for new sdk api to send the invitations again + // mConferenceSchedulerModel->getMonitor()->sendInvitations(params); + } + emit schedulerStateChanged(state); + }); + connect(mConferenceSchedulerModel.get(), &ConferenceSchedulerModel::invitationsSent, this, + &ConferenceInfoModel::invitationsSent); + mConferenceSchedulerModel->setSelf(mConferenceSchedulerModel); + } } } diff --git a/Linphone/view/Page/Main/Meeting/MeetingPage.qml b/Linphone/view/Page/Main/Meeting/MeetingPage.qml index b3bfd2ccf..7bb9febb3 100644 --- a/Linphone/view/Page/Main/Meeting/MeetingPage.qml +++ b/Linphone/view/Page/Main/Meeting/MeetingPage.qml @@ -275,7 +275,7 @@ AbstractMainPage { } else { meetingSetup.conferenceInfoGui.core.save() mainWindow.showLoadingPopup(qsTr("Création de la réunion en cours ..."), true, function () { - leftPanelStackView.pop() + meetingSetup.conferenceInfoGui.core.cancelCreation() }) } }