Commit fc9e8b68 authored by Ronan Abhamon's avatar Ronan Abhamon

fix(src/components/calls/CallsListModel): handle getData exception and code refactoring

parent 69f114e5
......@@ -36,10 +36,10 @@ using namespace std;
// =============================================================================
CallModel::CallModel (shared_ptr<linphone::Call> linphoneCall) {
Q_ASSERT(linphoneCall != nullptr);
mLinphoneCall = linphoneCall;
mLinphoneCall->setData("call-model", *this);
CallModel::CallModel (shared_ptr<linphone::Call> call) {
Q_ASSERT(call != nullptr);
mCall = call;
mCall->setData("call-model", *this);
// Deal with auto-answer.
{
......@@ -59,7 +59,7 @@ CallModel::CallModel (shared_ptr<linphone::Call> linphoneCall) {
QObject::connect(
&(*CoreManager::getInstance()->getHandlers()), &CoreHandlers::callStateChanged,
this, [this](const shared_ptr<linphone::Call> &call, linphone::CallState state) {
if (call != mLinphoneCall)
if (call != mCall)
return;
switch (state) {
......@@ -90,10 +90,10 @@ CallModel::CallModel (shared_ptr<linphone::Call> 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<linphone::Call> linphoneCall) {
}
CallModel::~CallModel () {
mLinphoneCall->unsetData("call-model");
mCall->unsetData("call-model");
}
// -----------------------------------------------------------------------------
......@@ -123,13 +123,13 @@ void CallModel::setRecordFile (shared_ptr<linphone::CallParams> &callParams) {
);
}
void CallModel::updateStats (const shared_ptr<const linphone::CallStats> &stats) {
switch (stats->getType()) {
void CallModel::updateStats (const shared_ptr<const linphone::CallStats> &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<linphone::Core> core = CoreManager::getInstance()->getCore();
shared_ptr<linphone::CallParams> params = core->createCallParams(mLinphoneCall);
shared_ptr<linphone::CallParams> 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<linphone::Core> core = CoreManager::getInstance()->getCore();
shared_ptr<linphone::CallParams> params = core->createCallParams(mLinphoneCall);
shared_ptr<linphone::CallParams> 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<linphone::Core> core = CoreManager::getInstance()->getCore();
shared_ptr<linphone::CallParams> params = core->createCallParams(mLinphoneCall);
shared_ptr<linphone::CallParams> 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<const linphone::CallParams> params = mLinphoneCall->getCurrentParams();
shared_ptr<const linphone::CallParams> 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<linphone::Core> core = CoreManager::getInstance()->getCore();
shared_ptr<linphone::CallParams> params = core->createCallParams(mLinphoneCall);
shared_ptr<linphone::CallParams> 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<const linphone::CallStats> &callStats, QVariantList &stats) {
void CallModel::updateStats (const shared_ptr<const linphone::CallStats> &callStats, QVariantList &statsList) {
QString family;
shared_ptr<const linphone::CallParams> params = mLinphoneCall->getCurrentParams();
shared_ptr<const linphone::CallParams> params = mCall->getCurrentParams();
shared_ptr<const linphone::PayloadType> payloadType;
switch (callStats->getType()) {
......@@ -454,21 +454,21 @@ void CallModel::updateStats (const shared_ptr<const linphone::CallStats> &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<const linphone::CallStats> &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<const linphone::CallStats> &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));
}
......
......@@ -67,12 +67,12 @@ public:
CallModel (std::shared_ptr<linphone::Call> linphoneCall);
~CallModel ();
std::shared_ptr<linphone::Call> getLinphoneCall () const {
return mLinphoneCall;
std::shared_ptr<linphone::Call> getCall () const {
return mCall;
}
static void setRecordFile (std::shared_ptr<linphone::CallParams> &callParams);
void updateStats (const std::shared_ptr<const linphone::CallStats> &stats);
void updateStats (const std::shared_ptr<const linphone::CallStats> &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<const linphone::CallStats> &callStats, QVariantList &stats);
void updateStats (const std::shared_ptr<const linphone::CallStats> &callStats, QVariantList &statsList);
QString iceStateToString (linphone::IceState state) const;
......@@ -137,7 +137,7 @@ private:
QVariantList mAudioStats;
QVariantList mVideoStats;
std::shared_ptr<linphone::Call> mLinphoneCall;
std::shared_ptr<linphone::Call> mCall;
};
#endif // CALL_MODEL_H_
......@@ -36,13 +36,13 @@ using namespace std;
// =============================================================================
inline QList<CallModel *>::iterator findCall (
inline QList<CallModel *>::iterator findCallModel (
QList<CallModel *> &list,
const shared_ptr<linphone::Call> &linphoneCall
const shared_ptr<linphone::Call> &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<linphone::Call> &linphoneCall, linphone::CallState state) {
this, [this](const shared_ptr<linphone::Call> &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<int>(distance(mList.begin(), findCall(mList, linphoneCall)));
emit callRunning(index, &linphoneCall->getData<CallModel>("call-model"));
int index = static_cast<int>(distance(mList.begin(), findCallModel(mList, call)));
emit callRunning(index, &call->getData<CallModel>("call-model"));
}
break;
......@@ -100,8 +100,8 @@ QVariant CallsListModel::data (const QModelIndex &index, int role) const {
return QVariant();
}
CallModel *CallsListModel::getCall (const shared_ptr<linphone::Call> &linphoneCall) const {
auto it = findCall(*(const_cast<QList<CallModel *> *>(&mList)), linphoneCall);
CallModel *CallsListModel::getCallModel (const shared_ptr<linphone::Call> &call) const {
auto it = findCallModel(*(const_cast<QList<CallModel *> *>(&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<linphone::Call> &linphoneCall) {
if (linphoneCall->getDir() == linphone::CallDirOutgoing)
void CallsListModel::addCall (const shared_ptr<linphone::Call> &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<linphone::Call> &linphoneCall) {
QTimer::singleShot(
DELAY_BEFORE_REMOVE_CALL, this, [this, linphoneCall]() {
CallModel *call = &linphoneCall->getData<CallModel>("call-model");
void CallsListModel::removeCall (const shared_ptr<linphone::Call> &call) {
CallModel *callModel;
try {
callModel = &call->getData<CallModel>("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;
}
qInfo() << QStringLiteral("Removing call:") << call;
QTimer::singleShot(
DELAY_BEFORE_REMOVE_CALL, this, [this, callModel]() {
qInfo() << QStringLiteral("Removing call:") << callModel;
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();
......
......@@ -43,7 +43,7 @@ public:
QHash<int, QByteArray> roleNames () const override;
QVariant data (const QModelIndex &index, int role = Qt::DisplayRole) const override;
CallModel *getCall (const std::shared_ptr<linphone::Call> &linphoneCall) const;
CallModel *getCallModel (const std::shared_ptr<linphone::Call> &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<linphone::Call> &linphoneCall);
void removeCall (const std::shared_ptr<linphone::Call> &linphoneCall);
void addCall (const std::shared_ptr<linphone::Call> &call);
void removeCall (const std::shared_ptr<linphone::Call> &call);
QList<CallModel *> mList;
......
......@@ -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<Camera *>(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);
}
}
......
......@@ -57,7 +57,7 @@ private:
bool mUpdateContextInfo = false;
bool mIsPreview = false;
std::shared_ptr<linphone::Call> mLinphoneCall;
std::shared_ptr<linphone::Call> 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;
};
......
......@@ -524,6 +524,7 @@ void ChatModel::insertCall (const shared_ptr<linphone::CallLog> &callLog) {
case linphone::CallStatusAborted:
case linphone::CallStatusEarlyAborted:
return; // Ignore aborted calls.
case linphone::CallStatusSuccess:
case linphone::CallStatusMissed:
case linphone::CallStatusDeclined:
......
......@@ -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<linphone::Vcard> vcard) : mVcard(vcard) {}
......
......@@ -256,17 +256,17 @@ void Notifier::notifyReceivedCall (const shared_ptr<linphone::Call> &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);
......
......@@ -24,6 +24,7 @@ function handleCreation () {
contactEdit._edition = true
} else {
contactEdit._vcard = contact.vcard
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment