diff --git a/assets/languages/en.ts b/assets/languages/en.ts
index 3bfa267bd..eb3afd7e7 100644
--- a/assets/languages/en.ts
+++ b/assets/languages/en.ts
@@ -1094,6 +1094,14 @@ your friend's SIP address or username.
cleanLogsDescription
Are you sure you want to remove all logs?
+
+ developerSettingsTitle
+ Developer settings
+
+
+ developerSettingsEnabledLabel
+ Developer settings enabled
+
SettingsAudio
diff --git a/assets/languages/fr_FR.ts b/assets/languages/fr_FR.ts
index b6a17e5c4..5abf989da 100644
--- a/assets/languages/fr_FR.ts
+++ b/assets/languages/fr_FR.ts
@@ -1092,6 +1092,14 @@ Cliquez ici : <a href="%1">%1</a>
cleanLogsDescription
Voulez-vous vraiment supprimer tous les logs ?
+
+ developerSettingsTitle
+ Mode développeur
+
+
+ developerSettingsEnabledLabel
+ Mode développeur activé
+
SettingsAudio
diff --git a/assets/languages/ru.ts b/assets/languages/ru.ts
index 310804f4b..83c6d0d67 100644
--- a/assets/languages/ru.ts
+++ b/assets/languages/ru.ts
@@ -1092,6 +1092,14 @@
cleanLogsDescription
Вы уверены, что хотите удалить все журналы?
+
+ developerSettingsTitle
+
+
+
+ developerSettingsEnabledLabel
+
+
SettingsAudio
diff --git a/assets/languages/tr.ts b/assets/languages/tr.ts
index 5504ccd97..caebb3e6b 100644
--- a/assets/languages/tr.ts
+++ b/assets/languages/tr.ts
@@ -1094,6 +1094,14 @@ arkadaşınızın SIP adresini veya kullanıcı adını girin.
cleanLogsDescription
Tüm günlükleri temizlemek istediğinize emin misiniz?
+
+ developerSettingsTitle
+
+
+
+ developerSettingsEnabledLabel
+
+
SettingsAudio
diff --git a/src/components/settings/SettingsModel.cpp b/src/components/settings/SettingsModel.cpp
index 08ea16e3e..182127ea8 100644
--- a/src/components/settings/SettingsModel.cpp
+++ b/src/components/settings/SettingsModel.cpp
@@ -22,17 +22,17 @@
#include
-#include "../../app/logger/Logger.hpp"
-#include "../../app/paths/Paths.hpp"
-#include "../../utils/Utils.hpp"
-#include "../core/CoreManager.hpp"
+#include "app/logger/Logger.hpp"
+#include "app/paths/Paths.hpp"
+#include "components/core/CoreManager.hpp"
+#include "utils/Utils.hpp"
#include "SettingsModel.hpp"
-using namespace std;
-
// =============================================================================
+using namespace std;
+
namespace {
constexpr char cDefaultRlsUri[] = "sips:rls@sip.linphone.org";
}
@@ -54,7 +54,7 @@ QStringList SettingsModel::getCaptureDevices () const {
for (const auto &device : core->getSoundDevices()) {
if (core->soundDeviceCanCapture(device))
- list << ::Utils::coreStringToAppString(device);
+ list << Utils::coreStringToAppString(device);
}
return list;
@@ -66,7 +66,7 @@ QStringList SettingsModel::getPlaybackDevices () const {
for (const auto &device : core->getSoundDevices()) {
if (core->soundDeviceCanPlayback(device))
- list << ::Utils::coreStringToAppString(device);
+ list << Utils::coreStringToAppString(device);
}
return list;
@@ -75,14 +75,14 @@ QStringList SettingsModel::getPlaybackDevices () const {
// -----------------------------------------------------------------------------
QString SettingsModel::getCaptureDevice () const {
- return ::Utils::coreStringToAppString(
+ return Utils::coreStringToAppString(
CoreManager::getInstance()->getCore()->getCaptureDevice()
);
}
void SettingsModel::setCaptureDevice (const QString &device) {
CoreManager::getInstance()->getCore()->setCaptureDevice(
- ::Utils::appStringToCoreString(device)
+ Utils::appStringToCoreString(device)
);
emit captureDeviceChanged(device);
}
@@ -90,14 +90,14 @@ void SettingsModel::setCaptureDevice (const QString &device) {
// -----------------------------------------------------------------------------
QString SettingsModel::getPlaybackDevice () const {
- return ::Utils::coreStringToAppString(
+ return Utils::coreStringToAppString(
CoreManager::getInstance()->getCore()->getPlaybackDevice()
);
}
void SettingsModel::setPlaybackDevice (const QString &device) {
CoreManager::getInstance()->getCore()->setPlaybackDevice(
- ::Utils::appStringToCoreString(device)
+ Utils::appStringToCoreString(device)
);
emit playbackDeviceChanged(device);
}
@@ -105,14 +105,14 @@ void SettingsModel::setPlaybackDevice (const QString &device) {
// -----------------------------------------------------------------------------
QString SettingsModel::getRingerDevice () const {
- return ::Utils::coreStringToAppString(
+ return Utils::coreStringToAppString(
CoreManager::getInstance()->getCore()->getRingerDevice()
);
}
void SettingsModel::setRingerDevice (const QString &device) {
CoreManager::getInstance()->getCore()->setRingerDevice(
- ::Utils::appStringToCoreString(device)
+ Utils::appStringToCoreString(device)
);
emit ringerDeviceChanged(device);
}
@@ -120,14 +120,14 @@ void SettingsModel::setRingerDevice (const QString &device) {
// -----------------------------------------------------------------------------
QString SettingsModel::getRingPath () const {
- return ::Utils::coreStringToAppString(CoreManager::getInstance()->getCore()->getRing());
+ return Utils::coreStringToAppString(CoreManager::getInstance()->getCore()->getRing());
}
void SettingsModel::setRingPath (const QString &path) {
QString cleanedPath = QDir::cleanPath(path);
CoreManager::getInstance()->getCore()->setRing(
- ::Utils::appStringToCoreString(cleanedPath)
+ Utils::appStringToCoreString(cleanedPath)
);
emit ringPathChanged(cleanedPath);
@@ -152,7 +152,7 @@ QStringList SettingsModel::getVideoDevices () const {
QStringList list;
for (const auto &device : CoreManager::getInstance()->getCore()->getVideoDevices())
- list << ::Utils::coreStringToAppString(device);
+ list << Utils::coreStringToAppString(device);
return list;
}
@@ -160,14 +160,14 @@ QStringList SettingsModel::getVideoDevices () const {
// -----------------------------------------------------------------------------
QString SettingsModel::getVideoDevice () const {
- return ::Utils::coreStringToAppString(
+ return Utils::coreStringToAppString(
CoreManager::getInstance()->getCore()->getVideoDevice()
);
}
void SettingsModel::setVideoDevice (const QString &device) {
CoreManager::getInstance()->getCore()->setVideoDevice(
- ::Utils::appStringToCoreString(device)
+ Utils::appStringToCoreString(device)
);
emit videoDeviceChanged(device);
}
@@ -175,14 +175,14 @@ void SettingsModel::setVideoDevice (const QString &device) {
// -----------------------------------------------------------------------------
QString SettingsModel::getVideoPreset () const {
- return ::Utils::coreStringToAppString(
+ return Utils::coreStringToAppString(
CoreManager::getInstance()->getCore()->getVideoPreset()
);
}
void SettingsModel::setVideoPreset (const QString &preset) {
CoreManager::getInstance()->getCore()->setVideoPreset(
- ::Utils::appStringToCoreString(preset)
+ Utils::appStringToCoreString(preset)
);
emit videoPresetChanged(preset);
}
@@ -213,7 +213,7 @@ static inline QVariantMap createMapFromVideoDefinition (const shared_ptrgetName());
+ map["name"] = Utils::coreStringToAppString(definition->getName());
map["width"] = definition->getWidth();
map["height"] = definition->getHeight();
map["__definition"] = QVariant::fromValue(definition);
@@ -291,14 +291,14 @@ void SettingsModel::setChatEnabled (bool status) {
}
QString SettingsModel::getFileTransferUrl () const {
- return ::Utils::coreStringToAppString(
+ return Utils::coreStringToAppString(
CoreManager::getInstance()->getCore()->getFileTransferServer()
);
}
void SettingsModel::setFileTransferUrl (const QString &url) {
CoreManager::getInstance()->getCore()->setFileTransferServer(
- ::Utils::appStringToCoreString(url)
+ Utils::appStringToCoreString(url)
);
emit fileTransferUrlChanged(url);
}
@@ -578,28 +578,28 @@ void SettingsModel::setTurnEnabled (bool status) {
// -----------------------------------------------------------------------------
QString SettingsModel::getStunServer () const {
- return ::Utils::coreStringToAppString(
+ return Utils::coreStringToAppString(
CoreManager::getInstance()->getCore()->getNatPolicy()->getStunServer()
);
}
void SettingsModel::setStunServer (const QString &stunServer) {
CoreManager::getInstance()->getCore()->getNatPolicy()->setStunServer(
- ::Utils::appStringToCoreString(stunServer)
+ Utils::appStringToCoreString(stunServer)
);
}
// -----------------------------------------------------------------------------
QString SettingsModel::getTurnUser () const {
- return ::Utils::coreStringToAppString(
+ return Utils::coreStringToAppString(
CoreManager::getInstance()->getCore()->getNatPolicy()->getStunServerUsername()
);
}
void SettingsModel::setTurnUser (const QString &user) {
CoreManager::getInstance()->getCore()->getNatPolicy()->setStunServerUsername(
- ::Utils::appStringToCoreString(user)
+ Utils::appStringToCoreString(user)
);
emit turnUserChanged(user);
@@ -612,7 +612,7 @@ QString SettingsModel::getTurnPassword () const {
shared_ptr natPolicy = core->getNatPolicy();
shared_ptr authInfo = core->findAuthInfo(natPolicy->getStunServerUsername(), "", "");
- return authInfo ? ::Utils::coreStringToAppString(authInfo->getPasswd()) : QString("");
+ return authInfo ? Utils::coreStringToAppString(authInfo->getPasswd()) : QString("");
}
void SettingsModel::setTurnPassword (const QString &password) {
@@ -624,12 +624,12 @@ void SettingsModel::setTurnPassword (const QString &password) {
if (authInfo) {
shared_ptr clonedAuthInfo = authInfo->clone();
- clonedAuthInfo->setPasswd(::Utils::appStringToCoreString(password));
+ clonedAuthInfo->setPasswd(Utils::appStringToCoreString(password));
core->removeAuthInfo(authInfo);
core->addAuthInfo(clonedAuthInfo);
} else {
- authInfo = linphone::Factory::get()->createAuthInfo(username, username, ::Utils::appStringToCoreString(password), "", "", "");
+ authInfo = linphone::Factory::get()->createAuthInfo(username, username, Utils::appStringToCoreString(password), "", "", "");
core->addAuthInfo(authInfo);
}
@@ -727,7 +727,7 @@ void SettingsModel::configureRlsUri (const shared_ptrgetString(UI_SECTION, "saved_screenshots_folder", Paths::getCapturesDirPath())
)
) + QDir::separator();
@@ -736,7 +736,7 @@ QString SettingsModel::getSavedScreenshotsFolder () const {
void SettingsModel::setSavedScreenshotsFolder (const QString &folder) {
QString cleanedFolder = QDir::cleanPath(folder) + QDir::separator();
- mConfig->setString(UI_SECTION, "saved_screenshots_folder", ::Utils::appStringToCoreString(cleanedFolder));
+ mConfig->setString(UI_SECTION, "saved_screenshots_folder", Utils::appStringToCoreString(cleanedFolder));
emit savedScreenshotsFolderChanged(cleanedFolder);
}
@@ -744,7 +744,7 @@ void SettingsModel::setSavedScreenshotsFolder (const QString &folder) {
QString SettingsModel::getSavedVideosFolder () const {
return QDir::cleanPath(
- ::Utils::coreStringToAppString(
+ Utils::coreStringToAppString(
mConfig->getString(UI_SECTION, "saved_videos_folder", Paths::getCapturesDirPath())
)
) + QDir::separator();
@@ -753,7 +753,7 @@ QString SettingsModel::getSavedVideosFolder () const {
void SettingsModel::setSavedVideosFolder (const QString &folder) {
QString cleanedFolder = QDir::cleanPath(folder) + QDir::separator();
- mConfig->setString(UI_SECTION, "saved_videos_folder", ::Utils::appStringToCoreString(cleanedFolder));
+ mConfig->setString(UI_SECTION, "saved_videos_folder", Utils::appStringToCoreString(cleanedFolder));
emit savedVideosFolderChanged(cleanedFolder);
}
@@ -761,7 +761,7 @@ void SettingsModel::setSavedVideosFolder (const QString &folder) {
QString SettingsModel::getDownloadFolder () const {
return QDir::cleanPath(
- ::Utils::coreStringToAppString(
+ Utils::coreStringToAppString(
mConfig->getString(UI_SECTION, "download_folder", Paths::getDownloadDirPath())
)
) + QDir::separator();
@@ -770,18 +770,18 @@ QString SettingsModel::getDownloadFolder () const {
void SettingsModel::setDownloadFolder (const QString &folder) {
QString cleanedFolder = QDir::cleanPath(folder) + QDir::separator();
- mConfig->setString(UI_SECTION, "download_folder", ::Utils::appStringToCoreString(cleanedFolder));
+ mConfig->setString(UI_SECTION, "download_folder", Utils::appStringToCoreString(cleanedFolder));
emit downloadFolderChanged(cleanedFolder);
}
// -----------------------------------------------------------------------------
QString SettingsModel::getRemoteProvisioning () const {
- return ::Utils::coreStringToAppString(CoreManager::getInstance()->getCore()->getProvisioningUri());
+ return Utils::coreStringToAppString(CoreManager::getInstance()->getCore()->getProvisioningUri());
}
void SettingsModel::setRemoteProvisioning (const QString &remoteProvisioning) {
- if (!CoreManager::getInstance()->getCore()->setProvisioningUri(::Utils::appStringToCoreString(remoteProvisioning)))
+ if (!CoreManager::getInstance()->getCore()->setProvisioningUri(Utils::appStringToCoreString(remoteProvisioning)))
emit remoteProvisioningChanged(remoteProvisioning);
else
emit remoteProvisioningNotChanged(remoteProvisioning);
@@ -809,7 +809,7 @@ QString SettingsModel::getLogsFolder () const {
void SettingsModel::setLogsFolder (const QString &folder) {
// Do not update path in linphone core.
// Just update the config file.
- mConfig->setString(UI_SECTION, "logs_folder", ::Utils::appStringToCoreString(folder));
+ mConfig->setString(UI_SECTION, "logs_folder", Utils::appStringToCoreString(folder));
emit logsFolderChanged(folder);
}
@@ -817,14 +817,14 @@ void SettingsModel::setLogsFolder (const QString &folder) {
// -----------------------------------------------------------------------------
QString SettingsModel::getLogsUploadUrl () const {
- return ::Utils::coreStringToAppString(
+ return Utils::coreStringToAppString(
CoreManager::getInstance()->getCore()->getLogCollectionUploadServerUrl()
);
}
void SettingsModel::setLogsUploadUrl (const QString &url) {
CoreManager::getInstance()->getCore()->setLogCollectionUploadServerUrl(
- ::Utils::appStringToCoreString(url)
+ Utils::appStringToCoreString(url)
);
emit logsUploadUrlChanged(getLogsUploadUrl());
@@ -845,20 +845,20 @@ void SettingsModel::setLogsEnabled (bool status) {
// ---------------------------------------------------------------------------
QString SettingsModel::getLogsEmail () const {
- return ::Utils::coreStringToAppString(
+ return Utils::coreStringToAppString(
mConfig->getString(UI_SECTION, "logs_email", "")
);
}
void SettingsModel::setLogsEmail (const QString &email) {
- mConfig->setString(UI_SECTION, "logs_email", ::Utils::appStringToCoreString(email));
+ mConfig->setString(UI_SECTION, "logs_email", Utils::appStringToCoreString(email));
emit logsEmailChanged(email);
}
// ---------------------------------------------------------------------------
QString SettingsModel::getLogsFolder (const shared_ptr &config) {
- return ::Utils::coreStringToAppString(config
+ return Utils::coreStringToAppString(config
? config->getString(UI_SECTION, "logs_folder", Paths::getLogsDirPath())
: Paths::getLogsDirPath());
}
@@ -866,3 +866,14 @@ QString SettingsModel::getLogsFolder (const shared_ptr &config
bool SettingsModel::getLogsEnabled (const shared_ptr &config) {
return config ? config->getInt(UI_SECTION, "logs_enabled", false) : false;
}
+
+// ---------------------------------------------------------------------------
+
+bool SettingsModel::getDeveloperSettingsEnabled () const {
+ return !!mConfig->getInt(UI_SECTION, "developer_settings", 0);
+}
+
+void SettingsModel::setDeveloperSettingsEnabled (bool status) {
+ mConfig->setInt(UI_SECTION, "developer_settings", status);
+ emit developerSettingsEnabledChanged(status);
+}
diff --git a/src/components/settings/SettingsModel.hpp b/src/components/settings/SettingsModel.hpp
index 3bdd20697..86a79f9c7 100644
--- a/src/components/settings/SettingsModel.hpp
+++ b/src/components/settings/SettingsModel.hpp
@@ -134,6 +134,8 @@ class SettingsModel : public QObject {
Q_PROPERTY(bool logsEnabled READ getLogsEnabled WRITE setLogsEnabled NOTIFY logsEnabledChanged);
Q_PROPERTY(QString logsEmail READ getLogsEmail WRITE setLogsEmail NOTIFY logsEmailChanged);
+ Q_PROPERTY(bool developerSettingsEnabled READ getDeveloperSettingsEnabled WRITE setDeveloperSettingsEnabled NOTIFY developerSettingsEnabledChanged);
+
public:
enum MediaEncryption {
MediaEncryptionNone = linphone::MediaEncryptionNone,
@@ -325,6 +327,11 @@ public:
static QString getLogsFolder (const std::shared_ptr &config);
static bool getLogsEnabled (const std::shared_ptr &config);
+ // ---------------------------------------------------------------------------
+
+ bool getDeveloperSettingsEnabled () const;
+ void setDeveloperSettingsEnabled (bool status);
+
static const std::string UI_SECTION;
// ===========================================================================
@@ -414,6 +421,8 @@ signals:
void logsEnabledChanged (bool status);
void logsEmailChanged (const QString &email);
+ bool developerSettingsEnabledChanged (bool status);
+
private:
std::shared_ptr mConfig;
};
diff --git a/ui/views/App/Settings/SettingsAdvanced.qml b/ui/views/App/Settings/SettingsAdvanced.qml
index 7153f3c7d..d19827f2c 100644
--- a/ui/views/App/Settings/SettingsAdvanced.qml
+++ b/ui/views/App/Settings/SettingsAdvanced.qml
@@ -95,9 +95,25 @@ TabContainer {
}
// -------------------------------------------------------------------------
- // Internal settings.
+ // Developer settings.
// -------------------------------------------------------------------------
- // Nothing for the moment.
+ Form {
+ title: qsTr('developerSettingsTitle')
+ visible: SettingsModel.developerSettingsEnabled
+ width: parent.width
+
+ FormLine {
+ FormGroup {
+ label: qsTr('developerSettingsEnabledLabel')
+
+ Switch {
+ checked: SettingsModel.developerSettingsEnabled
+
+ onClicked: SettingsModel.developerSettingsEnabled = !checked
+ }
+ }
+ }
+ }
}
}
diff --git a/ui/views/App/Settings/SettingsCallsChat.qml b/ui/views/App/Settings/SettingsCallsChat.qml
index 0d1a53913..22190e018 100644
--- a/ui/views/App/Settings/SettingsCallsChat.qml
+++ b/ui/views/App/Settings/SettingsCallsChat.qml
@@ -106,6 +106,8 @@ TabContainer {
width: parent.width
FormLine {
+ visible: SettingsModel.developerSettingsEnabled
+
FormGroup {
label: qsTr('chatEnabledLabel')
diff --git a/ui/views/App/Settings/SettingsWindow.qml b/ui/views/App/Settings/SettingsWindow.qml
index 75d7b54b0..8902914f2 100644
--- a/ui/views/App/Settings/SettingsWindow.qml
+++ b/ui/views/App/Settings/SettingsWindow.qml
@@ -4,6 +4,7 @@ import QtQuick.Layouts 1.3
import Common 1.0
import Common.Styles 1.0
+import Konami 1.0
import Linphone 1.0
import App.Styles 1.0
@@ -97,6 +98,17 @@ ApplicationWindow {
Layout.preferredHeight: TabButtonStyle.text.height
color: TabButtonStyle.backgroundColor.normal
+
+ MouseArea {
+ anchors.fill: parent
+
+ onClicked: konami.forceActiveFocus()
+
+ Konami {
+ id: konami
+ onTriggered: SettingsModel.developerSettingsEnabled = true
+ }
+ }
}
}