Update settings when configuration succeed in case it contains settings modifications

This commit is contained in:
Gaelle Braud 2026-01-22 14:38:37 +01:00
parent 37d6649fa4
commit df979d4270
3 changed files with 137 additions and 26 deletions

View file

@ -434,6 +434,8 @@ void App::setSelf(QSharedPointer<App>(me)) {
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
if (CoreModel::getInstance()->mConfigStatus == linphone::ConfiguringState::Successful) { if (CoreModel::getInstance()->mConfigStatus == linphone::ConfiguringState::Successful) {
bool accountConnected = account && account->getState() == linphone::RegistrationState::Ok; bool accountConnected = account && account->getState() == linphone::RegistrationState::Ok;
// update settings if case config contains changes
if (mSettings) mSettings->reloadSettings();
mCoreModelConnection->invokeToCore([this, accountConnected]() { mCoreModelConnection->invokeToCore([this, accountConnected]() {
mustBeInMainThread(log().arg(Q_FUNC_INFO)); mustBeInMainThread(log().arg(Q_FUNC_INFO));
// There is an account added by a remote provisioning, force switching to main page // There is an account added by a remote provisioning, force switching to main page
@ -443,6 +445,9 @@ void App::setSelf(QSharedPointer<App>(me)) {
Q_ARG(QVariant, accountConnected)); Q_ARG(QVariant, accountConnected));
} }
mPossiblyLookForAddedAccount = false; mPossiblyLookForAddedAccount = false;
// setLocale(mSettings->getConfigLocale());
// setAutoStart(mSettings->getAutoStart());
// setQuitOnLastWindowClosed(mSettings->getExitOnClose());
}); });
} }
}); });
@ -640,7 +645,7 @@ void App::initCore() {
lDebug() << log().arg("Creating SettingsModel"); lDebug() << log().arg("Creating SettingsModel");
SettingsModel::create(); SettingsModel::create();
lDebug() << log().arg("Creating SettingsCore"); lDebug() << log().arg("Creating SettingsCore");
if (!settings) settings = SettingsCore::create(); settings = SettingsCore::create();
lDebug() << log().arg("Checking downloaded codecs updates"); lDebug() << log().arg("Checking downloaded codecs updates");
Utils::checkDownloadedCodecsUpdates(); Utils::checkDownloadedCodecsUpdates();
lDebug() << log().arg("Setting Video Codec Priority Policy"); lDebug() << log().arg("Setting Video Codec Priority Policy");
@ -722,30 +727,30 @@ void App::initCore() {
} }
}); });
if (!mSettings) { // if (!mSettings) {
mSettings = settings; mSettings = settings;
setLocale(settings->getConfigLocale()); setLocale(settings->getConfigLocale());
setAutoStart(settings->getAutoStart()); setAutoStart(settings->getAutoStart());
setQuitOnLastWindowClosed(settings->getExitOnClose()); setQuitOnLastWindowClosed(settings->getExitOnClose());
mEngine->setObjectOwnership(mSettings.get(), QQmlEngine::CppOwnership); mEngine->setObjectOwnership(mSettings.get(), QQmlEngine::CppOwnership);
connect(mSettings.get(), &SettingsCore::exitOnCloseChanged, this, &App::onExitOnCloseChanged, connect(mSettings.get(), &SettingsCore::exitOnCloseChanged, this, &App::onExitOnCloseChanged,
Qt::UniqueConnection); Qt::UniqueConnection);
QObject::connect(mSettings.get(), &SettingsCore::autoStartChanged, [this]() { QObject::connect(mSettings.get(), &SettingsCore::autoStartChanged, [this]() {
mustBeInMainThread(log().arg(Q_FUNC_INFO)); mustBeInMainThread(log().arg(Q_FUNC_INFO));
setAutoStart(mSettings->getAutoStart()); setAutoStart(mSettings->getAutoStart());
}); });
QObject::connect(mSettings.get(), &SettingsCore::configLocaleChanged, [this]() { QObject::connect(mSettings.get(), &SettingsCore::configLocaleChanged, [this]() {
mustBeInMainThread(log().arg(Q_FUNC_INFO)); mustBeInMainThread(log().arg(Q_FUNC_INFO));
if (mSettings) setLocale(mSettings->getConfigLocale()); if (mSettings) setLocale(mSettings->getConfigLocale());
}); });
connect(mSettings.get(), &SettingsCore::exitOnCloseChanged, this, &App::onExitOnCloseChanged, connect(mSettings.get(), &SettingsCore::exitOnCloseChanged, this, &App::onExitOnCloseChanged,
Qt::UniqueConnection); Qt::UniqueConnection);
} else { // } else {
setLocale(settings->getConfigLocale()); // setLocale(settings->getConfigLocale());
setAutoStart(settings->getAutoStart()); // setAutoStart(settings->getAutoStart());
setQuitOnLastWindowClosed(settings->getExitOnClose()); // setQuitOnLastWindowClosed(settings->getExitOnClose());
} // }
const QUrl url("qrc:/qt/qml/Linphone/view/Page/Window/Main/MainWindow.qml"); const QUrl url("qrc:/qt/qml/Linphone/view/Page/Window/Main/MainWindow.qml");
QObject::connect( QObject::connect(
mEngine, &QQmlApplicationEngine::objectCreated, this, mEngine, &QQmlApplicationEngine::objectCreated, this,

View file

@ -126,7 +126,6 @@ SettingsCore::SettingsCore(QObject *parent) : QObject(parent) {
INIT_CORE_MEMBER(HideAccountSettings, settingsModel) INIT_CORE_MEMBER(HideAccountSettings, settingsModel)
INIT_CORE_MEMBER(DisableCallRecordings, settingsModel) INIT_CORE_MEMBER(DisableCallRecordings, settingsModel)
INIT_CORE_MEMBER(AssistantHideCreateAccount, settingsModel) INIT_CORE_MEMBER(AssistantHideCreateAccount, settingsModel)
INIT_CORE_MEMBER(AssistantHideCreateAccount, settingsModel)
INIT_CORE_MEMBER(AssistantDisableQrCode, settingsModel) INIT_CORE_MEMBER(AssistantDisableQrCode, settingsModel)
INIT_CORE_MEMBER(AssistantHideThirdPartyAccount, settingsModel) INIT_CORE_MEMBER(AssistantHideThirdPartyAccount, settingsModel)
@ -239,6 +238,110 @@ SettingsCore::SettingsCore(const SettingsCore &settingsCore) {
SettingsCore::~SettingsCore() { SettingsCore::~SettingsCore() {
} }
void SettingsCore::reloadSettings() {
mustBeInLinphoneThread(getClassName());
auto settingsModel = SettingsModel::getInstance();
assert(settingsModel);
// Security
setVfsEnabled(settingsModel->getVfsEnabled());
// Call
setVideoEnabled(settingsModel->getVideoEnabled());
setEchoCancellationEnabled(settingsModel->getEchoCancellationEnabled());
setAutoDownloadReceivedFiles(settingsModel->getAutoDownloadReceivedFiles());
setAutomaticallyRecordCallsEnabled(settingsModel->getAutomaticallyRecordCallsEnabled());
setRingtone(settingsModel->getRingtone());
// Network
setIpv6Enabled(settingsModel->getIpv6Enabled());
// Advanced
setAutoStart(settingsModel->getAutoStart());
setHideFps(settingsModel->getHideFps());
// Audio
setCaptureDevices(settingsModel->getCaptureDevices());
setPlaybackDevices(settingsModel->getPlaybackDevices());
setRingerDevices(settingsModel->getRingerDevices());
setCaptureDevice(settingsModel->getCaptureDevice());
setPlaybackDevice(settingsModel->getPlaybackDevice());
setRingerDevice(settingsModel->getRingerDevice());
setConferenceLayout(
LinphoneEnums::toVariant(LinphoneEnums::fromLinphone(settingsModel->getDefaultConferenceLayout())));
setMediaEncryption(
LinphoneEnums::toVariant(LinphoneEnums::fromLinphone(settingsModel->getDefaultMediaEncryption())));
setMediaEncryptionMandatory(settingsModel->getMediaEncryptionMandatory());
setCreateEndToEndEncryptedMeetingsAndGroupCalls(settingsModel->getCreateEndToEndEncryptedMeetingsAndGroupCalls());
setCaptureGain(settingsModel->getCaptureGain());
setPlaybackGain(settingsModel->getPlaybackGain());
// Video
setVideoDevice(settingsModel->getVideoDevice());
setVideoDevices(settingsModel->getVideoDevices());
// Logs
setLogsEnabled(settingsModel->getLogsEnabled());
setFullLogsEnabled(settingsModel->getFullLogsEnabled());
setCrashReporterEnabled(settingsModel->getCrashReporterEnabled());
setLogsFolder(settingsModel->getLogsFolder());
mLogsEmail = settingsModel->getLogsEmail();
// DND
setDndEnabled(settingsModel->dndEnabled());
mDefaultDomain = settingsModel->getDefaultDomain();
auto currentAccount = CoreModel::getInstance()->getCore()->getDefaultAccount();
if (currentAccount) {
auto accountDomain = Utils::coreStringToAppString(currentAccount->getParams()->getDomain());
setShowAccountDevices(accountDomain == mDefaultDomain);
}
// Chat
mEmojiFont = settingsModel->getEmojiFont();
mTextMessageFont = settingsModel->getTextMessageFont();
// Check for update
mIsCheckForUpdateAvailable = settingsModel->isCheckForUpdateAvailable();
setDisableChatFeature(settingsModel->getDisableChatFeature());
setDisableMeetingsFeature(settingsModel->getDisableMeetingsFeature());
setDisableBroadcastFeature(settingsModel->getDisableBroadcastFeature());
setHideSettings(settingsModel->getHideSettings());
setHideAccountSettings(settingsModel->getHideAccountSettings());
setDisableCallRecordings(settingsModel->getDisableCallRecordings());
setAssistantHideCreateAccount(settingsModel->getAssistantHideCreateAccount());
setAssistantDisableQrCode(settingsModel->getAssistantDisableQrCode());
setAssistantHideThirdPartyAccount(settingsModel->getAssistantHideThirdPartyAccount());
setHideSipAddresses(settingsModel->getHideSipAddresses());
setDarkModeAllowed(settingsModel->getDarkModeAllowed());
setMaxAccount(settingsModel->getMaxAccount());
setAssistantGoDirectlyToThirdPartySipAccountLogin(
settingsModel->getAssistantGoDirectlyToThirdPartySipAccountLogin());
setAssistantGoDirectlyToThirdPartySipAccountLogin(
settingsModel->getAssistantGoDirectlyToThirdPartySipAccountLogin());
setAssistantThirdPartySipAccountDomain(settingsModel->getAssistantThirdPartySipAccountDomain());
setAssistantThirdPartySipAccountTransport(settingsModel->getAssistantThirdPartySipAccountTransport());
setAutoStart(settingsModel->getAutoStart());
setExitOnClose(settingsModel->getExitOnClose());
setSyncLdapContacts(settingsModel->getSyncLdapContacts());
setConfigLocale(settingsModel->getConfigLocale());
setDownloadFolder(settingsModel->getDownloadFolder());
setCallToneIndicationsEnabled(settingsModel->getCallToneIndicationsEnabled());
setCommandLine(settingsModel->getCommandLine());
setDisableCommandLine(settingsModel->getDisableCommandLine());
setCallForwardToAddress(settingsModel->getCallForwardToAddress());
setThemeMainColor(settingsModel->getThemeMainColor());
setThemeAboutPictureUrl(settingsModel->getThemeAboutPictureUrl());
}
void SettingsCore::setSelf(QSharedPointer<SettingsCore> me) { void SettingsCore::setSelf(QSharedPointer<SettingsCore> me) {
mustBeInLinphoneThread(getClassName()); mustBeInLinphoneThread(getClassName());
mSettingsModelConnection = SafeConnection<SettingsCore, SettingsModel>::create(me, SettingsModel::getInstance()); mSettingsModelConnection = SafeConnection<SettingsCore, SettingsModel>::create(me, SettingsModel::getInstance());

View file

@ -91,7 +91,8 @@ public:
Q_PROPERTY(bool logsEnabled READ getLogsEnabled WRITE setLogsEnabled NOTIFY logsEnabledChanged) Q_PROPERTY(bool logsEnabled READ getLogsEnabled WRITE setLogsEnabled NOTIFY logsEnabledChanged)
Q_PROPERTY(bool fullLogsEnabled READ getFullLogsEnabled WRITE setFullLogsEnabled NOTIFY fullLogsEnabledChanged) Q_PROPERTY(bool fullLogsEnabled READ getFullLogsEnabled WRITE setFullLogsEnabled NOTIFY fullLogsEnabledChanged)
Q_PROPERTY(bool crashReporterEnabled READ getCrashReporterEnabled WRITE setCrashReporterEnabled NOTIFY crashReporterEnabledChanged) Q_PROPERTY(bool crashReporterEnabled READ getCrashReporterEnabled WRITE setCrashReporterEnabled NOTIFY
crashReporterEnabledChanged)
Q_PROPERTY(QString logsEmail READ getLogsEmail) Q_PROPERTY(QString logsEmail READ getLogsEmail)
Q_PROPERTY(QString logsFolder READ getLogsFolder) Q_PROPERTY(QString logsFolder READ getLogsFolder)
Q_PROPERTY(QString ringtoneName READ getRingtoneFileName NOTIFY ringtoneChanged) Q_PROPERTY(QString ringtoneName READ getRingtoneFileName NOTIFY ringtoneChanged)
@ -108,6 +109,8 @@ public:
SettingsCore(const SettingsCore &settingsCore); SettingsCore(const SettingsCore &settingsCore);
virtual ~SettingsCore(); virtual ~SettingsCore();
void reloadSettings();
void setSelf(QSharedPointer<SettingsCore> me); void setSelf(QSharedPointer<SettingsCore> me);
void reset(const SettingsCore &settingsCore); void reset(const SettingsCore &settingsCore);