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));
if (CoreModel::getInstance()->mConfigStatus == linphone::ConfiguringState::Successful) {
bool accountConnected = account && account->getState() == linphone::RegistrationState::Ok;
// update settings if case config contains changes
if (mSettings) mSettings->reloadSettings();
mCoreModelConnection->invokeToCore([this, accountConnected]() {
mustBeInMainThread(log().arg(Q_FUNC_INFO));
// 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));
}
mPossiblyLookForAddedAccount = false;
// setLocale(mSettings->getConfigLocale());
// setAutoStart(mSettings->getAutoStart());
// setQuitOnLastWindowClosed(mSettings->getExitOnClose());
});
}
});
@ -640,7 +645,7 @@ void App::initCore() {
lDebug() << log().arg("Creating SettingsModel");
SettingsModel::create();
lDebug() << log().arg("Creating SettingsCore");
if (!settings) settings = SettingsCore::create();
settings = SettingsCore::create();
lDebug() << log().arg("Checking downloaded codecs updates");
Utils::checkDownloadedCodecsUpdates();
lDebug() << log().arg("Setting Video Codec Priority Policy");
@ -722,30 +727,30 @@ void App::initCore() {
}
});
if (!mSettings) {
mSettings = settings;
setLocale(settings->getConfigLocale());
setAutoStart(settings->getAutoStart());
setQuitOnLastWindowClosed(settings->getExitOnClose());
mEngine->setObjectOwnership(mSettings.get(), QQmlEngine::CppOwnership);
// if (!mSettings) {
mSettings = settings;
setLocale(settings->getConfigLocale());
setAutoStart(settings->getAutoStart());
setQuitOnLastWindowClosed(settings->getExitOnClose());
mEngine->setObjectOwnership(mSettings.get(), QQmlEngine::CppOwnership);
connect(mSettings.get(), &SettingsCore::exitOnCloseChanged, this, &App::onExitOnCloseChanged,
Qt::UniqueConnection);
QObject::connect(mSettings.get(), &SettingsCore::autoStartChanged, [this]() {
mustBeInMainThread(log().arg(Q_FUNC_INFO));
setAutoStart(mSettings->getAutoStart());
});
QObject::connect(mSettings.get(), &SettingsCore::configLocaleChanged, [this]() {
mustBeInMainThread(log().arg(Q_FUNC_INFO));
if (mSettings) setLocale(mSettings->getConfigLocale());
});
connect(mSettings.get(), &SettingsCore::exitOnCloseChanged, this, &App::onExitOnCloseChanged,
Qt::UniqueConnection);
} else {
setLocale(settings->getConfigLocale());
setAutoStart(settings->getAutoStart());
setQuitOnLastWindowClosed(settings->getExitOnClose());
}
connect(mSettings.get(), &SettingsCore::exitOnCloseChanged, this, &App::onExitOnCloseChanged,
Qt::UniqueConnection);
QObject::connect(mSettings.get(), &SettingsCore::autoStartChanged, [this]() {
mustBeInMainThread(log().arg(Q_FUNC_INFO));
setAutoStart(mSettings->getAutoStart());
});
QObject::connect(mSettings.get(), &SettingsCore::configLocaleChanged, [this]() {
mustBeInMainThread(log().arg(Q_FUNC_INFO));
if (mSettings) setLocale(mSettings->getConfigLocale());
});
connect(mSettings.get(), &SettingsCore::exitOnCloseChanged, this, &App::onExitOnCloseChanged,
Qt::UniqueConnection);
// } else {
// setLocale(settings->getConfigLocale());
// setAutoStart(settings->getAutoStart());
// setQuitOnLastWindowClosed(settings->getExitOnClose());
// }
const QUrl url("qrc:/qt/qml/Linphone/view/Page/Window/Main/MainWindow.qml");
QObject::connect(
mEngine, &QQmlApplicationEngine::objectCreated, this,

View file

@ -126,7 +126,6 @@ SettingsCore::SettingsCore(QObject *parent) : QObject(parent) {
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, settingsModel)
@ -239,6 +238,110 @@ SettingsCore::SettingsCore(const 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) {
mustBeInLinphoneThread(getClassName());
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 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 logsFolder READ getLogsFolder)
Q_PROPERTY(QString ringtoneName READ getRingtoneFileName NOTIFY ringtoneChanged)
@ -108,6 +109,8 @@ public:
SettingsCore(const SettingsCore &settingsCore);
virtual ~SettingsCore();
void reloadSettings();
void setSelf(QSharedPointer<SettingsCore> me);
void reset(const SettingsCore &settingsCore);