diff --git a/Linphone/core/setting/SettingsCore.cpp b/Linphone/core/setting/SettingsCore.cpp index c4c63f187..5ef5201dc 100644 --- a/Linphone/core/setting/SettingsCore.cpp +++ b/Linphone/core/setting/SettingsCore.cpp @@ -146,7 +146,6 @@ SettingsCore::SettingsCore(QObject *parent) : QObject(parent) { INIT_CORE_MEMBER(CallToneIndicationsEnabled, settingsModel) INIT_CORE_MEMBER(CommandLine, settingsModel) INIT_CORE_MEMBER(DisableCommandLine, settingsModel) - INIT_CORE_MEMBER(DisableCallForward, settingsModel) INIT_CORE_MEMBER(CallForwardToAddress, settingsModel) INIT_CORE_MEMBER(ThemeMainColor, settingsModel) @@ -226,7 +225,7 @@ SettingsCore::SettingsCore(const SettingsCore &settingsCore) { mCallToneIndicationsEnabled = settingsCore.mCallToneIndicationsEnabled; mCommandLine = settingsCore.mCommandLine; mDisableCommandLine = settingsCore.mDisableCommandLine; - mDisableCallForward = settingsCore.mDisableCallForward; + mCallForwardToAddress = settingsCore.mCallForwardToAddress; mDefaultDomain = settingsCore.mDefaultDomain; mShowAccountDevices = settingsCore.mShowAccountDevices; @@ -270,6 +269,12 @@ void SettingsCore::setSelf(QSharedPointer me) { mSettingsModelConnection->invokeToCore([this, enabled]() { setIpv6Enabled(enabled); }); }); + // Call Forward + mSettingsModelConnection->makeConnectToModel( + &SettingsModel::callForwardToAddressChanged, [this](const QString address) { + mSettingsModelConnection->invokeToCore([this, address]() { setCallForwardToAddress(address); }); + }); + // Hide FPS mSettingsModelConnection->makeConnectToModel(&SettingsModel::hideFpsChanged, [this](const bool hide) { mSettingsModelConnection->invokeToCore([this, hide]() { setHideFps(hide); }); @@ -488,10 +493,6 @@ void SettingsCore::setSelf(QSharedPointer me) { commandLine, CommandLine) DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool, disableCommandLine, DisableCommandLine) - DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, bool, - disableCallForward, DisableCallForward) - DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, QString, - callForwardToAddress, CallForwardToAddress) DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, QString, themeAboutPictureUrl, ThemeAboutPictureUrl) DEFINE_CORE_GETSET_CONNECT(mSettingsModelConnection, SettingsCore, SettingsModel, settingsModel, QString, @@ -588,6 +589,7 @@ void SettingsCore::reset(const SettingsCore &settingsCore) { setAutoStart(settingsCore.mAutoStart); setConfigLocale(settingsCore.mConfigLocale); setDownloadFolder(settingsCore.mDownloadFolder); + setCallForwardToAddress(settingsCore.mCallForwardToAddress); } QString SettingsCore::getConfigPath(const QCommandLineParser &parser) { @@ -661,6 +663,13 @@ void SettingsCore::setAutoStart(bool enabled) { } } +void SettingsCore::setCallForwardToAddress(QString address) { + if (mCallForwardToAddress != address) { + mCallForwardToAddress = address; + setIsSaved(false); + } +} + void SettingsCore::setHideFps(bool hide) { if (mHideFps != hide) { mHideFps = hide; @@ -1160,6 +1169,7 @@ void SettingsCore::writeIntoModel(std::shared_ptr model) const { model->setAutoStart(mAutoStart); model->setConfigLocale(mConfigLocale); model->setDownloadFolder(mDownloadFolder); + model->setCallForwardToAddress(mCallForwardToAddress); } void SettingsCore::writeFromModel(const std::shared_ptr &model) { @@ -1242,6 +1252,7 @@ void SettingsCore::writeFromModel(const std::shared_ptr &model) { mAutoStart = model->getAutoStart(); mConfigLocale = model->getConfigLocale(); mDownloadFolder = model->getDownloadFolder(); + mCallForwardToAddress = model->getCallForwardToAddress(); } bool SettingsCore::isCheckForUpdateAvailable() const { diff --git a/Linphone/core/setting/SettingsCore.hpp b/Linphone/core/setting/SettingsCore.hpp index e29d306bf..8714126fe 100644 --- a/Linphone/core/setting/SettingsCore.hpp +++ b/Linphone/core/setting/SettingsCore.hpp @@ -62,6 +62,10 @@ public: Q_PROPERTY(QVariantMap playbackDevice READ getPlaybackDevice WRITE setPlaybackDevice NOTIFY playbackDeviceChanged) Q_PROPERTY(QVariantMap ringerDevice READ getRingerDevice WRITE setRingerDevice NOTIFY ringerDeviceChanged) + // Call Forward + Q_PROPERTY(QString callForwardToAddress READ getCallForwardToAddress WRITE setCallForwardToAddress NOTIFY + callForwardToAddressChanged) + // Network Q_PROPERTY(bool ipv6Enabled READ getIpv6Enabled WRITE setIpv6Enabled NOTIFY ipv6EnabledChanged) Q_PROPERTY(bool hideFps READ getHideFps WRITE setHideFps NOTIFY hideFpsChanged) @@ -202,6 +206,13 @@ public: Q_INVOKABLE void closeCallSettings(); Q_INVOKABLE void updateMicVolume() const; + // Call Forward. -------------------------------------------------------------------- + + QString getCallForwardToAddress() { + return mCallForwardToAddress; + } + void setCallForwardToAddress(QString address); + // Network. -------------------------------------------------------------------- bool getIpv6Enabled() { @@ -277,8 +288,6 @@ public: DECLARE_CORE_GETSET_MEMBER(bool, callToneIndicationsEnabled, CallToneIndicationsEnabled) DECLARE_CORE_GETSET_MEMBER(bool, disableCommandLine, DisableCommandLine) DECLARE_CORE_GETSET_MEMBER(QString, commandLine, CommandLine) - DECLARE_CORE_GETSET_MEMBER(bool, disableCallForward, DisableCallForward) - DECLARE_CORE_GETSET_MEMBER(QString, callForwardToAddress, CallForwardToAddress) DECLARE_CORE_GET_CONSTANT(QFont, emojiFont, EmojiFont) DECLARE_CORE_GET_CONSTANT(QFont, textMessageFont, TextMessageFont) // Theme @@ -312,6 +321,9 @@ signals: // Network void ipv6EnabledChanged(); + // Call Forward + void callForwardToAddressChanged(); + // Advanced void autoStartChanged(); void hideFpsChanged(); @@ -417,6 +429,9 @@ private: // Network bool mIpv6Enabled; + // Call Forward + QString mCallForwardToAddress; + // Advanced bool mAutoStart; bool mHideFps; diff --git a/Linphone/model/setting/SettingsModel.cpp b/Linphone/model/setting/SettingsModel.cpp index bfe4024c9..6eecf9f12 100644 --- a/Linphone/model/setting/SettingsModel.cpp +++ b/Linphone/model/setting/SettingsModel.cpp @@ -837,26 +837,13 @@ QString SettingsModel::getDefaultDomain() const { mConfig->getString(SettingsModel::AppSection, "default_domain", "sip.linphone.org")); } -void SettingsModel::enableCallForward(QString destination) { - // TODO implement business logic to activate call forward to destination on PBX via external API (contains voicemail - // or a destination). - mConfig->setString(UiSection, "call_forward_to_address", Utils::appStringToCoreString(destination)); - emit callForwardToAddressChanged(getCallForwardToAddress()); -} - -void SettingsModel::disableCallForward() { - // TODO implement business logic to de-activate call forward on PBX via external API - mConfig->setString(UiSection, "call_forward_to_address", ""); -} - QString SettingsModel::getCallForwardToAddress() const { mustBeInLinphoneThread(log().arg(Q_FUNC_INFO)); return Utils::coreStringToAppString(mConfig->getString(UiSection, "call_forward_to_address", "")); } void SettingsModel::setCallForwardToAddress(const QString &data) { - if (data == "") disableCallForward(); - else enableCallForward(data); + mConfig->setString(UiSection, "call_forward_to_address", Utils::appStringToCoreString(data)); // TODO implement BL emit(callForwardToAddressChanged(data)); } @@ -1139,13 +1126,6 @@ DEFINE_GETSET_CONFIG(SettingsModel, DisableCommandLine, "disable_command_line", false) -DEFINE_GETSET_CONFIG(SettingsModel, - bool, - Bool, - disableCallForward, - DisableCallForward, - "disable_call_forward", - true) DEFINE_GETSET_CONFIG_STRING(SettingsModel, themeMainColor, ThemeMainColor, diff --git a/Linphone/model/setting/SettingsModel.hpp b/Linphone/model/setting/SettingsModel.hpp index 25b57b2a7..7af530681 100644 --- a/Linphone/model/setting/SettingsModel.hpp +++ b/Linphone/model/setting/SettingsModel.hpp @@ -223,7 +223,6 @@ public: DECLARE_GETSET(bool, usernameOnlyForCardDAVLookupsInCalls, UsernameOnlyForCardDAVLookupsInCalls) DECLARE_GETSET(QString, commandLine, CommandLine) DECLARE_GETSET(bool, disableCommandLine, DisableCommandLine) - DECLARE_GETSET(bool, disableCallForward, DisableCallForward) DECLARE_GETSET(QString, callForwardToAddress, CallForwardToAddress) DECLARE_GETSET(QString, chatNotificationSoundPath, ChatNotificationSoundPath) DECLARE_GETSET(QString, themeMainColor, ThemeMainColor) @@ -293,7 +292,6 @@ private: VfsUtils mVfsUtils; #endif - void enableCallForward(QString destination); void disableCallForward(); static std::shared_ptr gSettingsModel; diff --git a/Linphone/view/Page/Layout/Settings/CallForwardSettingsLayout.qml b/Linphone/view/Page/Layout/Settings/CallForwardSettingsLayout.qml index b53b90d07..1b1ef1139 100644 --- a/Linphone/view/Page/Layout/Settings/CallForwardSettingsLayout.qml +++ b/Linphone/view/Page/Layout/Settings/CallForwardSettingsLayout.qml @@ -9,11 +9,9 @@ import "qrc:/qt/qml/Linphone/view/Control/Tool/Helper/utils.js" as Utils AbstractSettingsLayout { id: mainItem + width: parent?.width property bool enableCallForward: SettingsCpp.callForwardToAddress.length > 0 - property string localCallForwardToAddress: SettingsCpp.callForwardToAddress - - width: parent?.width contentModel: [ { @@ -23,44 +21,14 @@ AbstractSettingsLayout { } ] - Connections { - target: SettingsCpp - function onCallForwardToAddressChanged() { - requestTimeOut.stop() - UtilsCpp.getMainWindow().closeLoadingPopup() - UtilsCpp.showInformationPopup("", - SettingsCpp.callForwardToAddress - ? qsTr("settings_call_forward_activation_success") + (SettingsCpp.callForwardToAddress == "voicemail" ? qsTr("settings_call_forward_to_voicemail") : SettingsCpp.callForwardToAddress) - : qsTr("settings_call_forward_deactivation_success") - , true) - } - } - - Timer { - id: requestTimeOut - interval: 10000 - running: false - repeat: false - onTriggered: { - UtilsCpp.getMainWindow().closeLoadingPopup() - UtilsCpp.showInformationPopup("", qsTr("settings_call_forward_address_timeout"), false) - } - } - onSave: { - if (mainItem.enableCallForward && mainItem.localCallForwardToAddress.length == 0) { + if (mainItem.enableCallForward && SettingsCpp.callForwardToAddress.length == 0) { UtilsCpp.getMainWindow().showInformationPopup("", qsTr("settings_call_forward_address_cannot_be_empty"), false) return } - requestTimeOut.start() - if (!mainItem.enableCallForward && SettingsCpp.callForwardToAddress.length > 0) { - UtilsCpp.getMainWindow().showLoadingPopup(qsTr("settings_call_forward_address_progress_disabling") + " ...") - SettingsCpp.callForwardToAddress = "" - } else if (SettingsCpp.callForwardToAddress != mainItem.localCallForwardToAddress) { - UtilsCpp.getMainWindow().showLoadingPopup(qsTr("settings_call_forward_address_progress_enabling")+(mainItem.localCallForwardToAddress === 'voicemail' ? qsTr("settings_call_forward_to_voicemail") : mainItem.localCallForwardToAddress) + " ...") - SettingsCpp.callForwardToAddress = mainItem.localCallForwardToAddress - } + SettingsCpp.save() } + onUndo: SettingsCpp.undo() // Generic forward parameters ///////////////////////////// @@ -76,6 +44,11 @@ AbstractSettingsLayout { subTitleText: qsTr("settings_call_forward_activate_subtitle") propertyName: "enableCallForward" propertyOwner: mainItem + onToggled: function () { + SettingsCpp.isSaved = false + if (!mainItem.enableCallForward) + SettingsCpp.callForwardToAddress = "" + } } Text { visible: mainItem.enableCallForward @@ -99,7 +72,7 @@ AbstractSettingsLayout { Component.onCompleted: { if (mainItem.enableCallForward) { forwardDestination.currentIndex = - (mainItem.localCallForwardToAddress === "voicemail" || mainItem.localCallForwardToAddress.length === 0) ? 0 : 1; + (SettingsCpp.callForwardToAddress === "voicemail" || SettingsCpp.callForwardToAddress.length === 0) ? 0 : 1; } else { forwardDestination.currentIndex = 0; } @@ -109,16 +82,16 @@ AbstractSettingsLayout { if (!forwardDestination.isInitialized) return; if (currentIndex == 0) - mainItem.localCallForwardToAddress = "voicemail"; + SettingsCpp.callForwardToAddress = "voicemail"; else { - mainItem.localCallForwardToAddress = ""; + SettingsCpp.callForwardToAddress = ""; sipInputField.empty(); } } onVisibleChanged: { if (visible) { currentIndex = 0 - mainItem.localCallForwardToAddress = "voicemail"; + SettingsCpp.callForwardToAddress = "voicemail"; } } @@ -127,8 +100,8 @@ AbstractSettingsLayout { id: sipInputField visible: mainItem.enableCallForward && forwardDestination.currentIndex == 1 Layout.fillWidth: true - propertyName: "localCallForwardToAddress" - propertyOwner: mainItem + propertyName: "callForwardToAddress" + propertyOwner: SettingsCpp //: SIP Address title: qsTr("settings_call_forward_sipaddress_title") placeHolder: qsTr("settings_call_forward_sipaddress_placeholder")