From 2fce83fb43bb62477a7306f4a37130110c390984 Mon Sep 17 00:00:00 2001 From: Gaelle Braud Date: Mon, 7 Oct 2024 15:06:19 +0200 Subject: [PATCH] fix #LINQT-1304 microphone auto test slider --- Linphone/core/App.cpp | 1 + Linphone/core/call/CallCore.cpp | 24 +-- Linphone/core/setting/SettingsCore.cpp | 179 +++++++++--------- Linphone/core/setting/SettingsCore.hpp | 2 - Linphone/model/setting/SettingsModel.cpp | 17 +- Linphone/model/setting/SettingsModel.hpp | 8 +- Linphone/tool/AbstractObject.hpp | 5 +- .../Form/Settings/MultimediaSettings.qml | 26 ++- .../view/Page/Main/Meeting/MeetingPage.qml | 2 +- .../view/Page/Window/Call/CallsWindow.qml | 2 +- 10 files changed, 154 insertions(+), 112 deletions(-) diff --git a/Linphone/core/App.cpp b/Linphone/core/App.cpp index e88600bdc..8e92bc541 100644 --- a/Linphone/core/App.cpp +++ b/Linphone/core/App.cpp @@ -423,6 +423,7 @@ void App::initCore() { mLinphoneThread->getThreadId(), [this]() mutable { CoreModel::getInstance()->start(); + SettingsModel::create(); auto settings = SettingsCore::create(); QMetaObject::invokeMethod(App::getInstance()->thread(), [this, settings] { // QML diff --git a/Linphone/core/call/CallCore.cpp b/Linphone/core/call/CallCore.cpp index cc6342537..9cf0df033 100644 --- a/Linphone/core/call/CallCore.cpp +++ b/Linphone/core/call/CallCore.cpp @@ -22,6 +22,7 @@ #include "core/App.hpp" #include "core/conference/ConferenceCore.hpp" #include "core/conference/ConferenceGui.hpp" +#include "core/setting/SettingsCore.hpp" #include "model/tool/ToolModel.hpp" #include "tool/Utils.hpp" #include "tool/thread/SafeConnection.hpp" @@ -152,19 +153,14 @@ CallCore::CallCore(const std::shared_ptr &call) : QObject(nullpt mRecording = call->getParams() && call->getParams()->isRecording(); mRemoteRecording = call->getRemoteParams() && call->getRemoteParams()->isRecording(); + auto settingsModel = SettingsModel::getInstance(); mSpeakerVolumeGain = mCallModel->getSpeakerVolumeGain(); - // TODO : change this with settings value when settings done if (mSpeakerVolumeGain < 0) { - auto vol = CoreModel::getInstance()->getCore()->getPlaybackGainDb(); - call->setSpeakerVolumeGain(vol); - mSpeakerVolumeGain = vol; + mSpeakerVolumeGain = settingsModel->getPlaybackGain(); } mMicrophoneVolumeGain = call->getMicrophoneVolumeGain(); - // TODO : change this with settings value when settings done if (mMicrophoneVolumeGain < 0) { - auto vol = CoreModel::getInstance()->getCore()->getMicGainDb(); - call->setMicrophoneVolumeGain(vol); - mMicrophoneVolumeGain = vol; + mMicrophoneVolumeGain = settingsModel->getCaptureGain(); } mMicrophoneVolume = call->getRecordVolume(); mRecordable = mState == LinphoneEnums::CallState::StreamsRunning; @@ -268,21 +264,21 @@ void CallCore::setSelf(QSharedPointer me) { setState(LinphoneEnums::fromLinphone(state), Utils::coreStringToAppString(message)); }); double speakerVolume = mSpeakerVolumeGain; - double micVolume = mMicrophoneVolumeGain; + double micVolumeGain = mMicrophoneVolumeGain; if (state == linphone::Call::State::StreamsRunning) { speakerVolume = mCallModel->getSpeakerVolumeGain(); if (speakerVolume < 0) { speakerVolume = CoreModel::getInstance()->getCore()->getPlaybackGainDb(); } - micVolume = mCallModel->getMicrophoneVolumeGain(); - if (micVolume < 0) { - micVolume = CoreModel::getInstance()->getCore()->getMicGainDb(); + micVolumeGain = mCallModel->getMicrophoneVolumeGain(); + if (micVolumeGain < 0) { + micVolumeGain = CoreModel::getInstance()->getCore()->getMicGainDb(); } } auto subject = call->getConference() ? Utils::coreStringToAppString(call->getConference()->getSubject()) : ""; - mCallModelConnection->invokeToCore([this, state, speakerVolume, micVolume, subject]() { + mCallModelConnection->invokeToCore([this, state, speakerVolume, micVolumeGain, subject]() { setSpeakerVolumeGain(speakerVolume); - setMicrophoneVolumeGain(micVolume); + setMicrophoneVolumeGain(micVolumeGain); setRecordable(state == linphone::Call::State::StreamsRunning); setPaused(state == linphone::Call::State::Paused || state == linphone::Call::State::PausedByRemote); if (mConference) mConference->setSubject(subject); diff --git a/Linphone/core/setting/SettingsCore.cpp b/Linphone/core/setting/SettingsCore.cpp index c024afde2..16b8abf4b 100644 --- a/Linphone/core/setting/SettingsCore.cpp +++ b/Linphone/core/setting/SettingsCore.cpp @@ -40,61 +40,62 @@ QSharedPointer SettingsCore::create() { SettingsCore::SettingsCore(QObject *parent) : QObject(parent) { mustBeInLinphoneThread(getClassName()); - mSettingsModel = Utils::makeQObject_ptr(); + auto settingsModel = SettingsModel::getInstance(); + assert(settingsModel); // Security - mVfsEnabled = mSettingsModel->getVfsEnabled(); + mVfsEnabled = settingsModel->getVfsEnabled(); // Call - mVideoEnabled = mSettingsModel->getVideoEnabled(); - mEchoCancellationEnabled = mSettingsModel->getEchoCancellationEnabled(); - mAutomaticallyRecordCallsEnabled = mSettingsModel->getAutomaticallyRecordCallsEnabled(); + mVideoEnabled = settingsModel->getVideoEnabled(); + mEchoCancellationEnabled = settingsModel->getEchoCancellationEnabled(); + mAutomaticallyRecordCallsEnabled = settingsModel->getAutomaticallyRecordCallsEnabled(); // Audio - mCaptureDevices = mSettingsModel->getCaptureDevices(); - mPlaybackDevices = mSettingsModel->getPlaybackDevices(); - mRingerDevices = mSettingsModel->getRingerDevices(); - mCaptureDevice = mSettingsModel->getCaptureDevice(); - mPlaybackDevice = mSettingsModel->getPlaybackDevice(); + mCaptureDevices = settingsModel->getCaptureDevices(); + mPlaybackDevices = settingsModel->getPlaybackDevices(); + mRingerDevices = settingsModel->getRingerDevices(); + mCaptureDevice = settingsModel->getCaptureDevice(); + mPlaybackDevice = settingsModel->getPlaybackDevice(); - mCaptureGain = mSettingsModel->getCaptureGain(); - mPlaybackGain = mSettingsModel->getPlaybackGain(); + mCaptureGain = settingsModel->getCaptureGain(); + mPlaybackGain = settingsModel->getPlaybackGain(); // Video - mVideoDevice = mSettingsModel->getVideoDevice(); - mVideoDevices = mSettingsModel->getVideoDevices(); + mVideoDevice = settingsModel->getVideoDevice(); + mVideoDevices = settingsModel->getVideoDevices(); // Logs - mLogsEnabled = mSettingsModel->getLogsEnabled(); - mFullLogsEnabled = mSettingsModel->getFullLogsEnabled(); - mLogsFolder = mSettingsModel->getLogsFolder(); - mLogsEmail = mSettingsModel->getLogsEmail(); + mLogsEnabled = settingsModel->getLogsEnabled(); + mFullLogsEnabled = settingsModel->getFullLogsEnabled(); + mLogsFolder = settingsModel->getLogsFolder(); + mLogsEmail = settingsModel->getLogsEmail(); // DND - mDndEnabled = mSettingsModel->dndEnabled(); + mDndEnabled = settingsModel->dndEnabled(); // Ui - INIT_CORE_MEMBER(DisableChatFeature, mSettingsModel) - INIT_CORE_MEMBER(DisableMeetingsFeature, mSettingsModel) - INIT_CORE_MEMBER(DisableBroadcastFeature, mSettingsModel) - INIT_CORE_MEMBER(HideSettings, mSettingsModel) - INIT_CORE_MEMBER(HideAccountSettings, mSettingsModel) - INIT_CORE_MEMBER(DisableCallRecordings, mSettingsModel) - INIT_CORE_MEMBER(AssistantHideCreateAccount, mSettingsModel) - INIT_CORE_MEMBER(AssistantHideCreateAccount, mSettingsModel) - INIT_CORE_MEMBER(AssistantDisableQrCode, mSettingsModel) + INIT_CORE_MEMBER(DisableChatFeature, settingsModel) + INIT_CORE_MEMBER(DisableMeetingsFeature, settingsModel) + INIT_CORE_MEMBER(DisableBroadcastFeature, settingsModel) + INIT_CORE_MEMBER(HideSettings, settingsModel) + INIT_CORE_MEMBER(HideAccountSettings, settingsModel) + INIT_CORE_MEMBER(DisableCallRecordings, settingsModel) + INIT_CORE_MEMBER(AssistantHideCreateAccount, settingsModel) + INIT_CORE_MEMBER(AssistantHideCreateAccount, settingsModel) + INIT_CORE_MEMBER(AssistantDisableQrCode, settingsModel) - INIT_CORE_MEMBER(AssistantHideThirdPartyAccount, mSettingsModel) - INIT_CORE_MEMBER(OnlyDisplaySipUriUsername, mSettingsModel) - INIT_CORE_MEMBER(DarkModeAllowed, mSettingsModel) - INIT_CORE_MEMBER(MaxAccount, mSettingsModel) - INIT_CORE_MEMBER(AssistantGoDirectlyToThirdPartySipAccountLogin, mSettingsModel) - INIT_CORE_MEMBER(AssistantThirdPartySipAccountDomain, mSettingsModel) - INIT_CORE_MEMBER(AssistantThirdPartySipAccountTransport, mSettingsModel) - INIT_CORE_MEMBER(AutoStart, mSettingsModel) - INIT_CORE_MEMBER(ExitOnClose, mSettingsModel) - INIT_CORE_MEMBER(SyncLdapContacts, mSettingsModel) - INIT_CORE_MEMBER(Ipv6Enabled, mSettingsModel) + INIT_CORE_MEMBER(AssistantHideThirdPartyAccount, settingsModel) + INIT_CORE_MEMBER(OnlyDisplaySipUriUsername, settingsModel) + INIT_CORE_MEMBER(DarkModeAllowed, settingsModel) + INIT_CORE_MEMBER(MaxAccount, settingsModel) + INIT_CORE_MEMBER(AssistantGoDirectlyToThirdPartySipAccountLogin, settingsModel) + INIT_CORE_MEMBER(AssistantThirdPartySipAccountDomain, settingsModel) + INIT_CORE_MEMBER(AssistantThirdPartySipAccountTransport, settingsModel) + INIT_CORE_MEMBER(AutoStart, settingsModel) + INIT_CORE_MEMBER(ExitOnClose, settingsModel) + INIT_CORE_MEMBER(SyncLdapContacts, settingsModel) + INIT_CORE_MEMBER(Ipv6Enabled, settingsModel) } SettingsCore::~SettingsCore() { @@ -103,11 +104,12 @@ SettingsCore::~SettingsCore() { void SettingsCore::setSelf(QSharedPointer me) { mustBeInLinphoneThread(getClassName()); mSettingsModelConnection = QSharedPointer>( - new SafeConnection(me, mSettingsModel), &QObject::deleteLater); + new SafeConnection(me, SettingsModel::getInstance()), &QObject::deleteLater); // VFS mSettingsModelConnection->makeConnectToCore(&SettingsCore::setVfsEnabled, [this](const bool enabled) { - mSettingsModelConnection->invokeToModel([this, enabled]() { mSettingsModel->setVfsEnabled(enabled); }); + mSettingsModelConnection->invokeToModel( + [this, enabled]() { SettingsModel::getInstance()->setVfsEnabled(enabled); }); }); mSettingsModelConnection->makeConnectToModel(&SettingsModel::vfsEnabledChanged, [this](const bool enabled) { @@ -119,7 +121,8 @@ void SettingsCore::setSelf(QSharedPointer me) { // Video Calls mSettingsModelConnection->makeConnectToCore(&SettingsCore::setVideoEnabled, [this](const bool enabled) { - mSettingsModelConnection->invokeToModel([this, enabled]() { mSettingsModel->setVideoEnabled(enabled); }); + mSettingsModelConnection->invokeToModel( + [this, enabled]() { SettingsModel::getInstance()->setVideoEnabled(enabled); }); }); mSettingsModelConnection->makeConnectToModel(&SettingsModel::videoEnabledChanged, [this](const bool enabled) { @@ -132,7 +135,7 @@ void SettingsCore::setSelf(QSharedPointer me) { // Echo cancelling mSettingsModelConnection->makeConnectToCore(&SettingsCore::setEchoCancellationEnabled, [this](const bool enabled) { mSettingsModelConnection->invokeToModel( - [this, enabled]() { mSettingsModel->setEchoCancellationEnabled(enabled); }); + [this, enabled]() { SettingsModel::getInstance()->setEchoCancellationEnabled(enabled); }); }); mSettingsModelConnection->makeConnectToModel(&SettingsModel::echoCancellationEnabledChanged, @@ -144,12 +147,11 @@ void SettingsCore::setSelf(QSharedPointer me) { }); // Auto recording - mSettingsModelConnection->makeConnectToCore(&SettingsCore::setAutomaticallyRecordCallsEnabled, - [this](const bool enabled) { - mSettingsModelConnection->invokeToModel([this, enabled]() { - mSettingsModel->setAutomaticallyRecordCallsEnabled(enabled); - }); - }); + mSettingsModelConnection->makeConnectToCore( + &SettingsCore::setAutomaticallyRecordCallsEnabled, [this](const bool enabled) { + mSettingsModelConnection->invokeToModel( + [this, enabled]() { SettingsModel::getInstance()->setAutomaticallyRecordCallsEnabled(enabled); }); + }); mSettingsModelConnection->makeConnectToModel(&SettingsModel::automaticallyRecordCallsEnabledChanged, [this](const bool enabled) { mSettingsModelConnection->invokeToCore([this, enabled]() { @@ -160,7 +162,7 @@ void SettingsCore::setSelf(QSharedPointer me) { // Audio device(s) mSettingsModelConnection->makeConnectToCore(&SettingsCore::lSetCaptureDevice, [this](const QString id) { - mSettingsModelConnection->invokeToModel([this, id]() { mSettingsModel->setCaptureDevice(id); }); + mSettingsModelConnection->invokeToModel([this, id]() { SettingsModel::getInstance()->setCaptureDevice(id); }); }); mSettingsModelConnection->makeConnectToModel(&SettingsModel::captureDeviceChanged, [this](const QString device) { mSettingsModelConnection->invokeToCore([this, device]() { @@ -170,7 +172,7 @@ void SettingsCore::setSelf(QSharedPointer me) { }); mSettingsModelConnection->makeConnectToCore(&SettingsCore::lSetPlaybackDevice, [this](const QString id) { - mSettingsModelConnection->invokeToModel([this, id]() { mSettingsModel->setPlaybackDevice(id); }); + mSettingsModelConnection->invokeToModel([this, id]() { SettingsModel::getInstance()->setPlaybackDevice(id); }); }); mSettingsModelConnection->makeConnectToModel(&SettingsModel::playbackDeviceChanged, [this](const QString device) { @@ -180,7 +182,7 @@ void SettingsCore::setSelf(QSharedPointer me) { }); }); mSettingsModelConnection->makeConnectToCore(&SettingsCore::lSetRingerDevice, [this](const QString id) { - mSettingsModelConnection->invokeToModel([this, id]() { mSettingsModel->setRingerDevice(id); }); + mSettingsModelConnection->invokeToModel([this, id]() { SettingsModel::getInstance()->setRingerDevice(id); }); }); mSettingsModelConnection->makeConnectToModel(&SettingsModel::ringerDeviceChanged, [this](const QString device) { @@ -191,7 +193,8 @@ void SettingsCore::setSelf(QSharedPointer me) { }); mSettingsModelConnection->makeConnectToCore(&SettingsCore::lSetPlaybackGain, [this](const float value) { - mSettingsModelConnection->invokeToModel([this, value]() { mSettingsModel->setPlaybackGain(value); }); + mSettingsModelConnection->invokeToModel( + [this, value]() { SettingsModel::getInstance()->setPlaybackGain(value); }); }); mSettingsModelConnection->makeConnectToModel(&SettingsModel::playbackGainChanged, [this](const float value) { @@ -202,7 +205,8 @@ void SettingsCore::setSelf(QSharedPointer me) { }); mSettingsModelConnection->makeConnectToCore(&SettingsCore::lSetCaptureGain, [this](const float value) { - mSettingsModelConnection->invokeToModel([this, value]() { mSettingsModel->setCaptureGain(value); }); + mSettingsModelConnection->invokeToModel( + [this, value]() { SettingsModel::getInstance()->setCaptureGain(value); }); }); mSettingsModelConnection->makeConnectToModel(&SettingsModel::captureGainChanged, [this](const float value) { @@ -241,7 +245,7 @@ void SettingsCore::setSelf(QSharedPointer me) { // Video device(s) mSettingsModelConnection->makeConnectToCore(&SettingsCore::lSetVideoDevice, [this](const QString id) { - mSettingsModelConnection->invokeToModel([this, id]() { mSettingsModel->setVideoDevice(id); }); + mSettingsModelConnection->invokeToModel([this, id]() { SettingsModel::getInstance()->setVideoDevice(id); }); }); mSettingsModelConnection->makeConnectToModel(&SettingsModel::videoDeviceChanged, [this](const QString device) { @@ -261,7 +265,8 @@ void SettingsCore::setSelf(QSharedPointer me) { // Logs mSettingsModelConnection->makeConnectToCore(&SettingsCore::setLogsEnabled, [this](const bool status) { - mSettingsModelConnection->invokeToModel([this, status]() { mSettingsModel->setLogsEnabled(status); }); + mSettingsModelConnection->invokeToModel( + [this, status]() { SettingsModel::getInstance()->setLogsEnabled(status); }); }); mSettingsModelConnection->makeConnectToModel(&SettingsModel::logsEnabledChanged, [this](const bool status) { @@ -272,7 +277,8 @@ void SettingsCore::setSelf(QSharedPointer me) { }); mSettingsModelConnection->makeConnectToCore(&SettingsCore::setFullLogsEnabled, [this](const bool status) { - mSettingsModelConnection->invokeToModel([this, status]() { mSettingsModel->setFullLogsEnabled(status); }); + mSettingsModelConnection->invokeToModel( + [this, status]() { SettingsModel::getInstance()->setFullLogsEnabled(status); }); }); mSettingsModelConnection->makeConnectToModel(&SettingsModel::fullLogsEnabledChanged, [this](const bool status) { @@ -284,7 +290,7 @@ void SettingsCore::setSelf(QSharedPointer me) { // DND mSettingsModelConnection->makeConnectToCore(&SettingsCore::lEnableDnd, [this](const bool value) { - mSettingsModelConnection->invokeToModel([this, value]() { mSettingsModel->enableDnd(value); }); + mSettingsModelConnection->invokeToModel([this, value]() { SettingsModel::getInstance()->enableDnd(value); }); }); mSettingsModelConnection->makeConnectToModel(&SettingsModel::dndChanged, [this](const bool value) { mSettingsModelConnection->invokeToCore([this, value]() { @@ -293,46 +299,48 @@ void SettingsCore::setSelf(QSharedPointer me) { }); }); - DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, mSettingsModel, bool, + auto settingsModel = SettingsModel::getInstance(); + + DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool, disableChatFeature, DisableChatFeature) - DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, mSettingsModel, bool, + DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool, disableMeetingsFeature, DisableMeetingsFeature) - DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, mSettingsModel, bool, + DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool, disableBroadcastFeature, DisableBroadcastFeature) - DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, mSettingsModel, bool, - hideSettings, HideSettings) - DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, mSettingsModel, bool, + DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool, hideSettings, + HideSettings) + DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool, hideAccountSettings, HideAccountSettings) - DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, mSettingsModel, bool, + DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool, disableCallRecordings, DisableCallRecordings) - DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, mSettingsModel, bool, + DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool, assistantHideCreateAccount, AssistantHideCreateAccount) - DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, mSettingsModel, bool, + DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool, assistantHideCreateAccount, AssistantHideCreateAccount) - DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, mSettingsModel, bool, + DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool, assistantDisableQrCode, AssistantDisableQrCode) - DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, mSettingsModel, bool, + DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool, assistantHideThirdPartyAccount, AssistantHideThirdPartyAccount) - DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, mSettingsModel, bool, + DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool, onlyDisplaySipUriUsername, OnlyDisplaySipUriUsername) - DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, mSettingsModel, bool, + DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool, darkModeAllowed, DarkModeAllowed) - DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, mSettingsModel, int, maxAccount, + DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, int, maxAccount, MaxAccount) - DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, mSettingsModel, bool, + DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool, assistantGoDirectlyToThirdPartySipAccountLogin, AssistantGoDirectlyToThirdPartySipAccountLogin) - DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, mSettingsModel, QString, + DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, QString, assistantThirdPartySipAccountDomain, AssistantThirdPartySipAccountDomain) - DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, mSettingsModel, QString, + DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, QString, assistantThirdPartySipAccountTransport, AssistantThirdPartySipAccountTransport) - DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, mSettingsModel, bool, autoStart, + DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool, autoStart, AutoStart) - DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, mSettingsModel, bool, exitOnClose, + DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool, exitOnClose, ExitOnClose) - DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, mSettingsModel, bool, + DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool, syncLdapContacts, SyncLdapContacts) - DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, mSettingsModel, bool, ipv6Enabled, + DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool, ipv6Enabled, Ipv6Enabled) auto coreModelConnection = QSharedPointer>( @@ -451,18 +459,19 @@ bool SettingsCore::getDisplayDeviceCheckConfirmation() const { } void SettingsCore::startEchoCancellerCalibration() { - mSettingsModelConnection->invokeToModel([this]() { mSettingsModel->startEchoCancellerCalibration(); }); + mSettingsModelConnection->invokeToModel( + [this]() { SettingsModel::getInstance()->startEchoCancellerCalibration(); }); } void SettingsCore::accessCallSettings() { - mSettingsModelConnection->invokeToModel([this]() { mSettingsModel->accessCallSettings(); }); + mSettingsModelConnection->invokeToModel([this]() { SettingsModel::getInstance()->accessCallSettings(); }); } void SettingsCore::closeCallSettings() { - mSettingsModelConnection->invokeToModel([this]() { mSettingsModel->closeCallSettings(); }); + mSettingsModelConnection->invokeToModel([this]() { SettingsModel::getInstance()->closeCallSettings(); }); } void SettingsCore::updateMicVolume() const { - mSettingsModelConnection->invokeToModel([this]() { mSettingsModel->getMicVolume(); }); + mSettingsModelConnection->invokeToModel([this]() { SettingsModel::getInstance()->getMicVolume(); }); } bool SettingsCore::getLogsEnabled() const { @@ -474,11 +483,11 @@ bool SettingsCore::getFullLogsEnabled() const { } void SettingsCore::cleanLogs() const { - mSettingsModelConnection->invokeToModel([this]() { mSettingsModel->cleanLogs(); }); + mSettingsModelConnection->invokeToModel([this]() { SettingsModel::getInstance()->cleanLogs(); }); } void SettingsCore::sendLogs() const { - mSettingsModelConnection->invokeToModel([this]() { mSettingsModel->sendLogs(); }); + mSettingsModelConnection->invokeToModel([this]() { SettingsModel::getInstance()->sendLogs(); }); } QString SettingsCore::getLogsEmail() const { diff --git a/Linphone/core/setting/SettingsCore.hpp b/Linphone/core/setting/SettingsCore.hpp index 53b7c1e80..ea31c9568 100644 --- a/Linphone/core/setting/SettingsCore.hpp +++ b/Linphone/core/setting/SettingsCore.hpp @@ -232,8 +232,6 @@ signals: void ldapConfigChanged(); private: - std::shared_ptr mSettingsModel; - // Dummy properties (for properties that use values from core received through signals) int _dummy_int = 0; diff --git a/Linphone/model/setting/SettingsModel.cpp b/Linphone/model/setting/SettingsModel.cpp index 1eb844a8a..7b85cbdb1 100644 --- a/Linphone/model/setting/SettingsModel.cpp +++ b/Linphone/model/setting/SettingsModel.cpp @@ -31,9 +31,14 @@ DEFINE_ABSTRACT_OBJECT(SettingsModel) using namespace std; const std::string SettingsModel::UiSection("ui"); +std::shared_ptr SettingsModel::gCoreModel; -SettingsModel::SettingsModel(QObject *parent) : QObject(parent) { +SettingsModel::SettingsModel() { mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); + connect(CoreModel::getInstance()->thread(), &QThread::finished, this, [this]() { + // Model thread + gCoreModel = nullptr; + }); auto core = CoreModel::getInstance()->getCore(); mConfig = core->getConfig(); CoreModel::getInstance()->getLogger()->applyConfig(mConfig); @@ -63,6 +68,16 @@ SettingsModel::~SettingsModel() { mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); } +shared_ptr SettingsModel::create() { + auto model = make_shared(); + gCoreModel = model; + return model; +} + +shared_ptr SettingsModel::getInstance() { + return gCoreModel; +} + bool SettingsModel::isReadOnly(const std::string §ion, const std::string &name) const { return mConfig->hasEntry(section, name + "/readonly"); } diff --git a/Linphone/model/setting/SettingsModel.hpp b/Linphone/model/setting/SettingsModel.hpp index 60d3e0fcd..c0f247d35 100644 --- a/Linphone/model/setting/SettingsModel.hpp +++ b/Linphone/model/setting/SettingsModel.hpp @@ -33,9 +33,12 @@ class SettingsModel : public QObject, public AbstractObject { Q_OBJECT public: - SettingsModel(QObject *parent = Q_NULLPTR); + SettingsModel(); virtual ~SettingsModel(); + static std::shared_ptr create(); + static std::shared_ptr getInstance(); + bool isReadOnly(const std::string §ion, const std::string &name) const; std::string getEntryFullName(const std::string §ion, @@ -190,6 +193,9 @@ private: void notifyConfigReady(); MediastreamerUtils::SimpleCaptureGraph *mSimpleCaptureGraph = nullptr; int mCaptureGraphListenerCount = 0; + + static std::shared_ptr gCoreModel; + DECLARE_ABSTRACT_OBJECT }; #endif // SETTINGS_MODEL_H_ diff --git a/Linphone/tool/AbstractObject.hpp b/Linphone/tool/AbstractObject.hpp index ad4094399..3010d0fa8 100644 --- a/Linphone/tool/AbstractObject.hpp +++ b/Linphone/tool/AbstractObject.hpp @@ -92,8 +92,9 @@ public: #define INIT_CORE_MEMBER(X, model) m##X = model->get##X(); #define DEFINE_CORE_GETSET_CONNECT(safe, CoreClass, ModelClass, model, type, x, X) \ - safe->makeConnectToCore(&CoreClass::set##X, \ - [this](type data) { safe->invokeToModel([this, data]() { model->set##X(data); }); }); \ + safe->makeConnectToCore(&CoreClass::set##X, [this, objectToCall = model.get()](type data) { \ + safe->invokeToModel([this, data, objectToCall]() { objectToCall->set##X(data); }); \ + }); \ safe->makeConnectToModel(&ModelClass::x##Changed, [this](type data) { \ safe->invokeToCore([this, data]() { \ if (m##X != data) { \ diff --git a/Linphone/view/Control/Form/Settings/MultimediaSettings.qml b/Linphone/view/Control/Form/Settings/MultimediaSettings.qml index b362803d8..0474372cd 100644 --- a/Linphone/view/Control/Form/Settings/MultimediaSettings.qml +++ b/Linphone/view/Control/Form/Settings/MultimediaSettings.qml @@ -14,9 +14,6 @@ ColumnLayout { RoundedPane { Layout.alignment: Qt.AlignHCenter - Control.StackView.onActivated: { - rightPanelTitle.text = qsTr("Paramètres") - } height: contentItem.implicitHeight + topPadding + bottomPadding Layout.fillWidth: true topPadding: 25 * DefaultStyle.dp @@ -103,10 +100,14 @@ ColumnLayout { } } Timer { + id: audioTestSliderTimer interval: 50 repeat: true - running: mainItem.call || false - onTriggered: audioTestSlider.value = (mainItem.call && mainItem.call.core.microVolume) + running: false + onTriggered: { + if (mainItem.call) audioTestSlider.value = mainItem.call.core.microVolume + else SettingsCpp.updateMicVolume() + } } Slider { id: audioTestSlider @@ -166,6 +167,21 @@ ColumnLayout { propertyOwner: SettingsCpp } } + Connections { + enabled: !mainItem.call + target: SettingsCpp + onMicVolumeChanged: (value) => { + audioTestSlider.value = value + } + } + Component.onCompleted: { + SettingsCpp.accessCallSettings() + audioTestSliderTimer.running = true + } + Component.onDestruction: { + audioTestSliderTimer.running = false + SettingsCpp.closeCallSettings() + } } } Item { diff --git a/Linphone/view/Page/Main/Meeting/MeetingPage.qml b/Linphone/view/Page/Main/Meeting/MeetingPage.qml index b3c75fccb..37ea9a317 100644 --- a/Linphone/view/Page/Main/Meeting/MeetingPage.qml +++ b/Linphone/view/Page/Main/Meeting/MeetingPage.qml @@ -19,7 +19,7 @@ AbstractMainPage { signal returnRequested() signal addParticipantsValidated(list selectedParticipants) Component.onCompleted: rightPanelStackView.push(overridenRightPanel, Control.StackView.Immediate) - showDefaultItem: leftPanelStackView.currentItem.objectName === "listLayout" && meetingListCount === 0 + showDefaultItem: leftPanelStackView.currentItem?.objectName === "listLayout" && meetingListCount === 0 onVisibleChanged: if (!visible) { leftPanelStackView.clear() diff --git a/Linphone/view/Page/Window/Call/CallsWindow.qml b/Linphone/view/Page/Window/Call/CallsWindow.qml index 4865c0f61..36a075f01 100644 --- a/Linphone/view/Page/Window/Call/CallsWindow.qml +++ b/Linphone/view/Page/Window/Call/CallsWindow.qml @@ -1554,7 +1554,7 @@ AbstractWindow { id: participantListButton visible: mainWindow.conference iconUrl: AppIcons.usersTwo - checked: rightPanel.visible && rightPanel.currentItem.objectName == "participantListPanel" + checked: rightPanel.visible && rightPanel.currentItem?.objectName == "participantListPanel" checkedColor: DefaultStyle.main2_400 Layout.preferredWidth: 55 * DefaultStyle.dp Layout.preferredHeight: 55 * DefaultStyle.dp