diff --git a/CHANGELOG.md b/CHANGELOG.md index 701386a8d..fa04a0ff6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## 5.0.10 - undefined ### Fixed -- Blank notification when declining incoming call. +- Remove blank notification when declining incoming call. +- Remove blank page when opening calls window and add a waiting step while connecting to call. +- Camera activation issue based on call status. ## 5.0.9 - 2023-01-31 diff --git a/linphone-app/assets/languages/da.ts b/linphone-app/assets/languages/da.ts index 2653ee8a1..7e04c9639 100644 --- a/linphone-app/assets/languages/da.ts +++ b/linphone-app/assets/languages/da.ts @@ -1499,6 +1499,11 @@ Server url ikke konfigureret. ''You are alone in this conference' : Text in message banner when the user is the only participant. + + incallWaitConnectedMessage + 'The call is not ready. Please Wait...' : Waiting message for starting a call. + + IncallFullscreen diff --git a/linphone-app/assets/languages/de.ts b/linphone-app/assets/languages/de.ts index 5d570dc60..9223919d9 100644 --- a/linphone-app/assets/languages/de.ts +++ b/linphone-app/assets/languages/de.ts @@ -1499,6 +1499,11 @@ Server URL ist nicht konfiguriert. ''You are alone in this conference' : Text in message banner when the user is the only participant. + + incallWaitConnectedMessage + 'The call is not ready. Please Wait...' : Waiting message for starting a call. + + IncallFullscreen diff --git a/linphone-app/assets/languages/en.ts b/linphone-app/assets/languages/en.ts index 76c9ff20c..8af08363b 100644 --- a/linphone-app/assets/languages/en.ts +++ b/linphone-app/assets/languages/en.ts @@ -1499,6 +1499,11 @@ Server URL not configured. ''You are alone in this conference' : Text in message banner when the user is the only participant. You are alone in this meeting + + incallWaitConnectedMessage + 'The call is not ready. Please Wait...' : Waiting message for starting a call. + The call is not ready. Please Wait… + IncallFullscreen diff --git a/linphone-app/assets/languages/es.ts b/linphone-app/assets/languages/es.ts index 1fcb2751d..621113025 100644 --- a/linphone-app/assets/languages/es.ts +++ b/linphone-app/assets/languages/es.ts @@ -1499,6 +1499,11 @@ URL del servidor no configurada. ''You are alone in this conference' : Text in message banner when the user is the only participant. + + incallWaitConnectedMessage + 'The call is not ready. Please Wait...' : Waiting message for starting a call. + + IncallFullscreen diff --git a/linphone-app/assets/languages/fr_FR.ts b/linphone-app/assets/languages/fr_FR.ts index 12304cc39..df47c4a56 100644 --- a/linphone-app/assets/languages/fr_FR.ts +++ b/linphone-app/assets/languages/fr_FR.ts @@ -1499,6 +1499,11 @@ URL du serveur non configurée. ''You are alone in this conference' : Text in message banner when the user is the only participant. Vous êtes actuellement seul dans cette réunion + + incallWaitConnectedMessage + 'The call is not ready. Please Wait...' : Waiting message for starting a call. + + IncallFullscreen diff --git a/linphone-app/assets/languages/hu.ts b/linphone-app/assets/languages/hu.ts index 12c25972e..ac77084df 100644 --- a/linphone-app/assets/languages/hu.ts +++ b/linphone-app/assets/languages/hu.ts @@ -1489,6 +1489,11 @@ A kiszolgáló URL-je nincs konfigurálva. ''You are alone in this conference' : Text in message banner when the user is the only participant. + + incallWaitConnectedMessage + 'The call is not ready. Please Wait...' : Waiting message for starting a call. + + IncallFullscreen diff --git a/linphone-app/assets/languages/it.ts b/linphone-app/assets/languages/it.ts index 3a3112d40..6f5ddef3b 100644 --- a/linphone-app/assets/languages/it.ts +++ b/linphone-app/assets/languages/it.ts @@ -1499,6 +1499,11 @@ URL del server non configurato. ''You are alone in this conference' : Text in message banner when the user is the only participant. + + incallWaitConnectedMessage + 'The call is not ready. Please Wait...' : Waiting message for starting a call. + + IncallFullscreen diff --git a/linphone-app/assets/languages/ja.ts b/linphone-app/assets/languages/ja.ts index 6ec2b9fdb..1a1fa4755 100644 --- a/linphone-app/assets/languages/ja.ts +++ b/linphone-app/assets/languages/ja.ts @@ -1489,6 +1489,11 @@ ''You are alone in this conference' : Text in message banner when the user is the only participant. + + incallWaitConnectedMessage + 'The call is not ready. Please Wait...' : Waiting message for starting a call. + + IncallFullscreen diff --git a/linphone-app/assets/languages/lt.ts b/linphone-app/assets/languages/lt.ts index 5c3393c05..b13939615 100644 --- a/linphone-app/assets/languages/lt.ts +++ b/linphone-app/assets/languages/lt.ts @@ -1509,6 +1509,11 @@ Nesukonfigūruotas serverio url. ''You are alone in this conference' : Text in message banner when the user is the only participant. + + incallWaitConnectedMessage + 'The call is not ready. Please Wait...' : Waiting message for starting a call. + + IncallFullscreen diff --git a/linphone-app/assets/languages/pt_BR.ts b/linphone-app/assets/languages/pt_BR.ts index df35aacb9..cbcf9f645 100644 --- a/linphone-app/assets/languages/pt_BR.ts +++ b/linphone-app/assets/languages/pt_BR.ts @@ -1499,6 +1499,11 @@ URL do servidor não configurado. ''You are alone in this conference' : Text in message banner when the user is the only participant. + + incallWaitConnectedMessage + 'The call is not ready. Please Wait...' : Waiting message for starting a call. + + IncallFullscreen diff --git a/linphone-app/assets/languages/ru.ts b/linphone-app/assets/languages/ru.ts index 5c8b54612..d50896e16 100644 --- a/linphone-app/assets/languages/ru.ts +++ b/linphone-app/assets/languages/ru.ts @@ -1509,6 +1509,11 @@ ''You are alone in this conference' : Text in message banner when the user is the only participant. + + incallWaitConnectedMessage + 'The call is not ready. Please Wait...' : Waiting message for starting a call. + + IncallFullscreen diff --git a/linphone-app/assets/languages/sv.ts b/linphone-app/assets/languages/sv.ts index a82309876..c08cfaa65 100644 --- a/linphone-app/assets/languages/sv.ts +++ b/linphone-app/assets/languages/sv.ts @@ -1499,6 +1499,11 @@ Serverwebbadressen är inte konfigurerad. ''You are alone in this conference' : Text in message banner when the user is the only participant. + + incallWaitConnectedMessage + 'The call is not ready. Please Wait...' : Waiting message for starting a call. + + IncallFullscreen diff --git a/linphone-app/assets/languages/tr.ts b/linphone-app/assets/languages/tr.ts index 2e59bf7cd..a7c2d008c 100644 --- a/linphone-app/assets/languages/tr.ts +++ b/linphone-app/assets/languages/tr.ts @@ -1489,6 +1489,11 @@ Sunucu url'si yapılandırılmadı. ''You are alone in this conference' : Text in message banner when the user is the only participant. + + incallWaitConnectedMessage + 'The call is not ready. Please Wait...' : Waiting message for starting a call. + + IncallFullscreen diff --git a/linphone-app/assets/languages/uk.ts b/linphone-app/assets/languages/uk.ts index e59644f4f..3a93d6823 100644 --- a/linphone-app/assets/languages/uk.ts +++ b/linphone-app/assets/languages/uk.ts @@ -1509,6 +1509,11 @@ ''You are alone in this conference' : Text in message banner when the user is the only participant. + + incallWaitConnectedMessage + 'The call is not ready. Please Wait...' : Waiting message for starting a call. + + IncallFullscreen diff --git a/linphone-app/assets/languages/zh_CN.ts b/linphone-app/assets/languages/zh_CN.ts index e74252866..838ba8d1a 100644 --- a/linphone-app/assets/languages/zh_CN.ts +++ b/linphone-app/assets/languages/zh_CN.ts @@ -1489,6 +1489,11 @@ ''You are alone in this conference' : Text in message banner when the user is the only participant. + + incallWaitConnectedMessage + 'The call is not ready. Please Wait...' : Waiting message for starting a call. + + IncallFullscreen diff --git a/linphone-app/src/components/call/CallModel.cpp b/linphone-app/src/components/call/CallModel.cpp index f000c5453..784df5f96 100644 --- a/linphone-app/src/components/call/CallModel.cpp +++ b/linphone-app/src/components/call/CallModel.cpp @@ -134,7 +134,6 @@ CallModel::~CallModel () { } void CallModel::removeCall(){ - emit statusChanged(getStatus()); if(mCall){ mCall->removeListener(mCallListener); mConferenceModel = nullptr;// Ordering deletion. @@ -623,27 +622,32 @@ void CallModel::stopAutoAnswerTimer () const { // ----------------------------------------------------------------------------- CallModel::CallStatus CallModel::getStatus () const { + CallModel::CallStatus status; if(mCall){ switch (mCall->getState()) { case linphone::Call::State::Connected: case linphone::Call::State::StreamsRunning: - return CallStatusConnected; + status = CallStatusConnected; + break; case linphone::Call::State::End: case linphone::Call::State::Error: case linphone::Call::State::Referred: case linphone::Call::State::Released: - return CallStatusEnded; + status = CallStatusEnded; + break; case linphone::Call::State::Paused: case linphone::Call::State::PausedByRemote: case linphone::Call::State::Pausing: case linphone::Call::State::Resuming: - return CallStatusPaused; + status = CallStatusPaused; + break; case linphone::Call::State::Updating: case linphone::Call::State::UpdatedByRemote: - return mPausedByRemote ? CallStatusPaused : CallStatusConnected; + status = mPausedByRemote ? CallStatusPaused : CallStatusConnected; + break; case linphone::Call::State::EarlyUpdatedByRemote: case linphone::Call::State::EarlyUpdating: @@ -654,12 +658,13 @@ CallModel::CallStatus CallModel::getStatus () const { case linphone::Call::State::OutgoingInit: case linphone::Call::State::OutgoingProgress: case linphone::Call::State::OutgoingRinging: - break; + default:{ + status = mCall->getDir() == linphone::Call::Dir::Incoming ? CallStatusIncoming : CallStatusOutgoing; + } } - - return mCall->getDir() == linphone::Call::Dir::Incoming ? CallStatusIncoming : CallStatusOutgoing; }else - return CallStatusIdle; + status = CallStatusIdle; + return status; } // ----------------------------------------------------------------------------- diff --git a/linphone-app/src/components/calls/CallsListModel.cpp b/linphone-app/src/components/calls/CallsListModel.cpp index 3157b87c4..1d9a9e1c8 100644 --- a/linphone-app/src/components/calls/CallsListModel.cpp +++ b/linphone-app/src/components/calls/CallsListModel.cpp @@ -524,6 +524,7 @@ static void joinConference (const shared_ptr &call) { addModel->update(); } +// Global handler on core (is call before call model receive it). Used for model creation. void CallsListModel::handleCallStateChanged (const shared_ptr &call, linphone::Call::State state) { switch (state) { case linphone::Call::State::IncomingReceived: @@ -534,30 +535,39 @@ void CallsListModel::handleCallStateChanged (const shared_ptr &c case linphone::Call::State::OutgoingInit: addCall(call); break; - - case linphone::Call::State::End: - case linphone::Call::State::Error:{ - if(call->dataExists("call-model")) { - CallModel * model = &call->getData("call-model"); - model->endCall(); - if(model->getCallError() == "") - removeCall(call); - } - } break; - case linphone::Call::State::Released: - removeCall(call); - break; - - case linphone::Call::State::StreamsRunning: { - int index = findCallIndex(mList, call); - emit callRunning(index, &call->getData("call-model")); - } break; - default: break; } } +// Call handler +void CallsListModel::handleCallStatusChanged () { + auto callModel = qobject_cast(sender()); + auto call = callModel->getCall(); + if( call){ + auto state = call->getState(); + switch (state) { + case linphone::Call::State::End: + case linphone::Call::State::Error:{ + callModel->endCall(); + if(callModel->getCallError() == "") + removeCall(call); + } break; + case linphone::Call::State::Released: + removeCall(call); + break; + + case linphone::Call::State::StreamsRunning: { + int index = findCallIndex(mList, call); + emit callRunning(index, callModel); + } break; + + default: + break; + } + } +} + // ----------------------------------------------------------------------------- void CallsListModel::addCall (const shared_ptr &call) { @@ -568,6 +578,7 @@ void CallsListModel::addCall (const shared_ptr &call) { App::getInstance()->getEngine()->setObjectOwnership(callModel.get(), QQmlEngine::CppOwnership); connect(callModel.get(), &CallModel::meAdminChanged, this, &CallsListModel::canMergeCallsChanged); + connect(callModel.get(), &CallModel::statusChanged, this, &CallsListModel::handleCallStatusChanged); add(callModel); emit layoutChanged(); @@ -602,6 +613,7 @@ void CallsListModel::addDummyCall () { emit dataChanged(index(id, 0), index(id, 0)); }); connect(callModel.get(), &CallModel::meAdminChanged, this, &CallsListModel::canMergeCallsChanged); + connect(callModel.get(), &CallModel::statusChanged, this, &CallsListModel::handleCallStatusChanged); add(callModel); emit layoutChanged(); @@ -618,7 +630,6 @@ void CallsListModel::removeCall (const shared_ptr &call) { removeCallCb(callModel); }); }else{ - callModel->removeCall(); remove(callModel); } } diff --git a/linphone-app/src/components/calls/CallsListModel.hpp b/linphone-app/src/components/calls/CallsListModel.hpp index 1c774c039..cca14239b 100644 --- a/linphone-app/src/components/calls/CallsListModel.hpp +++ b/linphone-app/src/components/calls/CallsListModel.hpp @@ -70,6 +70,8 @@ public: Q_INVOKABLE void terminateCall (const QString& sipAddress) const; static std::list> getCallHistory(const QString& peerAddress, const QString& localAddress); + + void handleCallStatusChanged (); signals: void callRunning (int index, CallModel *callModel); diff --git a/linphone-app/src/components/notifier/Notifier.cpp b/linphone-app/src/components/notifier/Notifier.cpp index 0e2f1d95e..75a707824 100644 --- a/linphone-app/src/components/notifier/Notifier.cpp +++ b/linphone-app/src/components/notifier/Notifier.cpp @@ -328,6 +328,9 @@ void Notifier::notifyReceivedCall (const shared_ptr &call) { if (status == CallModel::CallStatusEnded || status == CallModel::CallStatusConnected) deleteNotification(QVariant::fromValue(notification)); }); + QObject::connect(callModel, &CallModel::destroyed, notification, [this, notification]() { + deleteNotification(QVariant::fromValue(notification)); + }); } diff --git a/linphone-app/ui/modules/Linphone/Menus/IncallMenu.qml b/linphone-app/ui/modules/Linphone/Menus/IncallMenu.qml index 2e1058e15..0a538292f 100644 --- a/linphone-app/ui/modules/Linphone/Menus/IncallMenu.qml +++ b/linphone-app/ui/modules/Linphone/Menus/IncallMenu.qml @@ -53,7 +53,7 @@ Rectangle{ property bool _activateCamera: false Connections{// Enable camera only when status is ok target: mainItem.callModel - onStatusChanged: if( mainItem._activateCamera && (status == LinphoneEnums.CallStatusConnected || status == LinphoneEnums.CallStatusIdle)){ + onStatusChanged: if( mainItem._activateCamera && (status == CallModel.CallStatusConnected || status == CallModel.CallStatusIdle)){ camera._activateCamera = false callModel.cameraEnabled = true } diff --git a/linphone-app/ui/views/App/Calls/CallsWindow.js b/linphone-app/ui/views/App/Calls/CallsWindow.js index f92f96e68..ef92493c2 100644 --- a/linphone-app/ui/views/App/Calls/CallsWindow.js +++ b/linphone-app/ui/views/App/Calls/CallsWindow.js @@ -82,7 +82,7 @@ function getContent (call, conferenceInfoModel) { } var CallModel = Linphone.CallModel if (status === CallModel.CallStatusIncoming) { - return null; + return incall; } if( window.conferenceInfoModel != call.conferenceInfoModel) { Qt.callLater(function(){window.conferenceInfoModel = call.conferenceInfoModel}) diff --git a/linphone-app/ui/views/App/Calls/CallsWindow.qml b/linphone-app/ui/views/App/Calls/CallsWindow.qml index d66112701..bb4176ba3 100644 --- a/linphone-app/ui/views/App/Calls/CallsWindow.qml +++ b/linphone-app/ui/views/App/Calls/CallsWindow.qml @@ -282,7 +282,6 @@ Window { window.close() lastComponent = sourceComponent } - }// Force update when loading a new Content. It's just to be sure active: window.call || window.conferenceInfoModel } diff --git a/linphone-app/ui/views/App/Calls/Incall.qml b/linphone-app/ui/views/App/Calls/Incall.qml index 487ff99b3..9f06e7e22 100644 --- a/linphone-app/ui/views/App/Calls/Incall.qml +++ b/linphone-app/ui/views/App/Calls/Incall.qml @@ -42,7 +42,7 @@ Rectangle { // States property bool isAudioOnly: callModel && callModel.conferenceVideoLayout == LinphoneEnums.ConferenceLayoutAudioOnly - property bool isReady : mainItem.callModel + property bool isReady : mainItem.callModel && mainItem.callModel.status != CallModel.CallStatusIdle && (!mainItem.callModel.isConference || (mainItem.conferenceModel && mainItem.conferenceModel.isReady) ) @@ -399,8 +399,11 @@ Rectangle { text: false //mainItem.needMoreParticipants //: 'Waiting for another participant...' : Waiting message for more participant. ? qsTr('incallWaitParticipantMessage') + : mainItem.callModel && mainItem.callModel.isConference //: 'The meeting is not ready. Please Wait...' : Waiting message for starting a meeting. - : qsTr('incallWaitMessage') + ? qsTr('incallWaitMessage') + //: 'The call is not ready. Please Wait...' : Waiting message for starting a call. + : qsTr('incallWaitConnectedMessage') color: IncallStyle.buzyColor.color } } @@ -552,7 +555,7 @@ Rectangle { } Connections{// Enable camera only when status is ok target: callModel - onStatusChanged: if( camera._activateCamera && (status == LinphoneEnums.CallStatusConnected || status == LinphoneEnums.CallStatusIdle)){ + onStatusChanged: if( camera._activateCamera && (status == CallModel.CallStatusConnected || status == CallModel.CallStatusIdle)){ camera._activateCamera = false callModel.cameraEnabled = true }