diff --git a/linphone-app/assets/languages/it.ts b/linphone-app/assets/languages/it.ts index 5068de483..5e11d6559 100644 --- a/linphone-app/assets/languages/it.ts +++ b/linphone-app/assets/languages/it.ts @@ -3369,7 +3369,7 @@ Clicca: <a href="%1">%1</a> cancelButton 'Cancel' : Cancel button. - + ANNULLA startButton diff --git a/linphone-app/src/components/call/CallModel.cpp b/linphone-app/src/components/call/CallModel.cpp index f8df585a8..24bfe7a55 100644 --- a/linphone-app/src/components/call/CallModel.cpp +++ b/linphone-app/src/components/call/CallModel.cpp @@ -501,10 +501,9 @@ void CallModel::accept (bool withVideo) { params->enableVideo(withVideo); setRecordFile(params); auto localAddress = mCall->getCallLog()->getLocalAddress(); - std::list> proxies = core->getProxyConfigList() ; - for(auto proxy : proxies){ - if(proxy->getIdentityAddress()->weakEqual(localAddress)) { - params->setProxyConfig(proxy); + for(auto account : core->getAccountList()){ + if( account->getParams()->getIdentityAddress()->weakEqual(localAddress)){ + params->setAccount(account); break; } } diff --git a/linphone-app/src/components/calls/CallsListModel.cpp b/linphone-app/src/components/calls/CallsListModel.cpp index 8d02478e0..6493e09f2 100644 --- a/linphone-app/src/components/calls/CallsListModel.cpp +++ b/linphone-app/src/components/calls/CallsListModel.cpp @@ -323,11 +323,16 @@ QVariantMap CallsListModel::createChatRoom(const QString& subject, const int& se chatRoom = core->searchChatRoom(params, localAddress , nullptr , chatRoomParticipants); + if(chatRoom && ChatRoomModel::isTerminated(chatRoom)) + chatRoom = nullptr; params->setSubject(subject != ""?Utils::appStringToCoreString(subject):"Dummy Subject"); + if(!chatRoom) chatRoom = core->searchChatRoom(params, localAddress , nullptr , chatRoomParticipants); + if(chatRoom && ChatRoomModel::isTerminated(chatRoom)) + chatRoom = nullptr; }else params->setSubject(subject != ""?Utils::appStringToCoreString(subject):"Dummy Subject"); if( !chatRoom) { diff --git a/linphone-app/src/components/chat-room/ChatRoomModel.cpp b/linphone-app/src/components/chat-room/ChatRoomModel.cpp index 9b9df4473..bea32c713 100644 --- a/linphone-app/src/components/chat-room/ChatRoomModel.cpp +++ b/linphone-app/src/components/chat-room/ChatRoomModel.cpp @@ -849,6 +849,10 @@ int ChatRoomModel::loadTillMessage(ChatMessageModel * message){ return -1; } +bool ChatRoomModel::isTerminated(const std::shared_ptr& chatRoom){ + return chatRoom->getState() == linphone::ChatRoom::State::Terminated || chatRoom->getState() == linphone::ChatRoom::State::Deleted; +} + void ChatRoomModel::initEntries(){ if( mList.size() > mLastEntriesStep) resetData(); diff --git a/linphone-app/src/components/chat-room/ChatRoomModel.hpp b/linphone-app/src/components/chat-room/ChatRoomModel.hpp index 7fa941864..abb884cb9 100644 --- a/linphone-app/src/components/chat-room/ChatRoomModel.hpp +++ b/linphone-app/src/components/chat-room/ChatRoomModel.hpp @@ -173,6 +173,7 @@ public: void callEnded(std::shared_ptr call); void updateNewMessageNotice(const int& count); Q_INVOKABLE int loadTillMessage(ChatMessageModel * message);// Load all entries till message and return its index. -1 if not found. + static bool isTerminated(const std::shared_ptr& chatRoom); QDateTime mLastUpdateTime; int mUnreadMessagesCount = 0; diff --git a/linphone-app/src/components/conference/ConferenceListener.cpp b/linphone-app/src/components/conference/ConferenceListener.cpp index 82738d5f8..07b2b633c 100644 --- a/linphone-app/src/components/conference/ConferenceListener.cpp +++ b/linphone-app/src/components/conference/ConferenceListener.cpp @@ -52,6 +52,9 @@ void ConferenceListener::onParticipantRemoved(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) + for(auto d : conference->getMe()->getDevices()) + qDebug() << "\t--> " << d->getAddress()->asString().c_str(); emit participantDeviceAdded(participantDevice); } void ConferenceListener::onParticipantDeviceRemoved(const std::shared_ptr & conference, const std::shared_ptr & participantDevice){ diff --git a/linphone-app/src/components/conferenceInfo/ConferenceInfoModel.cpp b/linphone-app/src/components/conferenceInfo/ConferenceInfoModel.cpp index d816724a9..b60794fdb 100644 --- a/linphone-app/src/components/conferenceInfo/ConferenceInfoModel.cpp +++ b/linphone-app/src/components/conferenceInfo/ConferenceInfoModel.cpp @@ -221,6 +221,18 @@ void ConferenceInfoModel::setTimeZoneModel(TimeZoneModel * model){ void ConferenceInfoModel::setIsScheduled(const bool& on){ if( mIsScheduled != on){ mIsScheduled = on; + if(!mIsScheduled){ + mConferenceInfo->setDateTime(0); + mConferenceInfo->setDuration(0); + }else{ + mTimeZone = QTimeZone::systemTimeZone(); + QDateTime currentDateTime = QDateTime::currentDateTime(); + QDateTime utc = currentDateTime.addSecs( -mTimeZone.offsetFromUtc(currentDateTime)); + mConferenceInfo->setDateTime(utc.toMSecsSinceEpoch() / 1000); + mConferenceInfo->setDuration(1200); + } + emit dateTimeChanged(); + emit durationChanged(); emit isScheduledChanged(); } } @@ -232,23 +244,15 @@ void ConferenceInfoModel::createConference(const int& securityLevel, const int& shared_ptr core = CoreManager::getInstance()->getCore(); static std::shared_ptr conference; qInfo() << "Conference creation of " << getSubject() << " at " << securityLevel << " security, organized by " << getOrganizer(); + qInfo() << "Participants:"; + for(auto p : mConferenceInfo->getParticipants()) + qInfo() << "\t" << p->asString().c_str(); - if( isScheduled()){ - mConferenceScheduler = ConferenceScheduler::create(); - connect(mConferenceScheduler.get(), &ConferenceScheduler::invitationsSent, this, &ConferenceInfoModel::onInvitationsSent); - connect(mConferenceScheduler.get(), &ConferenceScheduler::stateChanged, this, &ConferenceInfoModel::onStateChanged); - mConferenceScheduler->getConferenceScheduler()->setInfo(mConferenceInfo); - }else{ - auto conferenceParameters = core->createConferenceParams(nullptr); - conferenceParameters->enableAudio(true); - conferenceParameters->enableVideo(true); - conferenceParameters->setDescription(mConferenceInfo->getDescription()); - conferenceParameters->setSubject(mConferenceInfo->getSubject()); - conferenceParameters->setStartTime(0); - conferenceParameters->setEndTime(0); - conferenceParameters->enableLocalParticipant(true); - conference = core->createConferenceWithParams(conferenceParameters); - } + + mConferenceScheduler = ConferenceScheduler::create(); + connect(mConferenceScheduler.get(), &ConferenceScheduler::invitationsSent, this, &ConferenceInfoModel::onInvitationsSent); + connect(mConferenceScheduler.get(), &ConferenceScheduler::stateChanged, this, &ConferenceInfoModel::onStateChanged); + mConferenceScheduler->getConferenceScheduler()->setInfo(mConferenceInfo); } //------------------------------------------------------------------------------------------------- diff --git a/linphone-app/src/components/conferenceScheduler/ConferenceScheduler.cpp b/linphone-app/src/components/conferenceScheduler/ConferenceScheduler.cpp index deff56552..1f74d6315 100644 --- a/linphone-app/src/components/conferenceScheduler/ConferenceScheduler.cpp +++ b/linphone-app/src/components/conferenceScheduler/ConferenceScheduler.cpp @@ -38,6 +38,8 @@ QSharedPointer ConferenceScheduler::create( QObject *parent ConferenceScheduler::ConferenceScheduler (QObject * parent) : QObject(parent){ App::getInstance()->getEngine()->setObjectOwnership(this, QQmlEngine::CppOwnership);// Avoid QML to destroy it when passing by Q_INVOKABLE mConferenceScheduler = CoreManager::getInstance()->getCore()->createConferenceScheduler(); + qDebug() << "Create Scheduler with this account : " << CoreManager::getInstance()->getCore()->getDefaultAccount()->getContactAddress()->asString().c_str(); + mConferenceScheduler->setAccount(CoreManager::getInstance()->getCore()->getDefaultAccount()); mConferenceSchedulerListener = std::make_shared(); connectTo(mConferenceSchedulerListener.get()); mConferenceScheduler->addListener(mConferenceSchedulerListener); diff --git a/linphone-app/src/components/timeline/TimelineListModel.cpp b/linphone-app/src/components/timeline/TimelineListModel.cpp index b400ed02a..65c3d6423 100644 --- a/linphone-app/src/components/timeline/TimelineListModel.cpp +++ b/linphone-app/src/components/timeline/TimelineListModel.cpp @@ -208,11 +208,9 @@ void TimelineListModel::updateTimelines () { // Clean terminated chat rooms and conferences from timeline. allChatRooms.remove_if([](std::shared_ptr chatRoom){ - bool toRemove = chatRoom->getState() == linphone::ChatRoom::State::Terminated || chatRoom->getState() == linphone::ChatRoom::State::Deleted - || (chatRoom->getConferenceAddress() && chatRoom->getHistoryEventsSize() == 0); - if( toRemove) + if( ChatRoomModel::isTerminated(chatRoom) && chatRoom->getUnreadMessagesCount() > 0) chatRoom->markAsRead(); - return toRemove; + return chatRoom->getConferenceAddress() && chatRoom->getHistoryEventsSize() == 0; }); //Remove no more chat rooms diff --git a/linphone-app/src/components/timeline/TimelineModel.cpp b/linphone-app/src/components/timeline/TimelineModel.cpp index 6edb8a680..f680a5a44 100644 --- a/linphone-app/src/components/timeline/TimelineModel.cpp +++ b/linphone-app/src/components/timeline/TimelineModel.cpp @@ -150,7 +150,7 @@ ChatRoomModel *TimelineModel::getChatRoomModel() const{ } void TimelineModel::setSelected(const bool& selected){ - if(selected != mSelected){ + if(mChatRoomModel && selected != mSelected){ mSelected = selected; if(mSelected){ qInfo() << "Chat room selected : Subject :" << mChatRoomModel->getSubject() diff --git a/linphone-app/ui/views/App/Dialog/NewConference.qml b/linphone-app/ui/views/App/Dialog/NewConference.qml index ed0eb47ea..3e47210da 100644 --- a/linphone-app/ui/views/App/Dialog/NewConference.qml +++ b/linphone-app/ui/views/App/Dialog/NewConference.qml @@ -362,6 +362,7 @@ DialogPlus { Layout.fillHeight: true Layout.rightMargin: 15 spacing:5 + visible: scheduledSwitch.checked Text{ Layout.fillWidth: true Layout.preferredHeight: 20 diff --git a/linphone-app/ui/views/App/Styles/Calls/CallFullscreenStyle.qml b/linphone-app/ui/views/App/Styles/Calls/CallFullscreenStyle.qml index 0d02d113e..22c33498c 100644 --- a/linphone-app/ui/views/App/Styles/Calls/CallFullscreenStyle.qml +++ b/linphone-app/ui/views/App/Styles/Calls/CallFullscreenStyle.qml @@ -118,7 +118,7 @@ QtObject { property color backgroundHiddenPartDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_bg_d', icon, 'me_d_b_inv_bg').color property color backgroundHiddenPartHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_bg_h', icon, 'me_h_b_inv_bg').color property color backgroundHiddenPartPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_bg_p', icon, 'me_p_b_inv_bg').color - property color foregroundHiddenPartNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_fg_n', icon, 'me_n_b_inv_fg').color + property color foregroundHiddenPartNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_fg_n', icon, 'me_h_b_inv_fg').color property color foregroundHiddenPartDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_fg_d', icon, 'me_d_b_inv_fg').color property color foregroundHiddenPartHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_fg_h', icon, 'me_h_b_inv_fg').color property color foregroundHiddenPartPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_fg_p', icon, 'me_p_b_inv_fg').color diff --git a/linphone-app/ui/views/App/Styles/Calls/CallStyle.qml b/linphone-app/ui/views/App/Styles/Calls/CallStyle.qml index f1313b992..47c1fb3a6 100644 --- a/linphone-app/ui/views/App/Styles/Calls/CallStyle.qml +++ b/linphone-app/ui/views/App/Styles/Calls/CallStyle.qml @@ -118,7 +118,7 @@ QtObject { property color backgroundHiddenPartDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_bg_d', icon, 'me_d_b_inv_bg').color property color backgroundHiddenPartHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_bg_h', icon, 'me_h_b_inv_bg').color property color backgroundHiddenPartPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_bg_p', icon, 'me_p_b_inv_bg').color - property color foregroundHiddenPartNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_fg_n', icon, 'me_n_b_inv_fg').color + property color foregroundHiddenPartNormalColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_fg_n', icon, 'me_h_b_inv_fg').color property color foregroundHiddenPartDisabledColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_fg_d', icon, 'me_d_b_inv_fg').color property color foregroundHiddenPartHoveredColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_fg_h', icon, 'me_h_b_inv_fg').color property color foregroundHiddenPartPressedColor : ColorsList.addImageColor(sectionName+'_'+name+'_hidden_fg_p', icon, 'me_p_b_inv_fg').color