From 11b12e2d763c1f984ab9f581b68c9fb686f05ddb Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Wed, 1 Mar 2017 10:48:30 +0100 Subject: [PATCH] feat(ui/views/App/Settings/SettingsCallsChat): supports media encryption --- .../src/components/settings/SettingsModel.cpp | 17 ++++++++++++++ .../src/components/settings/SettingsModel.hpp | 22 ++++++++++++++++++ linphone-desktop/ui/scripts/Utils/utils.js | 12 ++++++++++ .../views/App/Settings/SettingsCallsChat.qml | 23 +++++++++++++++---- 4 files changed, 70 insertions(+), 4 deletions(-) diff --git a/linphone-desktop/src/components/settings/SettingsModel.cpp b/linphone-desktop/src/components/settings/SettingsModel.cpp index dfe52920f..e0e4134d4 100644 --- a/linphone-desktop/src/components/settings/SettingsModel.cpp +++ b/linphone-desktop/src/components/settings/SettingsModel.cpp @@ -38,6 +38,23 @@ SettingsModel::SettingsModel (QObject *parent) : QObject(parent) { m_config = CoreManager::getInstance()->getCore()->getConfig(); } +// ============================================================================= +// Chat & calls. +// ============================================================================= + +SettingsModel::MediaEncryption SettingsModel::getMediaEncryption () const { + return static_cast( + CoreManager::getInstance()->getCore()->getMediaEncryption() + ); +} + +void SettingsModel::setMediaEncryption (MediaEncryption encryption) { + CoreManager::getInstance()->getCore()->setMediaEncryption( + static_cast(encryption) + ); + emit mediaEncryptionChanged(encryption); +} + // ============================================================================= // Network. // ============================================================================= diff --git a/linphone-desktop/src/components/settings/SettingsModel.hpp b/linphone-desktop/src/components/settings/SettingsModel.hpp index 6014fe2ad..800420f78 100644 --- a/linphone-desktop/src/components/settings/SettingsModel.hpp +++ b/linphone-desktop/src/components/settings/SettingsModel.hpp @@ -35,6 +35,10 @@ class SettingsModel : public QObject { // PROPERTIES. // =========================================================================== + // Chat & calls. ------------------------------------------------------------- + + Q_PROPERTY(MediaEncryption mediaEncryption READ getMediaEncryption WRITE setMediaEncryption NOTIFY mediaEncryptionChanged); + // Network. ------------------------------------------------------------------ Q_PROPERTY(bool useSipInfoForDtmfs READ getUseSipInfoForDtmfs WRITE setUseSipInfoForDtmfs NOTIFY dtmfsProtocolChanged); @@ -78,12 +82,26 @@ class SettingsModel : public QObject { Q_PROPERTY(QString savedVideosFolder READ getSavedVideosFolder WRITE setSavedVideosFolder NOTIFY savedVideosFolderChanged); public: + enum MediaEncryption { + MediaEncryptionDtls = linphone::MediaEncryptionDTLS, + MediaEncryptionNone = linphone::MediaEncryptionNone, + MediaEncryptionSrtp = linphone::MediaEncryptionSRTP, + MediaEncryptionZrtp = linphone::MediaEncryptionZRTP + }; + + Q_ENUM(MediaEncryption); + SettingsModel (QObject *parent = Q_NULLPTR); // =========================================================================== // METHODS. // =========================================================================== + // Chat & calls. ------------------------------------------------------------- + + MediaEncryption getMediaEncryption () const; + void setMediaEncryption (MediaEncryption encryption); + // Network. ------------------------------------------------------------------ bool getUseSipInfoForDtmfs () const; @@ -160,6 +178,10 @@ public: // =========================================================================== signals: + // Chat & calls. ------------------------------------------------------------- + + void mediaEncryptionChanged (MediaEncryption encryption); + // Network. ------------------------------------------------------------------ void dtmfsProtocolChanged (); diff --git a/linphone-desktop/ui/scripts/Utils/utils.js b/linphone-desktop/ui/scripts/Utils/utils.js index 0aae4811b..1212a7aa0 100644 --- a/linphone-desktop/ui/scripts/Utils/utils.js +++ b/linphone-desktop/ui/scripts/Utils/utils.js @@ -486,6 +486,18 @@ function includes (obj, value, startIndex) { // ----------------------------------------------------------------------------- +function invert (obj) { + var out = {} + + for (var key in obj) { + out[key] = obj[key] + } + + return out +} + +// ----------------------------------------------------------------------------- + function isArray (array) { return (array instanceof Array) } diff --git a/linphone-desktop/ui/views/App/Settings/SettingsCallsChat.qml b/linphone-desktop/ui/views/App/Settings/SettingsCallsChat.qml index 10bcc12da..6e0c0c3a1 100644 --- a/linphone-desktop/ui/views/App/Settings/SettingsCallsChat.qml +++ b/linphone-desktop/ui/views/App/Settings/SettingsCallsChat.qml @@ -1,6 +1,8 @@ import QtQuick 2.7 import Common 1.0 +import Linphone 1.0 +import Utils 1.0 import App.Styles 1.0 @@ -20,12 +22,25 @@ TabContainer { label: qsTr('encryptionLabel') ExclusiveButtons { + property var _resolveButton texts: [ - qsTr('noEncryption'), - 'SRTP', - 'ZRTP', - 'DTLS' + qsTr('noEncryption'), // 0. + 'SRTP', // 1. + 'ZRTP', // 2. + 'DTLS' // 3. ] + + Component.onCompleted: { + var map = _resolveButton = {} + map[SettingsModel.MediaEncryptionNone] = 0 + map[SettingsModel.MediaEncryptionSrtp] = 1 + map[SettingsModel.MediaEncryptionZrtp] = 2 + map[SettingsModel.MediaEncryptionDtls] = 3 + + selectedButton = Utils.invert(map)[SettingsModel.mediaEncryption] + } + + onClicked: SettingsModel.mediaEncryption = _resolveButton[button] } } }