diff --git a/linphone-app/src/components/chat-room/ChatRoomModel.cpp b/linphone-app/src/components/chat-room/ChatRoomModel.cpp index 2d8a65295..1e4ca2de5 100644 --- a/linphone-app/src/components/chat-room/ChatRoomModel.cpp +++ b/linphone-app/src/components/chat-room/ChatRoomModel.cpp @@ -516,7 +516,7 @@ QList ChatRoomModel::getComposers(){ void ChatRoomModel::setSubject(QString& subject){ if(mChatRoom && getSubject() != subject){ - mChatRoom->setSubject(subject.toStdString()); // in UTF8 + mChatRoom->setSubject(subject.toUtf8().toStdString()); // in UTF8 emit subjectChanged(subject); } } diff --git a/linphone-app/src/components/settings/AccountSettingsModel.cpp b/linphone-app/src/components/settings/AccountSettingsModel.cpp index 0ea4b9834..72c8a86ec 100644 --- a/linphone-app/src/components/settings/AccountSettingsModel.cpp +++ b/linphone-app/src/components/settings/AccountSettingsModel.cpp @@ -207,8 +207,8 @@ void AccountSettingsModel::removeProxyConfig (const shared_ptr newProxy = nullptr; + std::list> allProxies = coreManager->getCore()->getProxyConfigList(); if( proxyConfig == coreManager->getCore()->getDefaultProxyConfig()){ - std::list> allProxies = coreManager->getCore()->getProxyConfigList(); for(auto proxy : allProxies){ if( proxy != proxyConfig ){ newProxy = proxy; @@ -217,8 +217,23 @@ void AccountSettingsModel::removeProxyConfig (const shared_ptrgetCore()->removeProxyConfig(proxyConfig);// Remove first to avoid requesting password when deleting it +// "message-expires" is used to keep contact for messages. Setting to 0 will remove the contact for messages too. +// Check if a "message-expires" exists and set it to 0 + QStringList parameters = Utils::coreStringToAppString(proxyConfig->getContactParameters()).split(";"); + for(int i = 0 ; i < parameters.size() ; ++i){ + QStringList fields = parameters[i].split("="); + if( fields.size() > 1 && fields[0].simplified() == "message-expires"){ + parameters[i] = Constants::DefaultContactParametersOnRemove; + } + } + proxyConfig->edit(); + proxyConfig->setContactParameters(Utils::appStringToCoreString(parameters.join(";"))); + if (proxyConfig->done() == -1) { + qWarning() << QStringLiteral("Unable to reset message-expiry property before removing proxy config: `%1`.") + .arg(QString::fromStdString(proxyConfig->getIdentityAddress()->asString())); + }else { // Wait for update + mRemovingProxies.push_back(proxyConfig); + } emit accountSettingsUpdated(); } @@ -461,6 +476,11 @@ void AccountSettingsModel::handleRegistrationStateChanged ( CoreManager::getInstance()->getCore()->removeAuthInfo(authInfo); }); coreManager->getSettingsModel()->configureRlsUri(); + }else if(mRemovingProxies.contains(proxy)){ + mRemovingProxies.removeAll(proxy); + QTimer::singleShot(100, [proxy](){// removeProxyConfig cannot be called from callback + CoreManager::getInstance()->getCore()->removeProxyConfig(proxy); + }); } if(defaultProxyConfig == proxy) emit defaultRegistrationChanged(); diff --git a/linphone-app/src/components/settings/AccountSettingsModel.hpp b/linphone-app/src/components/settings/AccountSettingsModel.hpp index c35497cec..40913901b 100644 --- a/linphone-app/src/components/settings/AccountSettingsModel.hpp +++ b/linphone-app/src/components/settings/AccountSettingsModel.hpp @@ -26,6 +26,7 @@ #include #include #include +#include // ============================================================================= @@ -117,6 +118,8 @@ private: const std::shared_ptr &proxyConfig, linphone::RegistrationState state ); + + QVector > mRemovingProxies; }; Q_DECLARE_METATYPE(std::shared_ptr); diff --git a/linphone-app/src/utils/Constants.cpp b/linphone-app/src/utils/Constants.cpp index 66583ab5c..21aaeb47d 100644 --- a/linphone-app/src/utils/Constants.cpp +++ b/linphone-app/src/utils/Constants.cpp @@ -95,6 +95,7 @@ constexpr int Constants::RcVersionCurrent; // TODO: Remove hardcoded values. Use config directly. constexpr char Constants::LinphoneDomain[]; constexpr char Constants::DefaultContactParameters[]; +constexpr char Constants::DefaultContactParametersOnRemove[]; constexpr int Constants::DefaultExpires; constexpr char Constants::DownloadUrl[]; constexpr char Constants::PasswordRecoveryUrl[]; diff --git a/linphone-app/src/utils/Constants.hpp b/linphone-app/src/utils/Constants.hpp index 5c8f5883b..b9310f455 100644 --- a/linphone-app/src/utils/Constants.hpp +++ b/linphone-app/src/utils/Constants.hpp @@ -52,6 +52,7 @@ public: static constexpr char DefaultXmlrpcUri[] = "https://subscribe.linphone.org:444/wizard.php"; static constexpr char LinphoneDomain[] = "sip.linphone.org"; static constexpr char DefaultContactParameters[] = "message-expires=604800"; + static constexpr char DefaultContactParametersOnRemove[] = "message-expires=0"; static constexpr int DefaultExpires = 3600; static constexpr char DownloadUrl[] = "https://www.linphone.org/technical-corner/linphone"; static constexpr char PasswordRecoveryUrl[] = "https://subscribe.linphone.org/login";