diff --git a/linphone-app/src/app/cli/Cli.cpp b/linphone-app/src/app/cli/Cli.cpp index 1f616da89..93c5eb0ac 100644 --- a/linphone-app/src/app/cli/Cli.cpp +++ b/linphone-app/src/app/cli/Cli.cpp @@ -170,7 +170,6 @@ static void cliInitiateConference(QHash &args) { } } - shared_ptr conference = core->getConference(); const QString id = args["conference-id"]; auto updateCallsWindow = []() { @@ -183,23 +182,20 @@ static void cliInitiateConference(QHash &args) { } else App::smartShowWindow(callsWindow); }; + shared_ptr conference = core->searchConferenceByIdentifier(Utils::appStringToCoreString(id)); if (conference) { - if (conference->getId() == Utils::appStringToCoreString(id)) { - qInfo() << QStringLiteral("Conference `%1` already exists.").arg(id); - updateCallsWindow(); - return; - } - - qInfo() << QStringLiteral("Remove existing conference with id: `%1`.") - .arg(Utils::coreStringToAppString(conference->getId())); - core->terminateConference(); + qInfo() << QStringLiteral("Conference `%1` already exists.").arg(id); + updateCallsWindow(); + return; } qInfo() << QStringLiteral("Create conference with id: `%1`.").arg(id); auto confParameters = core->createConferenceParams(conference); confParameters->enableVideo(false); // Video is not yet fully supported by the application in conference conference = core->createConferenceWithParams(confParameters); - conference->setId(Utils::appStringToCoreString(id)); + auto confAddress = conference->getConferenceAddress()->clone(); + confAddress->setHeader("conf-id", Utils::appStringToCoreString(id)); + conference->setConferenceAddress(confAddress); if (core->enterConference() == -1) { qWarning() << QStringLiteral("Unable to join created conference: `%1`.").arg(id); diff --git a/linphone-app/src/components/calls/CallsListModel.cpp b/linphone-app/src/components/calls/CallsListModel.cpp index f52572d3a..03709e59c 100644 --- a/linphone-app/src/components/calls/CallsListModel.cpp +++ b/linphone-app/src/components/calls/CallsListModel.cpp @@ -395,16 +395,14 @@ int CallsListModel::addAllToConference(){ void CallsListModel::mergeAll(){ auto core = CoreManager::getInstance()->getCore(); auto currentCalls = CoreManager::getInstance()->getCore()->getCalls(); - shared_ptr conference = core->getConference(); + shared_ptr conference; // Search a managable conference from calls - if(!conference){ - for(auto call : currentCalls){ - auto dbConference = call->getConference(); - if(dbConference && dbConference->getMe()->isAdmin()){ - conference = dbConference; - break; - } + for(auto call : currentCalls){ + auto dbConference = call->getConference(); + if(dbConference && dbConference->getMe()->isAdmin()){ + conference = dbConference; + break; } } @@ -563,15 +561,15 @@ static void joinConference (const shared_ptr &call) { return; shared_ptr core = CoreManager::getInstance()->getCore(); - if (!core->getConference()) { + if (!core->isInConference()) { qWarning() << QStringLiteral("Not in a conference. => Responding to `join-conference` as a simple call..."); return; } - shared_ptr conference = core->getConference(); + shared_ptr conference = core->searchConferenceByIdentifier(call->getToHeader("conference-id")); const QString conferenceId = Utils::coreStringToAppString(call->getToHeader("conference-id")); - if (conference->getId() != Utils::appStringToCoreString(conferenceId)) { + if (!conference) { qWarning() << QStringLiteral("Trying to join conference with an invalid conference id: `%1`. Responding as a simple call...") .arg(conferenceId); return; diff --git a/linphone-app/src/components/conference/ConferenceAddModel.cpp b/linphone-app/src/components/conference/ConferenceAddModel.cpp index 92c131854..b7af904f4 100644 --- a/linphone-app/src/components/conference/ConferenceAddModel.cpp +++ b/linphone-app/src/components/conference/ConferenceAddModel.cpp @@ -146,12 +146,14 @@ bool ConferenceHelperModel::ConferenceAddModel::removeFromConference (const QStr // ----------------------------------------------------------------------------- void ConferenceHelperModel::ConferenceAddModel::update () { - shared_ptr conference = mConferenceHelperModel->mCore->getConference(); + shared_ptr conference; auto currentCall = CoreManager::getInstance()->getCore()->getCurrentCall(); bool enablingVideo = false; - if( currentCall ) - enablingVideo = currentCall->getCurrentParams()->videoEnabled(); + if( currentCall ) { + enablingVideo = currentCall->getCurrentParams()->videoEnabled(); + conference = currentCall->getConference(); + } if(!conference){ auto parameters = mConferenceHelperModel->mCore->createConferenceParams(conference); if(!CoreManager::getInstance()->getSettingsModel()->getVideoConferenceEnabled()) { diff --git a/linphone-app/src/components/conference/ConferenceListener.cpp b/linphone-app/src/components/conference/ConferenceListener.cpp index cb18d2e10..2618e5247 100644 --- a/linphone-app/src/components/conference/ConferenceListener.cpp +++ b/linphone-app/src/components/conference/ConferenceListener.cpp @@ -46,7 +46,7 @@ void ConferenceListener::onActiveSpeakerParticipantDevice(const std::shared_ptr< emit activeSpeakerParticipantDevice(participantDevice); } -void ConferenceListener::onParticipantAdded(const std::shared_ptr & conference, const std::shared_ptr & participant){ +void ConferenceListener::onParticipantAdded(const std::shared_ptr & conference, const std::shared_ptr & participant){ qDebug() << "onParticipantAdded: " << participant->getAddress()->asString().c_str(); emit participantAdded(participant); } @@ -54,7 +54,7 @@ void ConferenceListener::onParticipantRemoved(const std::shared_ptr & conference, const std::shared_ptr & participantDevice){ +void ConferenceListener::onParticipantDeviceAdded(const std::shared_ptr & conference, const std::shared_ptr & participantDevice){ qDebug() << "onParticipantDeviceAdded"; qDebug() << "Me devices : " << conference->getMe()->getDevices().size(); if( conference->getMe()->getDevices().size() > 1) diff --git a/linphone-app/src/components/conference/ConferenceListener.hpp b/linphone-app/src/components/conference/ConferenceListener.hpp index 6f234a816..eb88b27b4 100644 --- a/linphone-app/src/components/conference/ConferenceListener.hpp +++ b/linphone-app/src/components/conference/ConferenceListener.hpp @@ -36,10 +36,10 @@ public: // LINPHONE LISTENERS virtual void onActiveSpeakerParticipantDevice(const std::shared_ptr & conference, const std::shared_ptr & participantDevice) override; - virtual void onParticipantAdded(const std::shared_ptr & conference, const std::shared_ptr & participant) override; + virtual void onParticipantAdded(const std::shared_ptr & conference, const std::shared_ptr & participant) override; virtual void onParticipantRemoved(const std::shared_ptr & conference, const std::shared_ptr & participant) override; virtual void onParticipantAdminStatusChanged(const std::shared_ptr & conference, const std::shared_ptr & participant) override; - virtual void onParticipantDeviceAdded(const std::shared_ptr & conference, const std::shared_ptr & participantDevice) override; + virtual void onParticipantDeviceAdded(const std::shared_ptr & conference, const std::shared_ptr & participantDevice) override; virtual void onParticipantDeviceRemoved(const std::shared_ptr & conference, const std::shared_ptr & participantDevice) override; virtual void onParticipantDeviceStateChanged(const std::shared_ptr & conference, const std::shared_ptr & device, linphone::ParticipantDevice::State state) override; virtual void onParticipantDeviceMediaCapabilityChanged(const std::shared_ptr & conference, const std::shared_ptr & device) override; diff --git a/linphone-app/src/components/conference/ConferenceProxyModel.cpp b/linphone-app/src/components/conference/ConferenceProxyModel.cpp index bf028b98b..0cf654dd4 100644 --- a/linphone-app/src/components/conference/ConferenceProxyModel.cpp +++ b/linphone-app/src/components/conference/ConferenceProxyModel.cpp @@ -69,15 +69,25 @@ void ConferenceProxyModel::terminate () { void ConferenceProxyModel::startRecording () { if (mRecording) return; - + CoreManager *coreManager = CoreManager::getInstance(); + auto currentCall = coreManager->getCore()->getCurrentCall(); + if (!currentCall) { + qWarning() << "Cannot start record: No call is running"; + return; + } + auto conference = currentCall->getConference(); + if (!conference) { + qWarning() << "Cannot start record: Current call is not a conference"; + return; + } qInfo() << QStringLiteral("Start recording conference:") << this; - CoreManager *coreManager = CoreManager::getInstance(); + mLastRecordFile = QStringLiteral("%1%2.mkv") .arg(coreManager->getSettingsModel()->getSavedCallsFolder()) .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd_hh-mm-ss")); - coreManager->getCore()->startConferenceRecording(Utils::appStringToCoreString(mLastRecordFile) ); + conference->startRecording(Utils::appStringToCoreString(mLastRecordFile) ); mRecording = true; emit recordingChanged(true); @@ -86,12 +96,22 @@ void ConferenceProxyModel::startRecording () { void ConferenceProxyModel::stopRecording () { if (!mRecording) return; - + CoreManager *coreManager = CoreManager::getInstance(); + auto currentCall = coreManager->getCore()->getCurrentCall(); + if (!currentCall) { + qWarning() << "Cannot stop record: No call is running"; + return; + } + auto conference = currentCall->getConference(); + if (!conference) { + qWarning() << "Cannot stop record: Current call is not a conference"; + return; + } qInfo() << QStringLiteral("Stop recording conference:") << this; mRecording = false; - CoreManager::getInstance()->getCore()->stopConferenceRecording(); + conference->stopRecording(); App::getInstance()->getNotifier()->notifyRecordingCompleted(mLastRecordFile); emit recordingChanged(false); diff --git a/linphone-app/src/components/contact/ContactModel.cpp b/linphone-app/src/components/contact/ContactModel.cpp index a2d57827a..ab226bef9 100644 --- a/linphone-app/src/components/contact/ContactModel.cpp +++ b/linphone-app/src/components/contact/ContactModel.cpp @@ -21,7 +21,7 @@ #include #include "app/App.hpp" - +#include "components/core/CoreManager.hpp" #include "ContactModel.hpp" #include "VcardModel.hpp" @@ -42,12 +42,11 @@ ContactModel::ContactModel (VcardModel *vcardModel, QObject * parent) : QObject( Q_CHECK_PTR(vcardModel); Q_CHECK_PTR(vcardModel->mVcard); Q_ASSERT(!vcardModel->mIsReadOnly); - - mLinphoneFriend = linphone::Friend::newFromVcard(vcardModel->mVcard); - mLinphoneFriend->setData("contact-model", *this); - if(mLinphoneFriend) - qInfo() << QStringLiteral("Create contact from vcard:") << this << vcardModel; - else + mLinphoneFriend = CoreManager::getInstance()->getCore()->createFriendFromVcard(vcardModel->mVcard); + if(mLinphoneFriend) { + qInfo() << QStringLiteral("Create contact from vcard:") << this << vcardModel; + mLinphoneFriend->setData("contact-model", *this); + }else qCritical() << QStringLiteral("Friend couldn't be created for vcard:") << this << vcardModel; setVcardModelInternal(vcardModel); } diff --git a/linphone-app/src/components/recorder/RecorderManager.cpp b/linphone-app/src/components/recorder/RecorderManager.cpp index e37a5a02a..e77af10d0 100644 --- a/linphone-app/src/components/recorder/RecorderManager.cpp +++ b/linphone-app/src/components/recorder/RecorderManager.cpp @@ -45,7 +45,7 @@ RecorderModel* RecorderManager::getVocalRecorder(){ if( !mVocalRecorder) { auto core = CoreManager::getInstance()->getCore(); std::shared_ptr params = core->createRecorderParams(); - params->setFileFormat(linphone::Recorder::FileFormat::Mkv); + params->setFileFormat(linphone::MediaFileFormat::Mkv); params->setVideoCodec(""); auto recorder = core->createRecorder(params); if(recorder) diff --git a/linphone-sdk b/linphone-sdk index 0acac761a..e1c2a336c 160000 --- a/linphone-sdk +++ b/linphone-sdk @@ -1 +1 @@ -Subproject commit 0acac761a66f8c1f748095d807d0c7c1ed1134cb +Subproject commit e1c2a336c2030d4523a3cc3d9127694a5272abe9