mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-01-19 12:28:08 +00:00
Upgrade waiting room design and use it in place of outgoing calls and end calls.
Fix video requests in merged conference. Add a way to retrieve ConferenceInfoModel from a call. Remove obsolete (double) function to create secure chat room. Add logs on chat deletion and delete chat room if all entries are removed. Display conference subject in call history. Fix text in conferences filter. Update SDK.
This commit is contained in:
parent
4050d0d31f
commit
d8c461d93e
33 changed files with 290 additions and 306 deletions
|
|
@ -755,9 +755,7 @@ Server url ikke konfigureret.</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>conferencesEndedFilter</source>
|
||||
<extracomment>'Finished' : Filter conferences on end status.
|
||||
----------
|
||||
'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<extracomment>'Finished' : Filter conferences on end status.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
|
|
@ -770,6 +768,11 @@ Server url ikke konfigureret.</translation>
|
|||
<extracomment>'Conference URL has been copied' : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>conferencesInvitedFilter</source>
|
||||
<extracomment>'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ConfirmDialog</name>
|
||||
|
|
|
|||
|
|
@ -755,9 +755,7 @@ Server URL ist nicht konfiguriert.</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>conferencesEndedFilter</source>
|
||||
<extracomment>'Finished' : Filter conferences on end status.
|
||||
----------
|
||||
'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<extracomment>'Finished' : Filter conferences on end status.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
|
|
@ -770,6 +768,11 @@ Server URL ist nicht konfiguriert.</translation>
|
|||
<extracomment>'Conference URL has been copied' : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>conferencesInvitedFilter</source>
|
||||
<extracomment>'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ConfirmDialog</name>
|
||||
|
|
|
|||
|
|
@ -755,9 +755,7 @@ Server URL not configured.</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>conferencesEndedFilter</source>
|
||||
<extracomment>'Finished' : Filter conferences on end status.
|
||||
----------
|
||||
'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<extracomment>'Finished' : Filter conferences on end status.</extracomment>
|
||||
<translation>Finished</translation>
|
||||
</message>
|
||||
<message>
|
||||
|
|
@ -770,6 +768,11 @@ Server URL not configured.</translation>
|
|||
<extracomment>'Conference URL has been copied' : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
|
||||
<translation>Conference URL has been copied</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>conferencesInvitedFilter</source>
|
||||
<extracomment>'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<translation>Invitations</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ConfirmDialog</name>
|
||||
|
|
|
|||
|
|
@ -755,9 +755,7 @@ URL del servidor no configurada.</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>conferencesEndedFilter</source>
|
||||
<extracomment>'Finished' : Filter conferences on end status.
|
||||
----------
|
||||
'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<extracomment>'Finished' : Filter conferences on end status.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
|
|
@ -770,6 +768,11 @@ URL del servidor no configurada.</translation>
|
|||
<extracomment>'Conference URL has been copied' : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>conferencesInvitedFilter</source>
|
||||
<extracomment>'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ConfirmDialog</name>
|
||||
|
|
|
|||
|
|
@ -755,9 +755,7 @@ URL du serveur non configurée.</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>conferencesEndedFilter</source>
|
||||
<extracomment>'Finished' : Filter conferences on end status.
|
||||
----------
|
||||
'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<extracomment>'Finished' : Filter conferences on end status.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
|
|
@ -770,6 +768,11 @@ URL du serveur non configurée.</translation>
|
|||
<extracomment>'Conference URL has been copied' : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>conferencesInvitedFilter</source>
|
||||
<extracomment>'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ConfirmDialog</name>
|
||||
|
|
|
|||
|
|
@ -750,9 +750,7 @@ A kiszolgáló URL-je nincs konfigurálva.</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>conferencesEndedFilter</source>
|
||||
<extracomment>'Finished' : Filter conferences on end status.
|
||||
----------
|
||||
'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<extracomment>'Finished' : Filter conferences on end status.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
|
|
@ -765,6 +763,11 @@ A kiszolgáló URL-je nincs konfigurálva.</translation>
|
|||
<extracomment>'Conference URL has been copied' : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>conferencesInvitedFilter</source>
|
||||
<extracomment>'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ConfirmDialog</name>
|
||||
|
|
|
|||
|
|
@ -755,9 +755,7 @@ URL del server non configurato.</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>conferencesEndedFilter</source>
|
||||
<extracomment>'Finished' : Filter conferences on end status.
|
||||
----------
|
||||
'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<extracomment>'Finished' : Filter conferences on end status.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
|
|
@ -770,6 +768,11 @@ URL del server non configurato.</translation>
|
|||
<extracomment>'Conference URL has been copied' : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>conferencesInvitedFilter</source>
|
||||
<extracomment>'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ConfirmDialog</name>
|
||||
|
|
|
|||
|
|
@ -750,9 +750,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>conferencesEndedFilter</source>
|
||||
<extracomment>'Finished' : Filter conferences on end status.
|
||||
----------
|
||||
'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<extracomment>'Finished' : Filter conferences on end status.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
|
|
@ -765,6 +763,11 @@
|
|||
<extracomment>'Conference URL has been copied' : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>conferencesInvitedFilter</source>
|
||||
<extracomment>'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ConfirmDialog</name>
|
||||
|
|
|
|||
|
|
@ -760,9 +760,7 @@ Nesukonfigūruotas serverio url.</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>conferencesEndedFilter</source>
|
||||
<extracomment>'Finished' : Filter conferences on end status.
|
||||
----------
|
||||
'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<extracomment>'Finished' : Filter conferences on end status.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
|
|
@ -775,6 +773,11 @@ Nesukonfigūruotas serverio url.</translation>
|
|||
<extracomment>'Conference URL has been copied' : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>conferencesInvitedFilter</source>
|
||||
<extracomment>'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ConfirmDialog</name>
|
||||
|
|
|
|||
|
|
@ -755,9 +755,7 @@ URL do servidor não configurado.</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>conferencesEndedFilter</source>
|
||||
<extracomment>'Finished' : Filter conferences on end status.
|
||||
----------
|
||||
'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<extracomment>'Finished' : Filter conferences on end status.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
|
|
@ -770,6 +768,11 @@ URL do servidor não configurado.</translation>
|
|||
<extracomment>'Conference URL has been copied' : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>conferencesInvitedFilter</source>
|
||||
<extracomment>'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ConfirmDialog</name>
|
||||
|
|
|
|||
|
|
@ -760,9 +760,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>conferencesEndedFilter</source>
|
||||
<extracomment>'Finished' : Filter conferences on end status.
|
||||
----------
|
||||
'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<extracomment>'Finished' : Filter conferences on end status.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
|
|
@ -775,6 +773,11 @@
|
|||
<extracomment>'Conference URL has been copied' : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>conferencesInvitedFilter</source>
|
||||
<extracomment>'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ConfirmDialog</name>
|
||||
|
|
|
|||
|
|
@ -755,9 +755,7 @@ Serverwebbadressen är inte konfigurerad.</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>conferencesEndedFilter</source>
|
||||
<extracomment>'Finished' : Filter conferences on end status.
|
||||
----------
|
||||
'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<extracomment>'Finished' : Filter conferences on end status.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
|
|
@ -770,6 +768,11 @@ Serverwebbadressen är inte konfigurerad.</translation>
|
|||
<extracomment>'Conference URL has been copied' : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>conferencesInvitedFilter</source>
|
||||
<extracomment>'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ConfirmDialog</name>
|
||||
|
|
|
|||
|
|
@ -750,9 +750,7 @@ Sunucu url'si yapılandırılmadı.</translation>
|
|||
</message>
|
||||
<message>
|
||||
<source>conferencesEndedFilter</source>
|
||||
<extracomment>'Finished' : Filter conferences on end status.
|
||||
----------
|
||||
'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<extracomment>'Finished' : Filter conferences on end status.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
|
|
@ -765,6 +763,11 @@ Sunucu url'si yapılandırılmadı.</translation>
|
|||
<extracomment>'Conference URL has been copied' : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>conferencesInvitedFilter</source>
|
||||
<extracomment>'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ConfirmDialog</name>
|
||||
|
|
|
|||
|
|
@ -760,9 +760,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>conferencesEndedFilter</source>
|
||||
<extracomment>'Finished' : Filter conferences on end status.
|
||||
----------
|
||||
'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<extracomment>'Finished' : Filter conferences on end status.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
|
|
@ -775,6 +773,11 @@
|
|||
<extracomment>'Conference URL has been copied' : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>conferencesInvitedFilter</source>
|
||||
<extracomment>'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ConfirmDialog</name>
|
||||
|
|
|
|||
|
|
@ -750,9 +750,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>conferencesEndedFilter</source>
|
||||
<extracomment>'Finished' : Filter conferences on end status.
|
||||
----------
|
||||
'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<extracomment>'Finished' : Filter conferences on end status.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
|
|
@ -765,6 +763,11 @@
|
|||
<extracomment>'Conference URL has been copied' : Message text in a banner to warn the user that the µURL have been copied to the clipboard.</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>conferencesInvitedFilter</source>
|
||||
<extracomment>'Invitations' : Filter conferences on invited conferences (where we are not the organizer).</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ConfirmDialog</name>
|
||||
|
|
|
|||
|
|
@ -417,12 +417,10 @@
|
|||
<file>ui/views/App/Calls/Dialogs/CallSipAddress.qml</file>
|
||||
<file>ui/views/App/Calls/Dialogs/CallTransfer.qml</file>
|
||||
<file>ui/views/App/Calls/Dialogs/ConferenceManager.qml</file>
|
||||
<file>ui/views/App/Calls/EndedCall.qml</file>
|
||||
<file>ui/views/App/Calls/IncallFullscreenWindow.qml</file>
|
||||
<file>ui/views/App/Calls/Incall.js</file>
|
||||
<file>ui/views/App/Calls/Incall.qml</file>
|
||||
<file>ui/views/App/Calls/IncomingCall.qml</file>
|
||||
<file>ui/views/App/Calls/OutgoingCall.qml</file>
|
||||
<file>ui/views/App/Calls/WaitingRoom.qml</file>
|
||||
<file>ui/views/App/Calls/ZrtpTokenAuthentication.qml</file>
|
||||
<file>ui/views/App/Dialog/NewConference.qml</file>
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
#include "components/calls/CallsListModel.hpp"
|
||||
#include "components/chat-room/ChatRoomModel.hpp"
|
||||
#include "components/conference/ConferenceModel.hpp"
|
||||
#include "components/conferenceInfo/ConferenceInfoModel.hpp"
|
||||
#include "components/contact/ContactModel.hpp"
|
||||
#include "components/contacts/ContactsListModel.hpp"
|
||||
#include "components/core/CoreHandlers.hpp"
|
||||
|
|
@ -87,7 +88,11 @@ CallModel::CallModel (shared_ptr<linphone::Call> call){
|
|||
if(mCall) {
|
||||
mRemoteAddress = mCall->getRemoteAddress()->clone();
|
||||
if(mCall->getConference())
|
||||
mConferenceModel = ConferenceModel::create(mCall->getConference());
|
||||
mConferenceModel = ConferenceModel::create(mCall->getConference());
|
||||
auto conferenceInfo = CoreManager::getInstance()->getCore()->findConferenceInformationFromUri(getConferenceAddress());
|
||||
if( conferenceInfo ){
|
||||
mConferenceInfoModel = ConferenceInfoModel::create(conferenceInfo);
|
||||
}
|
||||
}
|
||||
mMagicSearch->getContactListFromFilterAsync(mRemoteAddress->getUsername(),mRemoteAddress->getDomain());
|
||||
}
|
||||
|
|
@ -115,6 +120,20 @@ QString CallModel::getFullPeerAddress () const {
|
|||
QString CallModel::getFullLocalAddress () const {
|
||||
return mCall ? Utils::coreStringToAppString(mCall->getCallLog()->getLocalAddress()->asString()) : "";
|
||||
}
|
||||
|
||||
std::shared_ptr<linphone::Address> CallModel::getConferenceAddress () const{
|
||||
std::shared_ptr<linphone::Address> conferenceAddress;
|
||||
if(mCall){
|
||||
auto remoteContact = mCall->getRemoteContact();
|
||||
|
||||
if (mCall->getDir() == linphone::Call::Dir::Incoming){
|
||||
if( remoteContact != "" )
|
||||
conferenceAddress = CoreManager::getInstance()->getCore()->interpretUrl(remoteContact);
|
||||
}else
|
||||
conferenceAddress = mCall->getRemoteAddress()->clone();
|
||||
}
|
||||
return conferenceAddress;
|
||||
}
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
ContactModel *CallModel::getContactModel() const{
|
||||
|
|
@ -165,6 +184,10 @@ ConferenceModel * CallModel::getConferenceModel(){
|
|||
return mConferenceModel.get();
|
||||
}
|
||||
|
||||
ConferenceInfoModel * CallModel::getConferenceInfoModel(){
|
||||
return mConferenceInfoModel.get();
|
||||
}
|
||||
|
||||
QSharedPointer<ConferenceModel> CallModel::getConferenceSharedModel(){
|
||||
if(mCall->getConference() && !mConferenceModel){
|
||||
mConferenceModel = ConferenceModel::create(mCall->getConference());
|
||||
|
|
@ -682,6 +705,7 @@ void CallModel::setCameraEnabled (bool status){
|
|||
|
||||
shared_ptr<linphone::CallParams> params = core->createCallParams(mCall);
|
||||
params->setVideoDirection(status ? linphone::MediaDirection::SendRecv : linphone::MediaDirection::RecvOnly);
|
||||
params->enableVideo(true);
|
||||
mCall->update(params);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
#include "utils/LinphoneEnums.hpp"
|
||||
|
||||
// =============================================================================
|
||||
class ConferenceInfoModel;
|
||||
class ConferenceModel;
|
||||
class ContactModel;
|
||||
class ChatRoomModel;
|
||||
|
|
@ -44,6 +45,7 @@ class CallModel : public QObject {
|
|||
Q_PROPERTY(ContactModel *contactModel READ getContactModel CONSTANT )
|
||||
Q_PROPERTY(ChatRoomModel * chatRoomModel READ getChatRoomModel NOTIFY chatRoomModelChanged)
|
||||
Q_PROPERTY(ConferenceModel * conferenceModel READ getConferenceModel NOTIFY conferenceModelChanged)
|
||||
Q_PROPERTY(ConferenceInfoModel * conferenceInfoModel READ getConferenceInfoModel NOTIFY conferenceModelInfoChanged)
|
||||
|
||||
Q_PROPERTY(CallStatus status READ getStatus NOTIFY statusChanged)
|
||||
Q_PROPERTY(QString callError READ getCallError NOTIFY callErrorChanged)
|
||||
|
|
@ -119,10 +121,12 @@ public:
|
|||
QString getLocalAddress () const;
|
||||
QString getFullPeerAddress () const;
|
||||
QString getFullLocalAddress () const;
|
||||
std::shared_ptr<linphone::Address> getConferenceAddress () const;
|
||||
|
||||
ContactModel *getContactModel() const;
|
||||
ChatRoomModel * getChatRoomModel() const;
|
||||
ConferenceModel* getConferenceModel();
|
||||
ConferenceInfoModel* getConferenceInfoModel();
|
||||
QSharedPointer<ConferenceModel> getConferenceSharedModel();
|
||||
|
||||
bool isInConference () const {
|
||||
|
|
@ -191,6 +195,7 @@ signals:
|
|||
void callIdChanged();
|
||||
void isInConferenceChanged (bool status);
|
||||
void conferenceModelChanged();
|
||||
void conferenceModelInfoChanged();
|
||||
void chatRoomModelChanged();
|
||||
void speakerMutedChanged (bool status);
|
||||
void microMutedChanged (bool status);
|
||||
|
|
@ -304,6 +309,7 @@ private:
|
|||
std::shared_ptr<SearchListener> mSearch;
|
||||
QString mTransferAddress;
|
||||
QSharedPointer<ConferenceModel> mConferenceModel;
|
||||
QSharedPointer<ConferenceInfoModel> mConferenceInfoModel;
|
||||
};
|
||||
|
||||
#endif // CALL_MODEL_H_
|
||||
|
|
|
|||
|
|
@ -202,36 +202,6 @@ void CallsListModel::launchVideoCall (const QString &sipAddress, const QString&
|
|||
CallModel::prepareTransfert(call, prepareTransfertAddress);
|
||||
}
|
||||
|
||||
ChatRoomModel* CallsListModel::launchSecureChat (const QString &sipAddress) const {
|
||||
CoreManager::getInstance()->getTimelineListModel()->mAutoSelectAfterCreation = true;
|
||||
shared_ptr<linphone::Core> core = CoreManager::getInstance()->getCore();
|
||||
shared_ptr<linphone::Address> address = core->interpretUrl(Utils::appStringToCoreString(sipAddress));
|
||||
if (!address)
|
||||
return nullptr;
|
||||
|
||||
std::shared_ptr<linphone::ChatRoomParams> params = core->createDefaultChatRoomParams();
|
||||
std::list <shared_ptr<linphone::Address> > participants;
|
||||
std::shared_ptr<const linphone::Address> localAddress;
|
||||
participants.push_back(address);
|
||||
params->enableEncryption(true);
|
||||
|
||||
params->setSubject("Dummy Subject");
|
||||
params->enableEncryption(true);
|
||||
|
||||
std::shared_ptr<linphone::ChatRoom> chatRoom = core->createChatRoom(params, localAddress, participants);
|
||||
if( chatRoom != nullptr){
|
||||
auto timelineList = CoreManager::getInstance()->getTimelineListModel();
|
||||
timelineList->update();
|
||||
auto timeline = timelineList->getTimeline(chatRoom, false);
|
||||
if(!timeline){
|
||||
timeline = timelineList->getTimeline(chatRoom, true);
|
||||
timelineList->add(timeline);
|
||||
}
|
||||
return timeline->getChatRoomModel();
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
QVariantMap CallsListModel::launchChat(const QString &sipAddress, const int& securityLevel) const{
|
||||
QVariantList participants;
|
||||
participants << sipAddress;
|
||||
|
|
@ -252,6 +222,7 @@ ChatRoomModel* CallsListModel::createChat (const QString &participantAddress) co
|
|||
|
||||
params->setBackend(linphone::ChatRoomBackend::Basic);
|
||||
|
||||
qInfo() << "Create ChatRoom with " <<participantAddress;
|
||||
std::shared_ptr<linphone::ChatRoom> chatRoom = core->createChatRoom(params, localAddress, participants);
|
||||
|
||||
if( chatRoom != nullptr){
|
||||
|
|
@ -287,7 +258,19 @@ bool CallsListModel::createSecureChat (const QString& subject, const QString &pa
|
|||
params->enableEncryption(true);
|
||||
params->enableGroup(true);
|
||||
|
||||
qInfo() << "Create secure ChatRoom: " << subject << ", from " << QString::fromStdString(localAddress->asString()) << " and with " <<participantAddress;;
|
||||
std::shared_ptr<linphone::ChatRoom> chatRoom = core->createChatRoom(params, localAddress, participants);
|
||||
// Still needed?
|
||||
// if( chatRoom != nullptr){
|
||||
// auto timelineList = CoreManager::getInstance()->getTimelineListModel();
|
||||
// timelineList->update();
|
||||
// auto timeline = timelineList->getTimeline(chatRoom, false);
|
||||
// if(!timeline){
|
||||
// timeline = timelineList->getTimeline(chatRoom, true);
|
||||
// timelineList->add(timeline);
|
||||
// }
|
||||
// return timeline->getChatRoomModel();
|
||||
// }
|
||||
return chatRoom != nullptr;
|
||||
}
|
||||
|
||||
|
|
@ -305,7 +288,7 @@ QVariantMap CallsListModel::createChatRoom(const QString& subject, const int& se
|
|||
QSharedPointer<TimelineModel> timeline;
|
||||
auto timelineList = CoreManager::getInstance()->getTimelineListModel();
|
||||
QString localAddressStr = (localAddress ? Utils::coreStringToAppString(localAddress->asStringUriOnly()) : "local");
|
||||
qInfo() << "ChatRoom creation of " << subject << " at " << securityLevel << " security, from " << localAddressStr << " and with " << participants;
|
||||
qInfo() << "Create ChatRoom: " << subject << " at " << securityLevel << " security, from " << localAddressStr << " and with " << participants;
|
||||
|
||||
std::shared_ptr<linphone::ChatRoomParams> params = core->createDefaultChatRoomParams();
|
||||
std::list <shared_ptr<linphone::Address> > chatRoomParticipants;
|
||||
|
|
|
|||
|
|
@ -47,7 +47,6 @@ public:
|
|||
Q_INVOKABLE void launchAudioCall (const QString &sipAddress, const QString& prepareTransfertAddress = "", const QHash<QString, QString> &headers = {}) const;
|
||||
Q_INVOKABLE void launchSecureAudioCall (const QString &sipAddress, LinphoneEnums::MediaEncryption encryption, const QHash<QString, QString> &headers = {}, const QString& prepareTransfertAddress = "") const;
|
||||
Q_INVOKABLE void launchVideoCall (const QString &sipAddress, const QString& prepareTransfertAddress = "", const bool& autoSelectAfterCreation = true, QVariantMap options = QVariantMap()) const;
|
||||
Q_INVOKABLE ChatRoomModel* launchSecureChat (const QString &sipAddress) const;
|
||||
Q_INVOKABLE QVariantMap launchChat(const QString &sipAddress, const int& securityLevel) const;
|
||||
Q_INVOKABLE ChatRoomModel* createChat (const QString &participantAddress) const;
|
||||
Q_INVOKABLE ChatRoomModel* createChat (const CallModel * ) const;
|
||||
|
|
@ -63,7 +62,7 @@ public:
|
|||
Q_INVOKABLE void terminateAllCalls () const;
|
||||
Q_INVOKABLE void terminateCall (const QString& sipAddress) const;
|
||||
|
||||
static std::list<std::shared_ptr<linphone::CallLog>> getCallHistory(const QString& peerAddress, const QString& localAddress);
|
||||
static std::list<std::shared_ptr<linphone::CallLog>> getCallHistory(const QString& peerAddress, const QString& localAddress);
|
||||
|
||||
signals:
|
||||
void callRunning (int index, CallModel *callModel);
|
||||
|
|
|
|||
|
|
@ -187,8 +187,10 @@ ChatRoomModel::~ChatRoomModel () {
|
|||
for(auto p : participants)
|
||||
participantsAddress.push_back(p->getAddress()->clone());
|
||||
auto internalChatRoom = CoreManager::getInstance()->getCore()->searchChatRoom(mChatRoom->getCurrentParams(), mChatRoom->getLocalAddress(), mChatRoom->getPeerAddress(), participantsAddress);
|
||||
if( internalChatRoom)
|
||||
if( internalChatRoom) {
|
||||
qInfo() << "Deleting ChatRoom : " << getSubject() << ", address=" << getFullPeerAddress();
|
||||
CoreManager::getInstance()->getCore()->deleteChatRoom(internalChatRoom);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -258,6 +260,7 @@ void ChatRoomModel::removeAllEntries () {
|
|||
if(haveLogs)
|
||||
emit CoreManager::getInstance()->callLogsCountChanged();
|
||||
}
|
||||
deleteChatRoom();
|
||||
endResetModel();
|
||||
emit allEntriesRemoved(mSelf.lock());
|
||||
emit focused();// Removing all entries is like having focus. Don't wait asynchronous events.
|
||||
|
|
@ -593,6 +596,7 @@ void ChatRoomModel::markAsToDelete(){
|
|||
}
|
||||
|
||||
void ChatRoomModel::deleteChatRoom(){
|
||||
qInfo() << "Deleting ChatRoom : " << getSubject() << ", address=" << getFullPeerAddress();
|
||||
CoreManager::getInstance()->getCore()->deleteChatRoom(mChatRoom);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -53,7 +53,10 @@ static inline void fillCallStartEntry (QVariantMap &dest, const shared_ptr<linph
|
|||
dest["isOutgoing"] = callLog->getDir() == linphone::Call::Dir::Outgoing;
|
||||
dest["status"] = static_cast<HistoryModel::CallStatus>(callLog->getStatus());
|
||||
dest["isStart"] = true;
|
||||
dest["sipAddress"] = Utils::coreStringToAppString(callLog->getRemoteAddress()->asString());
|
||||
if(callLog->wasConference()) {
|
||||
dest["title"] = QString::fromStdString(callLog->getConferenceInfo()->getSubject());
|
||||
}else
|
||||
dest["sipAddress"] = Utils::coreStringToAppString(callLog->getRemoteAddress()->asString());
|
||||
}
|
||||
|
||||
static inline void fillCallEndEntry (QVariantMap &dest, const shared_ptr<linphone::CallLog> &callLog) {
|
||||
|
|
@ -62,7 +65,11 @@ static inline void fillCallEndEntry (QVariantMap &dest, const shared_ptr<linphon
|
|||
dest["isOutgoing"] = callLog->getDir() == linphone::Call::Dir::Outgoing;
|
||||
dest["status"] = static_cast<HistoryModel::CallStatus>(callLog->getStatus());
|
||||
dest["isStart"] = false;
|
||||
dest["sipAddress"] = Utils::coreStringToAppString(callLog->getRemoteAddress()->asString());
|
||||
if(callLog->wasConference()) {
|
||||
dest["title"] = QString::fromStdString(callLog->getConferenceInfo()->getSubject());
|
||||
}else
|
||||
dest["sipAddress"] = Utils::coreStringToAppString(callLog->getRemoteAddress()->asString());
|
||||
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ Row {
|
|||
id: mainItem
|
||||
signal entryClicked(var entry)
|
||||
|
||||
property var _sipAddressObserver: SipAddressesModel.getSipAddressObserver($historyEntry.sipAddress, '')
|
||||
property var _sipAddressObserver: $historyEntry.sipAddress ? SipAddressesModel.getSipAddressObserver($historyEntry.sipAddress, '') : $historyEntry.title
|
||||
property QtObject iconData
|
||||
property string translation
|
||||
Component.onDestruction: _sipAddressObserver=null// Need to set it to null because of not calling destructor if not.
|
||||
|
|
@ -135,7 +135,7 @@ Row {
|
|||
pointSize: HistoryStyle.entry.event.text.pointSize
|
||||
}
|
||||
height: parent.height
|
||||
text: _sipAddressObserver ? UtilsCpp.getDisplayName(_sipAddressObserver.peerAddress) : ''
|
||||
text: _sipAddressObserver ? ( $historyEntry.sipAddress ? UtilsCpp.getDisplayName(_sipAddressObserver.peerAddress) : _sipAddressObserver) : ''
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
MouseArea{
|
||||
anchors.fill:parent
|
||||
|
|
|
|||
|
|
@ -41,14 +41,14 @@ Notification {
|
|||
//entry: notification.fullPeerAddress? SipAddressesModel.getSipAddressObserver(notification.fullPeerAddress, notification.fullLocalAddress): notification.timelineModel.getChatRoomModel()
|
||||
property var sipObserver: SipAddressesModel.getSipAddressObserver(notification.fullPeerAddress, notification.fullLocalAddress)
|
||||
showAuxData: !chatRoomModel.isOneToOne
|
||||
entry: ({
|
||||
sipAddress: sipObserver ? sipObserver.peerAddress : '',
|
||||
entry: sipObserver ? ({
|
||||
sipAddress: sipObserver.peerAddress,
|
||||
contactModel: sipObserver.contact,
|
||||
isOneToOne: chatRoomModel.isOneToOne,
|
||||
haveEncryption: chatRoomModel.haveEncryption,
|
||||
securityLevel: chatRoomModel.securityLevel,
|
||||
auxDataToShow: '- ' + chatRoomModel.subject+' -'
|
||||
})
|
||||
}): undefined
|
||||
Component.onDestruction: sipObserver=null// Need to set it to null because of not calling destructor if not.
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -410,11 +410,9 @@ Rectangle {
|
|||
onClicked: {
|
||||
if(mouse.button == Qt.LeftButton){
|
||||
timeline.entryClicked($modelData)
|
||||
if(view){
|
||||
if(view.updateSelectionModels)
|
||||
$modelData.selected = true
|
||||
view.currentIndex = index;
|
||||
}
|
||||
if(view.updateSelectionModels)
|
||||
$modelData.selected = true
|
||||
view.currentIndex = index;
|
||||
}else{
|
||||
contactTooltip.show()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,7 +61,6 @@ function openWaitingRoom(model){
|
|||
if(window.conferenceInfoModel)
|
||||
window.conferenceInfoModel = null;
|
||||
window.conferenceInfoModel = model
|
||||
console.log('set : '+window.conferenceInfoModel)
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
|
@ -78,18 +77,13 @@ function getContent (call, conferenceInfoModel) {
|
|||
if (status == null) {
|
||||
return calls.conferenceModel.count > 0 ? conference : null
|
||||
}
|
||||
|
||||
var CallModel = Linphone.CallModel
|
||||
if (status === CallModel.CallStatusIncoming) {
|
||||
return incomingCall
|
||||
}
|
||||
|
||||
if (status === CallModel.CallStatusOutgoing) {
|
||||
return outgoingCall
|
||||
}
|
||||
|
||||
if (status === CallModel.CallStatusEnded) {
|
||||
return endedCall
|
||||
window.conferenceInfoModel = call.conferenceInfoModel;
|
||||
if (status === CallModel.CallStatusOutgoing || status === CallModel.CallStatusEnded) {
|
||||
return waitingRoom
|
||||
}
|
||||
|
||||
if(call.isConference)
|
||||
|
|
|
|||
|
|
@ -191,14 +191,6 @@ Window {
|
|||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: outgoingCall
|
||||
|
||||
OutgoingCall {
|
||||
call: window.call
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: incall
|
||||
|
||||
|
|
@ -207,14 +199,6 @@ Window {
|
|||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: endedCall
|
||||
|
||||
EndedCall {
|
||||
call: window.call
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: chat
|
||||
|
||||
|
|
@ -256,6 +240,7 @@ Window {
|
|||
conferenceInfoModel: window.conferenceInfoModel
|
||||
onCancel: endOfProcess(0)
|
||||
enabled: window.visible
|
||||
callModel: window.call
|
||||
}
|
||||
}
|
||||
Component {
|
||||
|
|
|
|||
|
|
@ -1,95 +0,0 @@
|
|||
import QtQuick 2.7
|
||||
import QtQuick.Layouts 1.3
|
||||
|
||||
import Linphone 1.0
|
||||
import Utils 1.0
|
||||
import UtilsCpp 1.0
|
||||
|
||||
import App.Styles 1.0
|
||||
|
||||
import 'Incall.js' as Logic
|
||||
import 'qrc:/ui/scripts/Utils/utils.js' as Utils
|
||||
|
||||
// =============================================================================
|
||||
|
||||
Rectangle {
|
||||
id: endedCall
|
||||
|
||||
property var call
|
||||
|
||||
property var _sipAddressObserver: SipAddressesModel.getSipAddressObserver(call ? call.fullPeerAddress : '', call ? call.fullLocalAddress : '')
|
||||
|
||||
|
||||
Component.onDestruction: _sipAddressObserver=null// Need to set it to null because of not calling destructor if not.
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
color: CallStyle.backgroundColor
|
||||
|
||||
ColumnLayout {
|
||||
anchors {
|
||||
fill: parent
|
||||
topMargin: CallStyle.header.topMargin
|
||||
}
|
||||
|
||||
spacing: 0
|
||||
|
||||
ContactDescription {
|
||||
id: contactDescription
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: CallStyle.header.contactDescription.height
|
||||
|
||||
horizontalTextAlignment: Text.AlignHCenter
|
||||
sipAddress: _sipAddressObserver && _sipAddressObserver.peerAddress
|
||||
username: _sipAddressObserver ? UtilsCpp.getDisplayName(_sipAddressObserver.peerAddress) : ''
|
||||
}
|
||||
|
||||
Text {
|
||||
Layout.fillWidth: true
|
||||
|
||||
color: CallStyle.header.elapsedTime.color
|
||||
font.pointSize: CallStyle.header.elapsedTime.pointSize
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
|
||||
text: {
|
||||
var call = endedCall.call
|
||||
return call ? Utils.formatElapsedTime(call.duration) : 0
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
id: container
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
Layout.margins: CallStyle.container.margins
|
||||
|
||||
Avatar {
|
||||
anchors.centerIn: parent
|
||||
backgroundColor: CallStyle.container.avatar.backgroundColor
|
||||
image: _sipAddressObserver && _sipAddressObserver.contact && _sipAddressObserver.contact.vcard.avatar
|
||||
username: contactDescription.username
|
||||
|
||||
height: Utils.computeAvatarSize(container, CallStyle.container.avatar.maxSize)
|
||||
width: height
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: CallStyle.actionArea.height
|
||||
|
||||
Text {
|
||||
color: CallStyle.actionArea.callError.color
|
||||
font.pointSize: CallStyle.actionArea.callError.pointSize
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
width: parent.width
|
||||
|
||||
text: {
|
||||
var call = endedCall.call
|
||||
return call ? call.callError : ''
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,57 +0,0 @@
|
|||
import QtQuick 2.7
|
||||
import QtQuick.Layouts 1.3
|
||||
|
||||
import Common 1.0
|
||||
import Common.Styles 1.0
|
||||
|
||||
import App.Styles 1.0
|
||||
|
||||
// =============================================================================
|
||||
|
||||
AbstractStartingCall {
|
||||
showKeypad:true
|
||||
GridLayout {
|
||||
columns: parent.width < CallStyle.actionArea.lowWidth && call.videoEnabled ? 1 : 2
|
||||
rowSpacing: ActionBarStyle.spacing
|
||||
|
||||
anchors {
|
||||
left: parent.left
|
||||
leftMargin: CallStyle.actionArea.leftButtonsGroupMargin
|
||||
verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
ActionSwitch {
|
||||
isCustom: true
|
||||
backgroundRadius: 90
|
||||
colorSet: enabled ? CallStyle.buttons.microOn : CallStyle.buttons.microOff
|
||||
enabled: !call.microMuted
|
||||
|
||||
onClicked: call.microMuted = enabled
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
anchors.centerIn: parent
|
||||
height: CallStyle.actionArea.userVideo.height
|
||||
width: CallStyle.actionArea.userVideo.width
|
||||
|
||||
visible: call.videoEnabled
|
||||
}
|
||||
|
||||
ActionBar {
|
||||
anchors {
|
||||
right: parent.right
|
||||
rightMargin: CallStyle.actionArea.rightButtonsGroupMargin
|
||||
verticalCenter: parent.verticalCenter
|
||||
}
|
||||
iconSize: CallStyle.actionArea.iconSize
|
||||
|
||||
ActionButton {
|
||||
isCustom: true
|
||||
backgroundRadius: 90
|
||||
colorSet: CallStyle.buttons.hangup
|
||||
|
||||
onClicked: call.terminate()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -5,35 +5,73 @@ import QtGraphicalEffects 1.12
|
|||
import Common 1.0
|
||||
import Linphone 1.0
|
||||
import LinphoneEnums 1.0
|
||||
import UtilsCpp 1.0
|
||||
|
||||
import Common.Styles 1.0
|
||||
import App.Styles 1.0
|
||||
|
||||
|
||||
|
||||
|
||||
// =============================================================================
|
||||
|
||||
Rectangle {
|
||||
id: mainItem
|
||||
color: WaitingRoomStyle.backgroundColor
|
||||
property ConferenceInfoModel conferenceInfoModel
|
||||
|
||||
property CallModel callModel // Store the call for processing calling.
|
||||
property bool previewLoaderEnabled: true
|
||||
property var _sipAddressObserver: callModel ? SipAddressesModel.getSipAddressObserver(callModel.fullPeerAddress, callModel.fullLocalAddress) : undefined
|
||||
|
||||
signal cancel()
|
||||
|
||||
function close(){
|
||||
previewLoader.enabled = false
|
||||
mainItem.previewLoaderEnabled = false// Need it to close camera.
|
||||
}
|
||||
function open(){
|
||||
mainItem.previewLoaderEnabled = true
|
||||
}
|
||||
|
||||
//onCallModelChanged: callModel ? contentsStack.replace(callingComponent) : contentsStack.replace(cameraComponent)
|
||||
onCallModelChanged: contentsStack.flipped = !!callModel
|
||||
|
||||
Component.onDestruction: {mainItem.previewLoaderEnabled = false;_sipAddressObserver=null}// Need to set it to null because of not calling destructor if not.
|
||||
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
Text{
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
RowLayout{
|
||||
Layout.preferredHeight: 60
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
Layout.topMargin: 15
|
||||
text: conferenceInfoModel.subject
|
||||
color: WaitingRoomStyle.title.color
|
||||
font.pointSize: WaitingRoomStyle.title.pointSize
|
||||
horizontalAlignment: Qt.AlignCenter
|
||||
spacing: 20
|
||||
Text{
|
||||
Layout.preferredHeight: 60
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
text: mainItem.conferenceInfoModel ? mainItem.conferenceInfoModel.subject
|
||||
: (mainItem._sipAddressObserver ? UtilsCpp.getDisplayName(mainItem._sipAddressObserver.peerAddress) : '')
|
||||
color: WaitingRoomStyle.title.color
|
||||
font.pointSize: WaitingRoomStyle.title.pointSize
|
||||
horizontalAlignment: Qt.AlignHCenter
|
||||
verticalAlignment: Qt.AlignVCenter
|
||||
}
|
||||
BusyIndicator {
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
Layout.preferredHeight: WaitingRoomStyle.header.busyIndicator.height
|
||||
Layout.preferredWidth: WaitingRoomStyle.header.busyIndicator.width
|
||||
color: WaitingRoomStyle.header.busyIndicator.color
|
||||
visible: mainItem.callModel && mainItem.callModel.isOutgoing
|
||||
}
|
||||
}
|
||||
Text {
|
||||
Layout.fillWidth: true
|
||||
horizontalAlignment: Qt.AlignHCenter
|
||||
verticalAlignment: Qt.AlignVCenter
|
||||
|
||||
color: WaitingRoomStyle.callError.color
|
||||
font.pointSize: WaitingRoomStyle.callError.pointSize
|
||||
width: parent.width
|
||||
visible: mainItem.callModel && mainItem.callModel.callError
|
||||
text: mainItem.callModel && mainItem.callModel.callError ? mainItem.callModel.callError : ''
|
||||
}
|
||||
RowLayout{
|
||||
id: loader
|
||||
|
|
@ -42,22 +80,58 @@ Rectangle {
|
|||
Item{
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
CameraView{
|
||||
id: previewLoader
|
||||
showCloseButton: false
|
||||
|
||||
Flipable{
|
||||
id: contentsStack
|
||||
anchors.centerIn: parent
|
||||
height: Math.min( parent.height, parent.width)
|
||||
height: Math.min( loader.height, loader.width)
|
||||
width : height
|
||||
ActionButton{
|
||||
anchors.top: parent.top
|
||||
anchors.right: parent.right
|
||||
anchors.topMargin: 10
|
||||
anchors.rightMargin: 10
|
||||
isCustom: true
|
||||
backgroundRadius: width/2
|
||||
colorSet: WaitingRoomStyle.buttons.options
|
||||
toggled: mediaMenu.visible
|
||||
onClicked: mediaMenu.visible = !mediaMenu.visible
|
||||
property bool flipped: false
|
||||
|
||||
transform: Rotation {
|
||||
id: rotation
|
||||
origin.x: contentsStack.width/2
|
||||
origin.y: contentsStack.height/2
|
||||
axis.x: 0; axis.y: 1; axis.z: 0 // set axis.y to 1 to rotate around y-axis
|
||||
angle: 0 // the default angle
|
||||
}
|
||||
|
||||
states: State {
|
||||
name: "back"
|
||||
PropertyChanges { target: rotation; angle: 180 }
|
||||
when: contentsStack.flipped
|
||||
}
|
||||
|
||||
transitions: Transition {
|
||||
NumberAnimation { target: rotation; property: "angle"; duration: 500 }
|
||||
}
|
||||
|
||||
front: CameraView{
|
||||
id: previewLoader
|
||||
showCloseButton: false
|
||||
enabled: mainItem.previewLoaderEnabled
|
||||
height: Math.min( loader.height, loader.width)
|
||||
width : height
|
||||
ActionButton{
|
||||
anchors.top: parent.top
|
||||
anchors.right: parent.right
|
||||
anchors.topMargin: 10
|
||||
anchors.rightMargin: 10
|
||||
isCustom: true
|
||||
backgroundRadius: width/2
|
||||
colorSet: WaitingRoomStyle.buttons.options
|
||||
toggled: mediaMenu.visible
|
||||
onClicked: mediaMenu.visible = !mediaMenu.visible
|
||||
}
|
||||
}
|
||||
back: Avatar {
|
||||
id: avatar
|
||||
height: Math.min( loader.height, loader.width)
|
||||
width : height
|
||||
backgroundColor: WaitingRoomStyle.avatar.backgroundColor
|
||||
image: mainItem._sipAddressObserver && _sipAddressObserver.contact && mainItem._sipAddressObserver.contact.vcard.avatar
|
||||
username: mainItem.conferenceInfoModel ? mainItem.conferenceInfoModel.subject
|
||||
: (mainItem._sipAddressObserver ? UtilsCpp.getDisplayName(mainItem._sipAddressObserver.peerAddress) : '')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -85,6 +159,7 @@ Rectangle {
|
|||
Layout.bottomMargin: 25
|
||||
Layout.leftMargin: 25
|
||||
Layout.rightMargin: 25
|
||||
enabled: !mainItem.callModel
|
||||
Item{
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
|
@ -128,7 +203,7 @@ Rectangle {
|
|||
isCustom: true
|
||||
backgroundRadius: width/2
|
||||
colorSet: selectedMode == 0 ? WaitingRoomStyle.buttons.gridLayout :
|
||||
selectedMode == 1 ? WaitingRoomStyle.buttons.activeSpeakerLayout : WaitingRoomStyle.buttons.audioOnly
|
||||
selectedMode == 1 ? WaitingRoomStyle.buttons.activeSpeakerLayout : WaitingRoomStyle.buttons.audioOnly
|
||||
onClicked: selectedMode = (selectedMode + 1) % 3
|
||||
}
|
||||
}
|
||||
|
|
@ -146,21 +221,24 @@ Rectangle {
|
|||
capitalization: Font.AllUppercase
|
||||
|
||||
onClicked: {
|
||||
mainItem.close()
|
||||
mainItem.cancel()
|
||||
}
|
||||
mainItem.close()
|
||||
if(mainItem.callModel)
|
||||
callModel.terminate()
|
||||
mainItem.cancel()
|
||||
}
|
||||
}
|
||||
TextButtonB {
|
||||
//: 'Start' : Button label for starting the conference.
|
||||
text: qsTr('startButton')
|
||||
capitalization: Font.AllUppercase
|
||||
|
||||
onClicked: {mainItem.close(); CallsListModel.launchVideoCall(conferenceInfoModel.uri, '', 0,
|
||||
{ video: modeChoice.selectedMode != 2
|
||||
, camera: camera.cameraEnabled
|
||||
, micro: !micro.microMuted
|
||||
, audio: !speaker.speakerMuted
|
||||
, layout: (modeChoice.selectedMode % 2)}) }
|
||||
enabled: !mainItem.callModel
|
||||
|
||||
onClicked: {CallsListModel.launchVideoCall(conferenceInfoModel.uri, '', 0,
|
||||
{ video: modeChoice.selectedMode != 2
|
||||
, camera: camera.cameraEnabled
|
||||
, micro: !micro.microMuted
|
||||
, audio: !speaker.speakerMuted
|
||||
, layout: (modeChoice.selectedMode % 2)}) }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ Item{
|
|||
qsTr('conferencesScheduledFilter'),
|
||||
|
||||
//: 'Invitations' : Filter conferences on invited conferences (where we are not the organizer).
|
||||
qsTr('conferencesEndedFilter'),
|
||||
qsTr('conferencesInvitedFilter'),
|
||||
]
|
||||
capitalization: Font.AllUppercase
|
||||
selectedButton: mainItem.filterType
|
||||
|
|
|
|||
|
|
@ -125,6 +125,21 @@ QtObject {
|
|||
}
|
||||
}
|
||||
*/
|
||||
property QtObject callError: QtObject {
|
||||
property color color: ColorsList.add(sectionName+'_action_error', 'i').color
|
||||
property int pointSize: Units.dp * 12
|
||||
}
|
||||
property QtObject header: QtObject {
|
||||
property QtObject busyIndicator: QtObject {
|
||||
property color color: ColorsList.add(sectionName+'_header_busy', 'i').color
|
||||
property int height: 30
|
||||
property int width: 30
|
||||
}
|
||||
}
|
||||
property QtObject avatar: QtObject {
|
||||
property color backgroundColor: ColorsList.add(sectionName+'_container_avatar_bg', 'n').color
|
||||
property int maxSize: 300
|
||||
}
|
||||
// Button colors
|
||||
property QtObject buttons: QtObject {
|
||||
property QtObject microOn: QtObject {
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit be381f199d2c55dcfca959f65cbe589329b4bee7
|
||||
Subproject commit 9542d335ea525de66d7b5519bac4e1ba808caa3a
|
||||
Loading…
Add table
Reference in a new issue