diff --git a/linphone-app/assets/languages/da.ts b/linphone-app/assets/languages/da.ts
index abae57a59..874968f25 100644
--- a/linphone-app/assets/languages/da.ts
+++ b/linphone-app/assets/languages/da.ts
@@ -993,9 +993,7 @@ Server url ikke konfigureret.
nDay
- '%1 day'
-----------
-'%1 days'
+ '%1 day'
diff --git a/linphone-app/assets/languages/de.ts b/linphone-app/assets/languages/de.ts
index 1c560c667..1d5684b8f 100644
--- a/linphone-app/assets/languages/de.ts
+++ b/linphone-app/assets/languages/de.ts
@@ -993,9 +993,7 @@ Server URL ist nicht konfiguriert.
nDay
- '%1 day'
-----------
-'%1 days'
+ '%1 day'
diff --git a/linphone-app/assets/languages/es.ts b/linphone-app/assets/languages/es.ts
index 1a8326e1c..292f1f4d1 100644
--- a/linphone-app/assets/languages/es.ts
+++ b/linphone-app/assets/languages/es.ts
@@ -983,9 +983,7 @@ URL del servidor no configurada.
nDay
- '%1 day'
-----------
-'%1 days'
+ '%1 day'
diff --git a/linphone-app/assets/languages/fr_FR.ts b/linphone-app/assets/languages/fr_FR.ts
index ce1853d30..047e34322 100644
--- a/linphone-app/assets/languages/fr_FR.ts
+++ b/linphone-app/assets/languages/fr_FR.ts
@@ -993,9 +993,7 @@ URL du serveur non configurée.
nDay
- '%1 day'
-----------
-'%1 days'
+ '%1 day'
%1 jour
%1 jours
diff --git a/linphone-app/assets/languages/hu.ts b/linphone-app/assets/languages/hu.ts
index 9b0c253ae..77976d609 100644
--- a/linphone-app/assets/languages/hu.ts
+++ b/linphone-app/assets/languages/hu.ts
@@ -986,9 +986,7 @@ A kiszolgáló URL-je nincs konfigurálva.
nDay
- '%1 day'
-----------
-'%1 days'
+ '%1 day'
%1 nap
diff --git a/linphone-app/assets/languages/it.ts b/linphone-app/assets/languages/it.ts
index 3e99add58..bfd59e0ec 100644
--- a/linphone-app/assets/languages/it.ts
+++ b/linphone-app/assets/languages/it.ts
@@ -993,9 +993,7 @@ URL del server non configurato.
nDay
- '%1 day'
-----------
-'%1 days'
+ '%1 day'
diff --git a/linphone-app/assets/languages/ja.ts b/linphone-app/assets/languages/ja.ts
index ac60ad87c..e4d3e6297 100644
--- a/linphone-app/assets/languages/ja.ts
+++ b/linphone-app/assets/languages/ja.ts
@@ -986,9 +986,7 @@
nDay
- '%1 day'
-----------
-'%1 days'
+ '%1 day'
diff --git a/linphone-app/assets/languages/lt.ts b/linphone-app/assets/languages/lt.ts
index ce7749bbd..402d9f457 100644
--- a/linphone-app/assets/languages/lt.ts
+++ b/linphone-app/assets/languages/lt.ts
@@ -1000,9 +1000,7 @@ Nesukonfigūruotas serverio url.
nDay
- '%1 day'
-----------
-'%1 days'
+ '%1 day'
diff --git a/linphone-app/assets/languages/pt_BR.ts b/linphone-app/assets/languages/pt_BR.ts
index 68ba06fb7..4f8f51080 100644
--- a/linphone-app/assets/languages/pt_BR.ts
+++ b/linphone-app/assets/languages/pt_BR.ts
@@ -993,9 +993,7 @@ URL do servidor não configurado.
nDay
- '%1 day'
-----------
-'%1 days'
+ '%1 day'
diff --git a/linphone-app/assets/languages/ru.ts b/linphone-app/assets/languages/ru.ts
index 92ff69baf..8b27f9c60 100644
--- a/linphone-app/assets/languages/ru.ts
+++ b/linphone-app/assets/languages/ru.ts
@@ -1000,9 +1000,7 @@
nDay
- '%1 day'
-----------
-'%1 days'
+ '%1 day'
diff --git a/linphone-app/assets/languages/sv.ts b/linphone-app/assets/languages/sv.ts
index 51b12e918..dcf8efbd7 100644
--- a/linphone-app/assets/languages/sv.ts
+++ b/linphone-app/assets/languages/sv.ts
@@ -993,9 +993,7 @@ Serverwebbadressen är inte konfigurerad.
nDay
- '%1 day'
-----------
-'%1 days'
+ '%1 day'
diff --git a/linphone-app/assets/languages/tr.ts b/linphone-app/assets/languages/tr.ts
index 9fcc80445..cf4430d5c 100644
--- a/linphone-app/assets/languages/tr.ts
+++ b/linphone-app/assets/languages/tr.ts
@@ -986,9 +986,7 @@ Sunucu url'si yapılandırılmadı.
nDay
- '%1 day'
-----------
-'%1 days'
+ '%1 day'
diff --git a/linphone-app/assets/languages/uk.ts b/linphone-app/assets/languages/uk.ts
index 3d4a26915..28cdda213 100644
--- a/linphone-app/assets/languages/uk.ts
+++ b/linphone-app/assets/languages/uk.ts
@@ -1000,9 +1000,7 @@
nDay
- '%1 day'
-----------
-'%1 days'
+ '%1 day'
diff --git a/linphone-app/assets/languages/zh_CN.ts b/linphone-app/assets/languages/zh_CN.ts
index 7a80f5f44..1cbee3e80 100644
--- a/linphone-app/assets/languages/zh_CN.ts
+++ b/linphone-app/assets/languages/zh_CN.ts
@@ -986,9 +986,7 @@
nDay
- '%1 day'
-----------
-'%1 days'
+ '%1 day'
diff --git a/linphone-app/src/components/chat-room/ChatRoomModel.cpp b/linphone-app/src/components/chat-room/ChatRoomModel.cpp
index b4aeed58b..2d8a65295 100644
--- a/linphone-app/src/components/chat-room/ChatRoomModel.cpp
+++ b/linphone-app/src/components/chat-room/ChatRoomModel.cpp
@@ -223,8 +223,13 @@ ChatRoomModel::ChatRoomModel (std::shared_ptr chatRoom, QObj
QObject::connect(coreManager->getContactsListModel(), &ContactsListModel::contactAdded, this, &ChatRoomModel::usernameChanged);
QObject::connect(coreManager->getContactsListModel(), &ContactsListModel::contactAdded, this, &ChatRoomModel::fullPeerAddressChanged);
+ QObject::connect(coreManager->getContactsListModel(), &ContactsListModel::contactAdded, this, &ChatRoomModel::avatarChanged);
QObject::connect(coreManager->getContactsListModel(), &ContactsListModel::contactRemoved, this, &ChatRoomModel::usernameChanged);
QObject::connect(coreManager->getContactsListModel(), &ContactsListModel::contactRemoved, this, &ChatRoomModel::fullPeerAddressChanged);
+ QObject::connect(coreManager->getContactsListModel(), &ContactsListModel::contactRemoved, this, &ChatRoomModel::avatarChanged);
+ QObject::connect(coreManager->getContactsListModel(), &ContactsListModel::contactUpdated, this, &ChatRoomModel::usernameChanged);
+ QObject::connect(coreManager->getContactsListModel(), &ContactsListModel::contactUpdated, this, &ChatRoomModel::fullPeerAddressChanged);
+ QObject::connect(coreManager->getContactsListModel(), &ContactsListModel::contactUpdated, this, &ChatRoomModel::avatarChanged);
//QObject::connect(this, &ChatRoomModel::messageCountReset, coreManager, &CoreManager::eventCountChanged );
@@ -1070,6 +1075,7 @@ void ChatRoomModel::onChatMessageSent(const std::shared_ptr
updateLastUpdateTime();
}
+// Called when the core have the participant (= exists)
void ChatRoomModel::onParticipantAdded(const std::shared_ptr & chatRoom, const std::shared_ptr & eventLog){
auto events = chatRoom->getHistoryEvents(0);
auto e = std::find(events.begin(), events.end(), eventLog);
diff --git a/linphone-app/src/components/chat-room/ChatRoomModel.hpp b/linphone-app/src/components/chat-room/ChatRoomModel.hpp
index 281c5b6fa..c8c56c627 100644
--- a/linphone-app/src/components/chat-room/ChatRoomModel.hpp
+++ b/linphone-app/src/components/chat-room/ChatRoomModel.hpp
@@ -287,7 +287,7 @@ signals:
void participantsChanged();
void subjectChanged(QString subject);
void usernameChanged();
- void avatarChanged(QString avatar);
+ void avatarChanged();
void presenceStatusChanged();
void lastUpdateTimeChanged();
void unreadMessagesCountChanged();
diff --git a/linphone-app/src/components/conference/ConferenceModel.cpp b/linphone-app/src/components/conference/ConferenceModel.cpp
index 36c5d8c02..dff2d0d7f 100644
--- a/linphone-app/src/components/conference/ConferenceModel.cpp
+++ b/linphone-app/src/components/conference/ConferenceModel.cpp
@@ -21,10 +21,12 @@
#include
#include
+#include "app/App.hpp"
#include "components/call/CallModel.hpp"
#include "components/calls/CallsListModel.hpp"
#include "components/core/CoreHandlers.hpp"
#include "components/core/CoreManager.hpp"
+#include "components/notifier/Notifier.hpp"
#include "components/settings/SettingsModel.hpp"
#include "utils/MediastreamerUtils.hpp"
#include "utils/Utils.hpp"
@@ -76,13 +78,11 @@ void ConferenceModel::startRecording () {
qInfo() << QStringLiteral("Start recording conference:") << this;
CoreManager *coreManager = CoreManager::getInstance();
- coreManager->getCore()->startConferenceRecording(
- Utils::appStringToCoreString(
+ mLastRecordFile =
QStringLiteral("%1%2.mkv")
.arg(coreManager->getSettingsModel()->getSavedCallsFolder())
- .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd_hh-mm-ss"))
- )
- );
+ .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd_hh-mm-ss"));
+ coreManager->getCore()->startConferenceRecording(Utils::appStringToCoreString(mLastRecordFile) );
mRecording = true;
emit recordingChanged(true);
@@ -95,7 +95,9 @@ void ConferenceModel::stopRecording () {
qInfo() << QStringLiteral("Stop recording conference:") << this;
mRecording = false;
+
CoreManager::getInstance()->getCore()->stopConferenceRecording();
+ App::getInstance()->getNotifier()->notifyRecordingCompleted(mLastRecordFile);
emit recordingChanged(false);
}
diff --git a/linphone-app/src/components/conference/ConferenceModel.hpp b/linphone-app/src/components/conference/ConferenceModel.hpp
index ec35ffa77..67096cec4 100644
--- a/linphone-app/src/components/conference/ConferenceModel.hpp
+++ b/linphone-app/src/components/conference/ConferenceModel.hpp
@@ -28,51 +28,52 @@
class CallModel;
class ConferenceModel : public QSortFilterProxyModel {
- Q_OBJECT;
-
- Q_PROPERTY(int count READ getCount NOTIFY countChanged);
-
- Q_PROPERTY(bool microMuted READ getMicroMuted WRITE setMicroMuted NOTIFY microMutedChanged);
- Q_PROPERTY(float microVu READ getMicroVu CONSTANT);
-
- Q_PROPERTY(bool recording READ getRecording NOTIFY recordingChanged);
- Q_PROPERTY(bool isInConf READ isInConference NOTIFY conferenceChanged);
-
+ Q_OBJECT;
+
+ Q_PROPERTY(int count READ getCount NOTIFY countChanged);
+
+ Q_PROPERTY(bool microMuted READ getMicroMuted WRITE setMicroMuted NOTIFY microMutedChanged);
+ Q_PROPERTY(float microVu READ getMicroVu CONSTANT);
+
+ Q_PROPERTY(bool recording READ getRecording NOTIFY recordingChanged);
+ Q_PROPERTY(bool isInConf READ isInConference NOTIFY conferenceChanged);
+
public:
- ConferenceModel (QObject *parent = Q_NULLPTR);
-
+ ConferenceModel (QObject *parent = Q_NULLPTR);
+
protected:
- bool filterAcceptsRow (int sourceRow, const QModelIndex &sourceParent) const override;
-
- Q_INVOKABLE void terminate ();
-
- Q_INVOKABLE void startRecording ();
- Q_INVOKABLE void stopRecording ();
-
- Q_INVOKABLE void join ();
- Q_INVOKABLE void leave ();
-
+ bool filterAcceptsRow (int sourceRow, const QModelIndex &sourceParent) const override;
+
+ Q_INVOKABLE void terminate ();
+
+ Q_INVOKABLE void startRecording ();
+ Q_INVOKABLE void stopRecording ();
+
+ Q_INVOKABLE void join ();
+ Q_INVOKABLE void leave ();
+
signals:
- void countChanged (int count);
-
- void microMutedChanged (bool status);
- void recordingChanged (bool status);
- void conferenceChanged ();
-
+ void countChanged (int count);
+
+ void microMutedChanged (bool status);
+ void recordingChanged (bool status);
+ void conferenceChanged ();
+
private:
- int getCount () const {
- return rowCount();
- }
-
- bool getMicroMuted () const;
- void setMicroMuted (bool status);
- float getMicroVu () const;
-
- bool isInConference () const;
-
- bool getRecording () const;
-
- bool mRecording = false;
+ int getCount () const {
+ return rowCount();
+ }
+
+ bool getMicroMuted () const;
+ void setMicroMuted (bool status);
+ float getMicroVu () const;
+
+ bool isInConference () const;
+
+ bool getRecording () const;
+
+ bool mRecording = false;
+ QString mLastRecordFile;
};
#endif // CONFERENCE_MODEL_H_
diff --git a/linphone-app/src/components/participant/ParticipantModel.cpp b/linphone-app/src/components/participant/ParticipantModel.cpp
index b59549029..8c6a7543f 100644
--- a/linphone-app/src/components/participant/ParticipantModel.cpp
+++ b/linphone-app/src/components/participant/ParticipantModel.cpp
@@ -132,3 +132,12 @@ std::shared_ptr ParticipantModel::getParticipantDevi
return mParticipantDevices;
}
+void ParticipantModel::startInvitation(const int& secs){
+ QTimer::singleShot(secs * 1000, this, &ParticipantModel::onEndOfInvitation);
+}
+
+void ParticipantModel::onEndOfInvitation(){
+ if( getInviting())
+ emit invitationTimeout(this);
+}
+
diff --git a/linphone-app/src/components/participant/ParticipantModel.hpp b/linphone-app/src/components/participant/ParticipantModel.hpp
index 129be7a03..c65b32355 100644
--- a/linphone-app/src/components/participant/ParticipantModel.hpp
+++ b/linphone-app/src/components/participant/ParticipantModel.hpp
@@ -68,11 +68,13 @@ public:
//linphone::ChatRoomSecurityLevel getSecurityLevel() const;
//std::shared_ptr findDevice(const std::shared_ptr & address) const;
+ void startInvitation(const int& secondes = 30); // Start a timer to remove the model if the invitation didn't ended after some time
public slots:
void onSecurityLevelChanged();
void onDeviceSecurityLevelChanged(std::shared_ptr device);
+ void onEndOfInvitation();
signals:
void securityLevelChanged();
@@ -83,6 +85,8 @@ signals:
void deviceCountChanged();
void invitingChanged();
+ void invitationTimeout(ParticipantModel* model);
+
// void contactUpdated ();
diff --git a/linphone-app/src/components/participant/ParticipantProxyModel.cpp b/linphone-app/src/components/participant/ParticipantProxyModel.cpp
index f6c41c56e..021c08c9e 100644
--- a/linphone-app/src/components/participant/ParticipantProxyModel.cpp
+++ b/linphone-app/src/components/participant/ParticipantProxyModel.cpp
@@ -83,28 +83,29 @@ void ParticipantProxyModel::setChatRoomModel(ChatRoomModel * chatRoomModel){
}
}
-void ParticipantProxyModel::add(const QString& address){
+void ParticipantProxyModel::addAddress(const QString& address){
ParticipantListModel * participantsModel = dynamic_cast(sourceModel());
if(!participantsModel->contains(address)){
std::shared_ptr participant = std::make_shared(nullptr);
participant->setSipAddress(address);
participantsModel->add(participant);
- if(mChatRoomModel && mChatRoomModel->getChatRoom())// Invite and wait for its creation
+ if(mChatRoomModel && mChatRoomModel->getChatRoom()){// Invite and wait for its creation
mChatRoomModel->getChatRoom()->addParticipant(Utils::interpretUrl(address));
+ connect(participant.get(), &ParticipantModel::invitationTimeout, this, &ParticipantProxyModel::removeModel);
+ participant->startInvitation();
+ }
emit countChanged();
emit addressAdded(address);
}
}
-void ParticipantProxyModel::remove(ParticipantModel * participant){
+void ParticipantProxyModel::removeModel(ParticipantModel * participant){
if(participant) {
QString sipAddress = participant->getSipAddress();
- if( !mChatRoomModel){
- ParticipantListModel * participantsModel = dynamic_cast(sourceModel());
- participantsModel->remove(participant);
- }else if(mChatRoomModel->getChatRoom() && participant->getParticipant() )
- mChatRoomModel->getChatRoom()->removeParticipant(participant->getParticipant());
- //dynamic_cast(sourceModel())->remove(participant);
+ if(mChatRoomModel && mChatRoomModel->getChatRoom() && participant->getParticipant() )
+ mChatRoomModel->getChatRoom()->removeParticipant(participant->getParticipant()); // Remove already added
+ ParticipantListModel * participantsModel = dynamic_cast(sourceModel());
+ participantsModel->remove(participant);
emit countChanged();
emit addressRemoved(sipAddress);
}
diff --git a/linphone-app/src/components/participant/ParticipantProxyModel.hpp b/linphone-app/src/components/participant/ParticipantProxyModel.hpp
index 37da1017e..bb24f550d 100644
--- a/linphone-app/src/components/participant/ParticipantProxyModel.hpp
+++ b/linphone-app/src/components/participant/ParticipantProxyModel.hpp
@@ -52,8 +52,8 @@ public:
void setChatRoomModel(ChatRoomModel * chatRoomModel);
- Q_INVOKABLE void add(const QString& address);
- Q_INVOKABLE void remove(ParticipantModel * participant);
+ Q_INVOKABLE void addAddress(const QString& address);
+ Q_INVOKABLE void removeModel(ParticipantModel * participant);
diff --git a/linphone-app/src/components/settings/SettingsModel.cpp b/linphone-app/src/components/settings/SettingsModel.cpp
index 4b607fef5..ec6d98276 100644
--- a/linphone-app/src/components/settings/SettingsModel.cpp
+++ b/linphone-app/src/components/settings/SettingsModel.cpp
@@ -612,7 +612,10 @@ void SettingsModel::setChatEnabled (bool status) {
// -----------------------------------------------------------------------------
bool SettingsModel::getHideEmptyChatRooms() const{
- return !!mConfig->getInt("misc", "hide_empty_chat_rooms", 0);
+ int defaultValue = 0;
+ if(!mConfig->hasEntry("misc", "hide_empty_chat_rooms"))// This step should be removed when this option comes from API and not directly from config file
+ mConfig->setInt("misc", "hide_empty_chat_rooms", defaultValue);
+ return !!mConfig->getInt("misc", "hide_empty_chat_rooms", defaultValue);
}
void SettingsModel::setHideEmptyChatRooms(const bool& status){
diff --git a/linphone-app/src/utils/Utils.cpp b/linphone-app/src/utils/Utils.cpp
index 8866ad6bc..bf024b9fb 100644
--- a/linphone-app/src/utils/Utils.cpp
+++ b/linphone-app/src/utils/Utils.cpp
@@ -93,6 +93,10 @@ QString Utils::toDateString(QDateTime date){
return date.toString("yyyy/MM/dd");
}
+QString Utils::getDisplayName(const QString& address){
+ return getDisplayName(interpretUrl(address));
+}
+
QImage Utils::getImage(const QString &pUri) {
QImage image(pUri);
if(image.isNull()){// Try to determine format from headers instead of using suffix
diff --git a/linphone-app/src/utils/Utils.hpp b/linphone-app/src/utils/Utils.hpp
index b4aa6b009..ade0bbec9 100644
--- a/linphone-app/src/utils/Utils.hpp
+++ b/linphone-app/src/utils/Utils.hpp
@@ -56,6 +56,7 @@ public:
Q_INVOKABLE static QString toDateTimeString(QDateTime date);
Q_INVOKABLE static QString toTimeString(QDateTime date);
Q_INVOKABLE static QString toDateString(QDateTime date);
+ Q_INVOKABLE static QString getDisplayName(const QString& address);
//----------------------------------------------------------------------------------
static inline QString coreStringToAppString (const std::string &str) {
diff --git a/linphone-app/ui/modules/Common/Menus/DropDownStaticMenuEntry.qml b/linphone-app/ui/modules/Common/Menus/DropDownStaticMenuEntry.qml
index 8023cadc4..b72369a89 100644
--- a/linphone-app/ui/modules/Common/Menus/DropDownStaticMenuEntry.qml
+++ b/linphone-app/ui/modules/Common/Menus/DropDownStaticMenuEntry.qml
@@ -20,6 +20,7 @@ Rectangle {
)
height: parent.entryHeight
width: parent.entryWidth
+ property int implicitWidth : text.implicitWidth + DropDownStaticMenuStyle.entry.leftMargin + DropDownStaticMenuStyle.entry.rightMargin + 5 // 5 = Elide width
Text {
id: text
diff --git a/linphone-app/ui/modules/Common/Tooltip/TooltipArea.qml b/linphone-app/ui/modules/Common/Tooltip/TooltipArea.qml
index 4bd7d56a9..ab0e886ed 100644
--- a/linphone-app/ui/modules/Common/Tooltip/TooltipArea.qml
+++ b/linphone-app/ui/modules/Common/Tooltip/TooltipArea.qml
@@ -18,6 +18,16 @@ MouseArea {
property int hoveringCursor : Qt.PointingHandCursor
property bool isClickable : false
+ function show(){
+ if(isClickable){
+ if(tooltip.delay>0) {
+ tooltip.oldDelay = tooltip.delay
+ tooltip.delay = 0
+ }
+ tooltip.show(text, -1);
+ }
+ }
+
anchors.fill:parent
hoverEnabled: true
@@ -34,13 +44,7 @@ MouseArea {
wheel.accepted = false
}
onClicked:{
- if(isClickable){
- if(tooltip.delay>0) {
- tooltip.oldDelay = tooltip.delay
- tooltip.delay = 0
- }
- tooltip.show(text, -1);
- }
+ show()
mouse.accepted = false
}
diff --git a/linphone-app/ui/modules/Linphone/Calls/Calls.js b/linphone-app/ui/modules/Linphone/Calls/Calls.js
index d2c9bb95f..f9915cb68 100644
--- a/linphone-app/ui/modules/Linphone/Calls/Calls.js
+++ b/linphone-app/ui/modules/Linphone/Calls/Calls.js
@@ -117,12 +117,12 @@ function getParams (call) {
if (call.pausedByUser) {
optActions.push({
handler: (function () { call.pausedByUser = false }),
- name: qsTr('resumeCall')
+ name: qsTr('resumeCall').toUpperCase()
})
} else if (Linphone.SettingsModel.callPauseEnabled) {
optActions.push({
handler: (function () { call.pausedByUser = true }),
- name: qsTr('callPause')
+ name: qsTr('callPause').toUpperCase()
})
}
@@ -130,25 +130,25 @@ function getParams (call) {
optActions.push({
handler: call.askForTransfer,
//: 'COMPLETE ATTENDED TRANSFER' : Title button, design is in uppercase.
- name: qsTr('attendedTransferComplete')
+ name: qsTr('attendedTransferComplete').toUpperCase()
})
}
else {
optActions.push({
handler: call.askForTransfer,
- name: qsTr('transferCall')
+ name: qsTr('transferCall').toUpperCase()
})
optActions.push({
handler: call.askForAttendedTransfer,
//: 'ATTENDED TRANSFER CALL' : Title button, design is in uppercase.
- name: qsTr('attendedTransferCall')
+ name: qsTr('attendedTransferCall').toUpperCase()
})
}
return {
actions: optActions.concat([{
handler: call.terminate,
- name: qsTr('terminateCall')
+ name: qsTr('terminateCall').toUpperCase()
}]),
component: callActions,
string: 'paused'
diff --git a/linphone-app/ui/modules/Linphone/Calls/Calls.qml b/linphone-app/ui/modules/Linphone/Calls/Calls.qml
index 5267b2496..3d5eb79cb 100644
--- a/linphone-app/ui/modules/Linphone/Calls/Calls.qml
+++ b/linphone-app/ui/modules/Linphone/Calls/Calls.qml
@@ -70,14 +70,15 @@ ListView {
relativeX: callControls.width
entryHeight: CallsStyle.entry.height
- entryWidth: CallsStyle.entry.width
+ entryWidth: maxWidth
+ property int maxWidth : CallsStyle.entry.width
Repeater {
model: params ? params.actions : []
DropDownStaticMenuEntry {
entryName: modelData.name
-
+ Component.onCompleted: if( menu.maxWidth < implicitWidth ) menu.maxWidth = implicitWidth
onClicked: {
menu.close()
params.actions[index].handler()
diff --git a/linphone-app/ui/modules/Linphone/Chat/ChatMenu.qml b/linphone-app/ui/modules/Linphone/Chat/ChatMenu.qml
index dfb0c0cfe..8b447f260 100644
--- a/linphone-app/ui/modules/Linphone/Chat/ChatMenu.qml
+++ b/linphone-app/ui/modules/Linphone/Chat/ChatMenu.qml
@@ -86,17 +86,15 @@ Item {
// Handle hovered link.
MouseArea {
- anchors.fill:parent
- // height: parent.height
- // width: rectangle.width
+ anchors.fill: parent
+ //height: messageMenu.height
+ //width: messageMenu.width
acceptedButtons: Qt.RightButton
propagateComposedEvents:true
cursorShape: parent.hoveredLink
? Qt.PointingHandCursor
: Qt.IBeamCursor
-
onClicked: mouse.button === Qt.RightButton && messageMenu.popup()
}
-
}
diff --git a/linphone-app/ui/modules/Linphone/Chat/FileMessage.qml b/linphone-app/ui/modules/Linphone/Chat/FileMessage.qml
index 4add61bd9..bb742eb30 100644
--- a/linphone-app/ui/modules/Linphone/Chat/FileMessage.qml
+++ b/linphone-app/ui/modules/Linphone/Chat/FileMessage.qml
@@ -39,7 +39,12 @@ Row {
delay:0
text:parent.username+'\n'+ (isOutgoing ? $chatEntry.toSipAddress : $chatEntry.fromSipAddress)
tooltipParent:mainRow
+ isClickable: true
+ onDoubleClicked: {
+ window.mainSearchBar.text = $chatEntry.fromSipAddress
+ }
}
+
}
}
@@ -74,6 +79,7 @@ Row {
//property ContentModel contentModel : ($chatEntry.getContent(0) ? $chatEntry.getContent(0) : null)
property ContentModel contentModel : $chatEntry.fileContentModel
property string thumbnail : contentModel ? contentModel.thumbnail : ''
+
color: isOutgoing
? ChatStyle.entry.message.outgoing.backgroundColor
: ChatStyle.entry.message.incoming.backgroundColor
@@ -186,70 +192,83 @@ Row {
// ---------------------------------------------------------------------
// Upload or file status.
// ---------------------------------------------------------------------
-
- Column {
+ Item{
Layout.fillWidth: true
Layout.fillHeight: true
-
- spacing: ChatStyle.entry.message.file.status.spacing
-
- Text {
- id: fileName
+ Column {
+ anchors.fill: parent
- color: isOutgoing
- ? ChatStyle.entry.message.outgoing.text.color
- : ChatStyle.entry.message.incoming.text.color
- elide: Text.ElideRight
+ spacing: ChatStyle.entry.message.file.status.spacing
- font {
- bold: true
- pointSize: isOutgoing
- ? ChatStyle.entry.message.outgoing.text.pointSize
- : ChatStyle.entry.message.incoming.text.pointSize
+ Text {
+ id: fileName
+
+ color: isOutgoing
+ ? ChatStyle.entry.message.outgoing.text.color
+ : ChatStyle.entry.message.incoming.text.color
+ elide: Text.ElideRight
+
+ font {
+ bold: true
+ pointSize: isOutgoing
+ ? ChatStyle.entry.message.outgoing.text.pointSize
+ : ChatStyle.entry.message.incoming.text.pointSize
+ }
+
+ text: (rectangle.contentModel ? rectangle.contentModel.name : '')
+ width: parent.width
}
- text: (rectangle.contentModel ? rectangle.contentModel.name : '')
- width: parent.width
- }
-
- ProgressBar {
- id: progressBar
-
- height: ChatStyle.entry.message.file.status.bar.height
- width: parent.width
-
- to: (rectangle.contentModel ? rectangle.contentModel.fileSize : 0)
- value: rectangle.contentModel ? rectangle.contentModel.fileOffset || 0 : 0
- visible: $chatEntry.state == LinphoneEnums.ChatMessageStateInProgress || $chatEntry.state == LinphoneEnums.ChatMessageStateFileTransferInProgress
- background: Rectangle {
- color: ChatStyle.entry.message.file.status.bar.background.color
- radius: ChatStyle.entry.message.file.status.bar.radius
- }
-
- contentItem: Item {
- Rectangle {
- color: ChatStyle.entry.message.file.status.bar.contentItem.color
- height: parent.height
- width: progressBar.visualPosition * parent.width
-
+ ProgressBar {
+ id: progressBar
+
+ height: ChatStyle.entry.message.file.status.bar.height
+ width: parent.width
+
+ to: (rectangle.contentModel ? rectangle.contentModel.fileSize : 0)
+ value: rectangle.contentModel ? rectangle.contentModel.fileOffset || 0 : 0
+ visible: $chatEntry.state == LinphoneEnums.ChatMessageStateInProgress || $chatEntry.state == LinphoneEnums.ChatMessageStateFileTransferInProgress
+ background: Rectangle {
+ color: ChatStyle.entry.message.file.status.bar.background.color
radius: ChatStyle.entry.message.file.status.bar.radius
}
+
+ contentItem: Item {
+ Rectangle {
+ color: ChatStyle.entry.message.file.status.bar.contentItem.color
+ height: parent.height
+ width: progressBar.visualPosition * parent.width
+
+ radius: ChatStyle.entry.message.file.status.bar.radius
+ }
+ }
+ }
+
+ Text {
+ color: fileName.color
+ elide: Text.ElideRight
+ font.pointSize: fileName.font.pointSize
+ text: {
+ if(rectangle.contentModel){
+ var fileSize = Utils.formatSize(rectangle.contentModel.fileSize)
+ return progressBar.visible
+ ? Utils.formatSize(rectangle.contentModel.fileOffset) + '/' + fileSize
+ : fileSize
+ }else
+ return ''
+ }
}
}
-
- Text {
- color: fileName.color
- elide: Text.ElideRight
- font.pointSize: fileName.font.pointSize
- text: {
- if(rectangle.contentModel){
- var fileSize = Utils.formatSize(rectangle.contentModel.fileSize)
- return progressBar.visible
- ? Utils.formatSize(rectangle.contentModel.fileOffset) + '/' + fileSize
- : fileSize
- }else
- return ''
- }
+ ChatMenu{
+ id: chatMenu
+ anchors.fill: parent
+ //height: parent.height
+ //width: parent.width
+
+ deliveryCount: deliveryLayout.model.count
+ onDeliveryStatusClicked: deliveryLayout.visible = !deliveryLayout.visible
+ onRemoveEntryRequested: removeEntry()
+ deliveryVisible: deliveryLayout.visible
}
}
}
@@ -283,25 +302,18 @@ Row {
rectangle.contentModel.openFile()
} else if (rectangle.contentModel && rectangle.contentModel.wasDownloaded) {
rectangle.contentModel.openFile(true)// Show directory
+ thumbnailProvider.state = ''
} else {
rectangle.contentModel.downloadFile()
+ thumbnailProvider.state = ''
}
}
-
onExited: thumbnailProvider.state = ''
onMouseXChanged: handleMouseMove.call(this, mouse)
onMouseYChanged: handleMouseMove.call(this, mouse)
}
- ChatMenu{
- id: chatMenu
- height: parent.height
- width: rectangle.width
-
- deliveryCount: deliveryLayout.model.count
- onDeliveryStatusClicked: deliveryLayout.visible = !deliveryLayout.visible
- onRemoveEntryRequested: removeEntry()
- deliveryVisible: deliveryLayout.visible
- }
+
+
Row{
id:ephemeralTimerRow
@@ -326,7 +338,7 @@ Row {
icon:'timer'
iconSize: 15
}
- }
+ }
}
ChatDeliveries{
diff --git a/linphone-app/ui/modules/Linphone/Contact/Contact.qml b/linphone-app/ui/modules/Linphone/Contact/Contact.qml
index cc191efec..7b60fd468 100644
--- a/linphone-app/ui/modules/Linphone/Contact/Contact.qml
+++ b/linphone-app/ui/modules/Linphone/Contact/Contact.qml
@@ -30,7 +30,7 @@ Rectangle {
property string username: (entry != undefined ?(entry.contactModel != undefined ? entry.contactModel.vcard.username
:entry.username != undefined ?entry.username:
- LinphoneUtils.getContactUsername(entry.sipAddress || entry.fullPeerAddress || entry.peerAddress || '')
+ UtilsCpp.getDisplayName(entry.sipAddress || entry.fullPeerAddress || entry.peerAddress || '')
):'')
// ---------------------------------------------------------------------------
@@ -53,8 +53,9 @@ Rectangle {
Layout.preferredWidth: ContactStyle.contentHeight
//image: _contact && _contact.vcard.avatar
- image: entry?(entry.contactModel?entry.contactModel.vcard.avatar:entry.avatar?entry.avatar: ''):''
-
+ image: entry?(entry.contactModel ? entry.contactModel.vcard.avatar
+ : entry.avatar ? entry.avatar : '')
+ :''
presenceLevel: entry?(entry.contactModel ? (entry.contactModel.presenceStatus >= 0 ? Presence.getPresenceLevel(entry.contactModel.presenceStatus) : -1)
: (entry.presenceStatus >= 0 ? Presence.getPresenceLevel(entry.presenceStatus) : -1)
)
diff --git a/linphone-app/ui/modules/Linphone/Timeline/Timeline.qml b/linphone-app/ui/modules/Linphone/Timeline/Timeline.qml
index 3543e65f9..f12178ae0 100644
--- a/linphone-app/ui/modules/Linphone/Timeline/Timeline.qml
+++ b/linphone-app/ui/modules/Linphone/Timeline/Timeline.qml
@@ -7,6 +7,8 @@ import Linphone 1.0
import Linphone.Styles 1.0
import ColorsList 1.0
+import UtilsCpp 1.0
+
import 'Timeline.js' as Logic
// =============================================================================
@@ -222,6 +224,7 @@ Rectangle {
width: parent ? parent.width : 0
Contact {
+ id: contactView
property bool isSelected: modelData != undefined && modelData.selected //view.currentIndex === index
anchors.fill: parent
@@ -240,16 +243,10 @@ Rectangle {
usernameColor: isSelected
? TimelineStyle.contact.username.color.selected
: TimelineStyle.contact.username.color.normal
-
- Loader {
- anchors.fill: parent
- sourceComponent: TooltipArea {
-
- //text: $timelineEntry.timestamp.toLocaleString(
- //Qt.locale(App.locale),
- //Locale.ShortFormat
- //)
- }
+ TooltipArea {
+ id: contactTooltip
+ text: UtilsCpp.toDateTimeString(modelData.chatRoomModel.lastUpdateTime)
+ isClickable: true
}
Icon{
icon: modelData.selected ? 'timer_light' : 'timer'
@@ -264,12 +261,19 @@ Rectangle {
MouseArea {
anchors.fill: parent
+ acceptedButtons: Qt.LeftButton | Qt.RightButton
+ propagateComposedEvents: true
+ preventStealing: false
onClicked: {
//timeline.model.unselectAll()
- if(modelData.selected)// Update selection
- timeline.entrySelected(modelData)
- modelData.selected = true
- view.currentIndex = index;
+ if(mouse.button == Qt.LeftButton){
+ if(modelData.selected)// Update selection
+ timeline.entrySelected(modelData)
+ modelData.selected = true
+ view.currentIndex = index;
+ }else{
+ contactTooltip.show()
+ }
}
}
diff --git a/linphone-app/ui/views/App/Calls/Conference.qml b/linphone-app/ui/views/App/Calls/Conference.qml
index d39ce7e82..5d6a5dec4 100644
--- a/linphone-app/ui/views/App/Calls/Conference.qml
+++ b/linphone-app/ui/views/App/Calls/Conference.qml
@@ -76,12 +76,13 @@ Rectangle {
id: rightActions
anchors.right: parent.right
- iconSize: CallStyle.header.iconSize
+ iconSize: CallStyle.header.buttonIconSize
ActionSwitch {
enabled: conference.conferenceModel.recording
icon: 'record'
useStates: false
+ visible: SettingsModel.callRecorderEnabled
onClicked: !enabled
? conference.conferenceModel.startRecording()
diff --git a/linphone-app/ui/views/App/Calls/IncallAvatar.qml b/linphone-app/ui/views/App/Calls/IncallAvatar.qml
index e1ed1f42e..520eae683 100644
--- a/linphone-app/ui/views/App/Calls/IncallAvatar.qml
+++ b/linphone-app/ui/views/App/Calls/IncallAvatar.qml
@@ -35,7 +35,7 @@ Avatar {
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
- text: '▐ ▌'
+ text: '❙❙'
textFormat: Text.RichText
visible: call.status === CallModel.CallStatusPaused
}
diff --git a/linphone-app/ui/views/App/Main/Conversation.qml b/linphone-app/ui/views/App/Main/Conversation.qml
index aaaaeacf8..8c0af2695 100644
--- a/linphone-app/ui/views/App/Main/Conversation.qml
+++ b/linphone-app/ui/views/App/Main/Conversation.qml
@@ -40,6 +40,18 @@ ColumnLayout {
property bool haveMoreThanOneParticipants: chatRoomModel ? chatRoomModel.participants.count > 2 : false
property bool haveLessThanMinParticipantsForCall: chatRoomModel ? chatRoomModel.participants.count <= 5 : false
+ function getPeerAddress() {
+ if(chatRoomModel) {
+ if(chatRoomModel.groupEnabled || chatRoomModel.isSecure()) {
+ return chatRoomModel.participants.addressesToString;
+ }else {
+ return chatRoomModel.sipAddress;
+ }
+ }else {
+ return conversation.fullPeerAddress || conversation.peerAddress || '';
+ }
+ }
+
// ---------------------------------------------------------------------------
spacing: 0
@@ -279,7 +291,7 @@ ColumnLayout {
visible: SettingsModel.contactsEnabled && !conversation.chatRoomModel.groupEnabled
onClicked: window.setView('ContactEdit', {
- sipAddress: conversation.peerAddress
+ sipAddress: conversation.getPeerAddress()
})
TooltipArea {
text: Logic.getEditTooltipText()
diff --git a/linphone-app/ui/views/App/Main/Dialogs/InfoChatRoom.qml b/linphone-app/ui/views/App/Main/Dialogs/InfoChatRoom.qml
index 4dc79b2bf..f91ac56e4 100644
--- a/linphone-app/ui/views/App/Main/Dialogs/InfoChatRoom.qml
+++ b/linphone-app/ui/views/App/Main/Dialogs/InfoChatRoom.qml
@@ -93,12 +93,12 @@ DialogPlus {
return !chatRoomModel.haveEncryption || UtilsCpp.hasCapability(entry.sipAddress, LinphoneEnums.FriendCapabilityLimeX3Dh);
},
handler: function (entry) {
- selectedParticipants.add(entry.sipAddress)
+ selectedParticipants.addAddress(entry.sipAddress)
},
}]
onEntryClicked: {
- selectedParticipants.add(entry)
+ selectedParticipants.addAddress(entry)
}
}
@@ -159,7 +159,7 @@ DialogPlus {
visible:true,
tooltipText: 'Remove this participant from the selection',
handler: function (entry) {
- selectedParticipants.remove(entry)
+ selectedParticipants.removeModel(entry)
// ++lastContacts.reloadCount
}
}]
diff --git a/linphone-app/ui/views/App/Main/Dialogs/NewChatRoom.qml b/linphone-app/ui/views/App/Main/Dialogs/NewChatRoom.qml
index 3fe22de5f..c83b09c53 100644
--- a/linphone-app/ui/views/App/Main/Dialogs/NewChatRoom.qml
+++ b/linphone-app/ui/views/App/Main/Dialogs/NewChatRoom.qml
@@ -256,7 +256,7 @@ DialogPlus {
anchors.fill:parent
visible:!mask.visible
onClicked: {
- selectedParticipants.add(modelData.sipAddress)
+ selectedParticipants.addAddress(modelData.sipAddress)
smartSearchBar.addAddressToIgnore(modelData.sipAddress);
++lastContacts.reloadCount
}
@@ -317,7 +317,7 @@ DialogPlus {
return isUsable(entry.sipAddress)
},
handler: function (entry) {
- selectedParticipants.add(entry.sipAddress)
+ selectedParticipants.addAddress(entry.sipAddress)
smartSearchBar.addAddressToIgnore(entry.sipAddress);
++lastContacts.reloadCount
},
@@ -325,7 +325,7 @@ DialogPlus {
onEntryClicked: {
if( isUsable(entry)){
- selectedParticipants.add(entry)
+ selectedParticipants.addAddress(entry)
smartSearchBar.addAddressToIgnore(entry);
++lastContacts.reloadCount
}
@@ -364,7 +364,7 @@ DialogPlus {
showInvitingIndicator: false
function removeParticipant(entry){
smartSearchBar.removeAddressToIgnore(entry.sipAddress)
- selectedParticipants.remove(entry)
+ selectedParticipants.removeModel(entry)
++lastContacts.reloadCount
}
diff --git a/linphone-app/ui/views/App/Styles/Calls/CallStyle.qml b/linphone-app/ui/views/App/Styles/Calls/CallStyle.qml
index 5029f6a75..da7a7f381 100644
--- a/linphone-app/ui/views/App/Styles/Calls/CallStyle.qml
+++ b/linphone-app/ui/views/App/Styles/Calls/CallStyle.qml
@@ -46,7 +46,7 @@ QtObject {
property QtObject text: QtObject {
property color color: ColorsList.add("Call_container_pause_text", "q").color
- property int pointSizeFactor: 10
+ property int pointSizeFactor: 5
}
}
}