From fc9e8b6880ecb9d7e818b74d728d1c752bc6f885 Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Fri, 28 Apr 2017 15:05:02 +0200 Subject: [PATCH] fix(src/components/calls/CallsListModel): handle getData exception and code refactoring --- .../src/components/call/CallModel.cpp | 112 +++++++++--------- .../src/components/call/CallModel.hpp | 12 +- .../src/components/calls/CallsListModel.cpp | 57 +++++---- .../src/components/calls/CallsListModel.hpp | 8 +- .../src/components/camera/Camera.cpp | 28 ++--- .../src/components/camera/Camera.hpp | 12 +- .../src/components/chat/ChatModel.cpp | 1 + .../src/components/contact/VcardModel.hpp | 4 +- .../src/components/notifier/Notifier.cpp | 6 +- .../ui/views/App/Main/ContactEdit.js | 1 + 10 files changed, 126 insertions(+), 115 deletions(-) diff --git a/linphone-desktop/src/components/call/CallModel.cpp b/linphone-desktop/src/components/call/CallModel.cpp index ce10d68d0..440e57785 100644 --- a/linphone-desktop/src/components/call/CallModel.cpp +++ b/linphone-desktop/src/components/call/CallModel.cpp @@ -36,10 +36,10 @@ using namespace std; // ============================================================================= -CallModel::CallModel (shared_ptr linphoneCall) { - Q_ASSERT(linphoneCall != nullptr); - mLinphoneCall = linphoneCall; - mLinphoneCall->setData("call-model", *this); +CallModel::CallModel (shared_ptr call) { + Q_ASSERT(call != nullptr); + mCall = call; + mCall->setData("call-model", *this); // Deal with auto-answer. { @@ -59,7 +59,7 @@ CallModel::CallModel (shared_ptr linphoneCall) { QObject::connect( &(*CoreManager::getInstance()->getHandlers()), &CoreHandlers::callStateChanged, this, [this](const shared_ptr &call, linphone::CallState state) { - if (call != mLinphoneCall) + if (call != mCall) return; switch (state) { @@ -90,10 +90,10 @@ CallModel::CallModel (shared_ptr linphoneCall) { case linphone::CallStateUpdatedByRemote: if ( - !mLinphoneCall->getCurrentParams()->videoEnabled() && - mLinphoneCall->getRemoteParams()->videoEnabled() + !mCall->getCurrentParams()->videoEnabled() && + mCall->getRemoteParams()->videoEnabled() ) { - mLinphoneCall->deferUpdate(); + mCall->deferUpdate(); emit videoRequested(); } @@ -109,7 +109,7 @@ CallModel::CallModel (shared_ptr linphoneCall) { } CallModel::~CallModel () { - mLinphoneCall->unsetData("call-model"); + mCall->unsetData("call-model"); } // ----------------------------------------------------------------------------- @@ -123,13 +123,13 @@ void CallModel::setRecordFile (shared_ptr &callParams) { ); } -void CallModel::updateStats (const shared_ptr &stats) { - switch (stats->getType()) { +void CallModel::updateStats (const shared_ptr &callStats) { + switch (callStats->getType()) { case linphone::StreamTypeAudio: - updateStats(stats, mAudioStats); + updateStats(callStats, mAudioStats); break; case linphone::StreamTypeVideo: - updateStats(stats, mVideoStats); + updateStats(callStats, mVideoStats); break; default: break; @@ -144,31 +144,31 @@ void CallModel::accept () { stopAutoAnswerTimer(); shared_ptr core = CoreManager::getInstance()->getCore(); - shared_ptr params = core->createCallParams(mLinphoneCall); + shared_ptr params = core->createCallParams(mCall); params->enableVideo(false); setRecordFile(params); App::smartShowWindow(App::getInstance()->getCallsWindow()); - mLinphoneCall->acceptWithParams(params); + mCall->acceptWithParams(params); } void CallModel::acceptWithVideo () { stopAutoAnswerTimer(); shared_ptr core = CoreManager::getInstance()->getCore(); - shared_ptr params = core->createCallParams(mLinphoneCall); + shared_ptr params = core->createCallParams(mCall); params->enableVideo(true); setRecordFile(params); App::smartShowWindow(App::getInstance()->getCallsWindow()); - mLinphoneCall->acceptWithParams(params); + mCall->acceptWithParams(params); } void CallModel::terminate () { CoreManager *core = CoreManager::getInstance(); core->lockVideoRender(); - mLinphoneCall->terminate(); + mCall->terminate(); core->unlockVideoRender(); } @@ -178,14 +178,14 @@ void CallModel::transfer () { void CallModel::acceptVideoRequest () { shared_ptr core = CoreManager::getInstance()->getCore(); - shared_ptr params = core->createCallParams(mLinphoneCall); + shared_ptr params = core->createCallParams(mCall); params->enableVideo(true); - mLinphoneCall->acceptUpdate(params); + mCall->acceptUpdate(params); } void CallModel::rejectVideoRequest () { - mLinphoneCall->acceptUpdate(mLinphoneCall->getCurrentParams()); + mCall->acceptUpdate(mCall->getCurrentParams()); } void CallModel::takeSnapshot () { @@ -199,9 +199,9 @@ void CallModel::takeSnapshot () { oldName = newName; - qInfo() << "Take snapshot of call:" << &mLinphoneCall; + qInfo() << "Take snapshot of call:" << &mCall; - mLinphoneCall->takeVideoSnapshot( + mCall->takeVideoSnapshot( ::Utils::qStringToLinphoneString( CoreManager::getInstance()->getSettingsModel()->getSavedScreenshotsFolder() + newName ) @@ -212,9 +212,9 @@ void CallModel::startRecording () { if (mRecording) return; - qInfo() << "Start recording call:" << &mLinphoneCall; + qInfo() << "Start recording call:" << &mCall; - mLinphoneCall->startRecording(); + mCall->startRecording(); mRecording = true; emit recordingChanged(true); @@ -222,10 +222,10 @@ void CallModel::startRecording () { void CallModel::stopRecording () { if (mRecording) { - qInfo() << "Stop recording call:" << &mLinphoneCall; + qInfo() << "Stop recording call:" << &mCall; mRecording = false; - mLinphoneCall->stopRecording(); + mCall->stopRecording(); emit recordingChanged(false); } @@ -242,11 +242,11 @@ void CallModel::stopAutoAnswerTimer () const { } QString CallModel::getSipAddress () const { - return ::Utils::linphoneStringToQString(mLinphoneCall->getRemoteAddress()->asStringUriOnly()); + return ::Utils::linphoneStringToQString(mCall->getRemoteAddress()->asStringUriOnly()); } CallModel::CallStatus CallModel::getStatus () const { - switch (mLinphoneCall->getState()) { + switch (mCall->getState()) { case linphone::CallStateConnected: case linphone::CallStateStreamsRunning: return CallStatusConnected; @@ -279,17 +279,17 @@ CallModel::CallStatus CallModel::getStatus () const { break; } - return mLinphoneCall->getDir() == linphone::CallDirIncoming ? CallStatusIncoming : CallStatusOutgoing; + return mCall->getDir() == linphone::CallDirIncoming ? CallStatusIncoming : CallStatusOutgoing; } // ----------------------------------------------------------------------------- int CallModel::getDuration () const { - return mLinphoneCall->getDuration(); + return mCall->getDuration(); } float CallModel::getQuality () const { - return mLinphoneCall->getCurrentQuality(); + return mCall->getCurrentQuality(); } // ----------------------------------------------------------------------------- @@ -307,11 +307,11 @@ inline float computeVu (float volume) { } float CallModel::getMicroVu () const { - return computeVu(mLinphoneCall->getRecordVolume()); + return computeVu(mCall->getRecordVolume()); } float CallModel::getSpeakerVu () const { - return computeVu(mLinphoneCall->getPlayVolume()); + return computeVu(mCall->getPlayVolume()); } // ----------------------------------------------------------------------------- @@ -336,7 +336,7 @@ bool CallModel::getPausedByUser () const { } void CallModel::setPausedByUser (bool status) { - switch (mLinphoneCall->getState()) { + switch (mCall->getState()) { case linphone::CallStateConnected: case linphone::CallStateStreamsRunning: case linphone::CallStatePaused: @@ -347,24 +347,24 @@ void CallModel::setPausedByUser (bool status) { if (status) { if (!mPausedByUser) - mLinphoneCall->pause(); + mCall->pause(); return; } if (mPausedByUser) - mLinphoneCall->resume(); + mCall->resume(); } // ----------------------------------------------------------------------------- bool CallModel::getVideoEnabled () const { - shared_ptr params = mLinphoneCall->getCurrentParams(); + shared_ptr params = mCall->getCurrentParams(); return params && params->videoEnabled() && getStatus() == CallStatusConnected; } void CallModel::setVideoEnabled (bool status) { - switch (mLinphoneCall->getState()) { + switch (mCall->getState()) { case linphone::CallStateConnected: case linphone::CallStateStreamsRunning: break; @@ -375,16 +375,16 @@ void CallModel::setVideoEnabled (bool status) { return; shared_ptr core = CoreManager::getInstance()->getCore(); - shared_ptr params = core->createCallParams(mLinphoneCall); + shared_ptr params = core->createCallParams(mCall); params->enableVideo(status); - mLinphoneCall->update(params); + mCall->update(params); } // ----------------------------------------------------------------------------- bool CallModel::getUpdating () const { - switch (mLinphoneCall->getState()) { + switch (mCall->getState()) { case linphone::CallStateConnected: case linphone::CallStateStreamsRunning: case linphone::CallStatePaused: @@ -406,7 +406,7 @@ bool CallModel::getRecording () const { void CallModel::sendDtmf (const QString &dtmf) { qInfo() << QStringLiteral("Send dtmf: `%1`.").arg(dtmf); - mLinphoneCall->sendDtmf(dtmf.constData()[0].toLatin1()); + mCall->sendDtmf(dtmf.constData()[0].toLatin1()); } // ----------------------------------------------------------------------------- @@ -426,9 +426,9 @@ inline QVariantMap createStat (const QString &key, const QString &value) { return m; } -void CallModel::updateStats (const shared_ptr &callStats, QVariantList &stats) { +void CallModel::updateStats (const shared_ptr &callStats, QVariantList &statsList) { QString family; - shared_ptr params = mLinphoneCall->getCurrentParams(); + shared_ptr params = mCall->getCurrentParams(); shared_ptr payloadType; switch (callStats->getType()) { @@ -454,21 +454,21 @@ void CallModel::updateStats (const shared_ptr &callSt break; } - stats.clear(); + statsList.clear(); - stats << createStat(tr("callStatsCodec"), payloadType + statsList << createStat(tr("callStatsCodec"), payloadType ? QString("%1 / %2kHz").arg(Utils::linphoneStringToQString(payloadType->getMimeType())).arg(payloadType->getClockRate() / 1000) : ""); - stats << createStat(tr("callStatsUploadBandwidth"), QString("%1 kbits/s").arg(int(callStats->getUploadBandwidth()))); - stats << createStat(tr("callStatsDownloadBandwidth"), QString("%1 kbits/s").arg(int(callStats->getDownloadBandwidth()))); - stats << createStat(tr("callStatsIceState"), iceStateToString(callStats->getIceState())); - stats << createStat(tr("callStatsIpFamily"), family); - stats << createStat(tr("callStatsSenderLossRate"), QString("%1 %").arg(callStats->getSenderLossRate())); - stats << createStat(tr("callStatsReceiverLossRate"), QString("%1 %").arg(callStats->getReceiverLossRate())); + statsList << createStat(tr("callStatsUploadBandwidth"), QString("%1 kbits/s").arg(int(callStats->getUploadBandwidth()))); + statsList << createStat(tr("callStatsDownloadBandwidth"), QString("%1 kbits/s").arg(int(callStats->getDownloadBandwidth()))); + statsList << createStat(tr("callStatsIceState"), iceStateToString(callStats->getIceState())); + statsList << createStat(tr("callStatsIpFamily"), family); + statsList << createStat(tr("callStatsSenderLossRate"), QString("%1 %").arg(callStats->getSenderLossRate())); + statsList << createStat(tr("callStatsReceiverLossRate"), QString("%1 %").arg(callStats->getReceiverLossRate())); switch (callStats->getType()) { case linphone::StreamTypeAudio: - stats << createStat(tr("callStatsJitterBuffer"), QString("%1 ms").arg(callStats->getJitterBufferSizeMs())); + statsList << createStat(tr("callStatsJitterBuffer"), QString("%1 ms").arg(callStats->getJitterBufferSizeMs())); break; case linphone::StreamTypeVideo: { QString sentVideoDefinitionName = Utils::linphoneStringToQString(params->getSentVideoDefinition()->getName()); @@ -476,7 +476,7 @@ void CallModel::updateStats (const shared_ptr &callSt .arg(params->getSentVideoDefinition()->getWidth()) .arg(params->getSentVideoDefinition()->getHeight()); - stats << createStat(tr("callStatsSentVideoDefinition"), sentVideoDefinition == sentVideoDefinitionName + statsList << createStat(tr("callStatsSentVideoDefinition"), sentVideoDefinition == sentVideoDefinitionName ? sentVideoDefinition : QString("%1 (%2)").arg(sentVideoDefinition).arg(sentVideoDefinitionName)); @@ -485,7 +485,7 @@ void CallModel::updateStats (const shared_ptr &callSt .arg(params->getReceivedVideoDefinition()->getWidth()) .arg(params->getReceivedVideoDefinition()->getHeight()); - stats << createStat(tr("callStatsReceivedVideoDefinition"), receivedVideoDefinition == receivedVideoDefinitionName + statsList << createStat(tr("callStatsReceivedVideoDefinition"), receivedVideoDefinition == receivedVideoDefinitionName ? receivedVideoDefinition : QString("%1 (%2)").arg(receivedVideoDefinition).arg(receivedVideoDefinitionName)); } diff --git a/linphone-desktop/src/components/call/CallModel.hpp b/linphone-desktop/src/components/call/CallModel.hpp index 04dd0a066..f931fd078 100644 --- a/linphone-desktop/src/components/call/CallModel.hpp +++ b/linphone-desktop/src/components/call/CallModel.hpp @@ -67,12 +67,12 @@ public: CallModel (std::shared_ptr linphoneCall); ~CallModel (); - std::shared_ptr getLinphoneCall () const { - return mLinphoneCall; + std::shared_ptr getCall () const { + return mCall; } static void setRecordFile (std::shared_ptr &callParams); - void updateStats (const std::shared_ptr &stats); + void updateStats (const std::shared_ptr &callStats); Q_INVOKABLE void accept (); Q_INVOKABLE void acceptWithVideo (); @@ -103,7 +103,7 @@ private: CallStatus getStatus () const; bool isOutgoing () const { - return mLinphoneCall->getDir() == linphone::CallDirOutgoing; + return mCall->getDir() == linphone::CallDirOutgoing; } int getDuration () const; @@ -126,7 +126,7 @@ private: QVariantList getAudioStats () const; QVariantList getVideoStats () const; - void updateStats (const std::shared_ptr &callStats, QVariantList &stats); + void updateStats (const std::shared_ptr &callStats, QVariantList &statsList); QString iceStateToString (linphone::IceState state) const; @@ -137,7 +137,7 @@ private: QVariantList mAudioStats; QVariantList mVideoStats; - std::shared_ptr mLinphoneCall; + std::shared_ptr mCall; }; #endif // CALL_MODEL_H_ diff --git a/linphone-desktop/src/components/calls/CallsListModel.cpp b/linphone-desktop/src/components/calls/CallsListModel.cpp index 10138684c..6a7eb6c27 100644 --- a/linphone-desktop/src/components/calls/CallsListModel.cpp +++ b/linphone-desktop/src/components/calls/CallsListModel.cpp @@ -36,13 +36,13 @@ using namespace std; // ============================================================================= -inline QList::iterator findCall ( +inline QList::iterator findCallModel ( QList &list, - const shared_ptr &linphoneCall + const shared_ptr &call ) { return find_if( - list.begin(), list.end(), [linphoneCall](CallModel *call) { - return linphoneCall == call->getLinphoneCall(); + list.begin(), list.end(), [call](CallModel *callModel) { + return call == callModel->getCall(); } ); } @@ -53,21 +53,21 @@ CallsListModel::CallsListModel (QObject *parent) : QAbstractListModel(parent) { mCoreHandlers = CoreManager::getInstance()->getHandlers(); QObject::connect( &(*mCoreHandlers), &CoreHandlers::callStateChanged, - this, [this](const shared_ptr &linphoneCall, linphone::CallState state) { + this, [this](const shared_ptr &call, linphone::CallState state) { switch (state) { case linphone::CallStateIncomingReceived: case linphone::CallStateOutgoingInit: - addCall(linphoneCall); + addCall(call); break; case linphone::CallStateEnd: case linphone::CallStateError: - removeCall(linphoneCall); + removeCall(call); break; case linphone::CallStateStreamsRunning: { - int index = static_cast(distance(mList.begin(), findCall(mList, linphoneCall))); - emit callRunning(index, &linphoneCall->getData("call-model")); + int index = static_cast(distance(mList.begin(), findCallModel(mList, call))); + emit callRunning(index, &call->getData("call-model")); } break; @@ -100,8 +100,8 @@ QVariant CallsListModel::data (const QModelIndex &index, int role) const { return QVariant(); } -CallModel *CallsListModel::getCall (const shared_ptr &linphoneCall) const { - auto it = findCall(*(const_cast *>(&mList)), linphoneCall); +CallModel *CallsListModel::getCallModel (const shared_ptr &call) const { + auto it = findCallModel(*(const_cast *>(&mList)), call); return it != mList.end() ? *it : nullptr; } @@ -170,33 +170,42 @@ bool CallsListModel::removeRows (int row, int count, const QModelIndex &parent) // ----------------------------------------------------------------------------- -void CallsListModel::addCall (const shared_ptr &linphoneCall) { - if (linphoneCall->getDir() == linphone::CallDirOutgoing) +void CallsListModel::addCall (const shared_ptr &call) { + if (call->getDir() == linphone::CallDirOutgoing) App::smartShowWindow(App::getInstance()->getCallsWindow()); - CallModel *call = new CallModel(linphoneCall); + CallModel *callModel = new CallModel(call); - qInfo() << QStringLiteral("Add call:") << call; + qInfo() << QStringLiteral("Add call:") << callModel; - App::getInstance()->getEngine()->setObjectOwnership(call, QQmlEngine::CppOwnership); + App::getInstance()->getEngine()->setObjectOwnership(callModel, QQmlEngine::CppOwnership); int row = mList.count(); beginInsertRows(QModelIndex(), row, row); - mList << call; + mList << callModel; endInsertRows(); } -void CallsListModel::removeCall (const shared_ptr &linphoneCall) { +void CallsListModel::removeCall (const shared_ptr &call) { + CallModel *callModel; + + try { + callModel = &call->getData("call-model"); + } catch (const out_of_range &) { + // Can be a bug. Or the call model not exists because the linphone call state + // `CallStateIncomingReceived`/`CallStateOutgoingInit` was not notified. + qWarning() << QStringLiteral("Unable to found call in:") << callModel; + return; + } + QTimer::singleShot( - DELAY_BEFORE_REMOVE_CALL, this, [this, linphoneCall]() { - CallModel *call = &linphoneCall->getData("call-model"); + DELAY_BEFORE_REMOVE_CALL, this, [this, callModel]() { + qInfo() << QStringLiteral("Removing call:") << callModel; - qInfo() << QStringLiteral("Removing call:") << call; - - int index = mList.indexOf(call); + int index = mList.indexOf(callModel); if (index == -1 || !removeRow(index)) - qWarning() << QStringLiteral("Unable to remove call:") << call; + qWarning() << QStringLiteral("Unable to remove call:") << callModel; if (mList.empty()) App::getInstance()->getCallsWindow()->close(); diff --git a/linphone-desktop/src/components/calls/CallsListModel.hpp b/linphone-desktop/src/components/calls/CallsListModel.hpp index c2db51367..bf80e4050 100644 --- a/linphone-desktop/src/components/calls/CallsListModel.hpp +++ b/linphone-desktop/src/components/calls/CallsListModel.hpp @@ -43,7 +43,7 @@ public: QHash roleNames () const override; QVariant data (const QModelIndex &index, int role = Qt::DisplayRole) const override; - CallModel *getCall (const std::shared_ptr &linphoneCall) const; + CallModel *getCallModel (const std::shared_ptr &call) const; Q_INVOKABLE void launchAudioCall (const QString &sipUri) const; Q_INVOKABLE void launchVideoCall (const QString &sipUri) const; @@ -53,14 +53,14 @@ public: Q_INVOKABLE void terminateAllCalls () const; signals: - void callRunning (int index, CallModel *call); + void callRunning (int index, CallModel *callModel); private: bool removeRow (int row, const QModelIndex &parent = QModelIndex()); bool removeRows (int row, int count, const QModelIndex &parent = QModelIndex()) override; - void addCall (const std::shared_ptr &linphoneCall); - void removeCall (const std::shared_ptr &linphoneCall); + void addCall (const std::shared_ptr &call); + void removeCall (const std::shared_ptr &call); QList mList; diff --git a/linphone-desktop/src/components/camera/Camera.cpp b/linphone-desktop/src/components/camera/Camera.cpp index 0a4d50d3d..a11db40f2 100644 --- a/linphone-desktop/src/components/camera/Camera.cpp +++ b/linphone-desktop/src/components/camera/Camera.cpp @@ -57,8 +57,8 @@ CameraRenderer::~CameraRenderer () { if (mIsPreview) coreManager->getCore()->setNativePreviewWindowId(nullptr); - else if (mLinphoneCall) - mLinphoneCall->setNativeVideoWindowId(nullptr); + else if (mCall) + mCall->setNativeVideoWindowId(nullptr); coreManager->unlockVideoRender(); @@ -104,8 +104,8 @@ void CameraRenderer::render () { if (mIsPreview) coreManager->getCore()->previewOglRender(); - else if (mLinphoneCall) - mLinphoneCall->oglRender(); + else if (mCall) + mCall->oglRender(); msFunctions->bind(nullptr); coreManager->unlockVideoRender(); @@ -124,8 +124,8 @@ void CameraRenderer::synchronize (QQuickFramebufferObject *item) { Camera *camera = qobject_cast(item); { - CallModel *model = camera->getCall(); - mLinphoneCall = model ? model->getLinphoneCall() : nullptr; + CallModel *model = camera->getCallModel(); + mCall = model ? model->getCall() : nullptr; } mIsPreview = camera->mIsPreview; @@ -144,8 +144,8 @@ void CameraRenderer::updateWindowId () { if (mIsPreview) CoreManager::getInstance()->getCore()->setNativePreviewWindowId(mContextInfo); - else if (mLinphoneCall) - mLinphoneCall->setNativeVideoWindowId(mContextInfo); + else if (mCall) + mCall->setNativeVideoWindowId(mContextInfo); } // ----------------------------------------------------------------------------- @@ -172,16 +172,16 @@ QQuickFramebufferObject::Renderer *Camera::createRenderer () const { // ----------------------------------------------------------------------------- -CallModel *Camera::getCall () const { - return mCall; +CallModel *Camera::getCallModel () const { + return mCallModel; } -void Camera::setCall (CallModel *call) { - if (mCall != call) { - mCall = call; +void Camera::setCallModel (CallModel *callModel) { + if (mCallModel != callModel) { + mCallModel = callModel; update(); - emit callChanged(mCall); + emit callChanged(mCallModel); } } diff --git a/linphone-desktop/src/components/camera/Camera.hpp b/linphone-desktop/src/components/camera/Camera.hpp index 6d661df4e..a7526da24 100644 --- a/linphone-desktop/src/components/camera/Camera.hpp +++ b/linphone-desktop/src/components/camera/Camera.hpp @@ -57,7 +57,7 @@ private: bool mUpdateContextInfo = false; bool mIsPreview = false; - std::shared_ptr mLinphoneCall; + std::shared_ptr mCall; QQuickWindow *mWindow; }; @@ -69,7 +69,7 @@ class Camera : public QQuickFramebufferObject { Q_OBJECT; - Q_PROPERTY(CallModel * call READ getCall WRITE setCall NOTIFY callChanged); + Q_PROPERTY(CallModel * call READ getCallModel WRITE setCallModel NOTIFY callChanged); Q_PROPERTY(bool isPreview READ getIsPreview WRITE setIsPreview NOTIFY isPreviewChanged); public: @@ -79,18 +79,18 @@ public: QQuickFramebufferObject::Renderer *createRenderer () const override; signals: - void callChanged (CallModel *call); + void callChanged (CallModel *callModel); void isPreviewChanged (bool isPreview); private: - CallModel *getCall () const; - void setCall (CallModel *call); + CallModel *getCallModel () const; + void setCallModel (CallModel *callModel); bool getIsPreview () const; void setIsPreview (bool status); bool mIsPreview = false; - CallModel *mCall = nullptr; + CallModel *mCallModel = nullptr; QTimer *mRefreshTimer; }; diff --git a/linphone-desktop/src/components/chat/ChatModel.cpp b/linphone-desktop/src/components/chat/ChatModel.cpp index 31a7a4643..ca396bf44 100644 --- a/linphone-desktop/src/components/chat/ChatModel.cpp +++ b/linphone-desktop/src/components/chat/ChatModel.cpp @@ -524,6 +524,7 @@ void ChatModel::insertCall (const shared_ptr &callLog) { case linphone::CallStatusAborted: case linphone::CallStatusEarlyAborted: return; // Ignore aborted calls. + case linphone::CallStatusSuccess: case linphone::CallStatusMissed: case linphone::CallStatusDeclined: diff --git a/linphone-desktop/src/components/contact/VcardModel.hpp b/linphone-desktop/src/components/contact/VcardModel.hpp index 2ea8de9e2..93a0e175f 100644 --- a/linphone-desktop/src/components/contact/VcardModel.hpp +++ b/linphone-desktop/src/components/contact/VcardModel.hpp @@ -29,6 +29,8 @@ // ============================================================================= class VcardModel : public QObject { + friend class ContactModel; + Q_OBJECT; Q_PROPERTY(QString username READ getUsername WRITE setUsername NOTIFY vcardUpdated); @@ -39,8 +41,6 @@ class VcardModel : public QObject { Q_PROPERTY(QVariantList emails READ getEmails NOTIFY vcardUpdated); Q_PROPERTY(QVariantList urls READ getUrls NOTIFY vcardUpdated); - friend class ContactModel; - public: VcardModel (std::shared_ptr vcard) : mVcard(vcard) {} diff --git a/linphone-desktop/src/components/notifier/Notifier.cpp b/linphone-desktop/src/components/notifier/Notifier.cpp index d91ac4f81..7e707ae47 100644 --- a/linphone-desktop/src/components/notifier/Notifier.cpp +++ b/linphone-desktop/src/components/notifier/Notifier.cpp @@ -256,17 +256,17 @@ void Notifier::notifyReceivedCall (const shared_ptr &call) { if (!notification) return; - CallModel *model = CoreManager::getInstance()->getCallsListModel()->getCall(call); + CallModel *callModel = CoreManager::getInstance()->getCallsListModel()->getCallModel(call); QObject::connect( - model, &CallModel::statusChanged, notification, [this, notification](CallModel::CallStatus status) { + callModel, &CallModel::statusChanged, notification, [this, notification](CallModel::CallStatus status) { if (status == CallModel::CallStatusEnded || status == CallModel::CallStatusConnected) deleteNotification(QVariant::fromValue(notification)); } ); QVariantMap map; - map["call"].setValue(model); + map["call"].setValue(callModel); ::setProperty(*notification, NOTIFICATION_PROPERTY_DATA, map); showNotification(notification, NOTIFICATION_TIMEOUT_RECEIVED_CALL); diff --git a/linphone-desktop/ui/views/App/Main/ContactEdit.js b/linphone-desktop/ui/views/App/Main/ContactEdit.js index 49ce4cb8e..bebb0aa55 100644 --- a/linphone-desktop/ui/views/App/Main/ContactEdit.js +++ b/linphone-desktop/ui/views/App/Main/ContactEdit.js @@ -24,6 +24,7 @@ function handleCreation () { contactEdit._edition = true } else { + contactEdit._vcard = contact.vcard } }