Fix transport setting in account parameters

This commit is contained in:
Christophe Deschamps 2025-01-29 12:44:29 +01:00
parent b91c3842a1
commit 521c4eeb02
3 changed files with 36 additions and 19 deletions

View file

@ -60,8 +60,8 @@ AccountCore::AccountCore(const std::shared_ptr<linphone::Account> &account) : QO
mRegisterEnabled = params->registerEnabled();
mMwiServerAddress =
params->getMwiServerAddress() ? Utils::coreStringToAppString(params->getMwiServerAddress()->asString()) : "";
mTransports << "TCP"
<< "UDP"
mTransports << "UDP"
<< "TCP"
<< "TLS"
<< "DTLS";
mTransport = LinphoneEnums::toString(LinphoneEnums::fromLinphone(params->getTransport()));
@ -521,16 +521,24 @@ void AccountCore::setVoicemailAddress(QString value) {
void AccountCore::setTransport(QString value) {
if (mTransport != value) {
mTransport = value;
emit transportChanged();
mAccountModelConnection->invokeToModel([this, value] {
mustBeInLinphoneThread(getClassName() + Q_FUNC_INFO);
LinphoneEnums::TransportType transport;
LinphoneEnums::fromString(value, &transport);
mAccountModel->setTransport(LinphoneEnums::toLinphone(transport), false);
});
setIsSaved(false);
}
}
void AccountCore::setServerAddress(QString value) {
if (mServerAddress != value) {
mServerAddress = value;
emit serverAddressChanged();
mAccountModelConnection->invokeToModel([this, value, transportString = mTransport] {
LinphoneEnums::TransportType transport;
LinphoneEnums::fromString(transportString, &transport);
mustBeInLinphoneThread(getClassName() + Q_FUNC_INFO);
mAccountModel->setServerAddress(value, LinphoneEnums::toLinphone(transport), false);
});
setIsSaved(false);
}
}
@ -720,8 +728,8 @@ void AccountCore::writeIntoModel(std::shared_ptr<AccountModel> model) const {
model->setMwiServerAddress(mMwiServerAddress);
LinphoneEnums::TransportType transport;
LinphoneEnums::fromString(mTransport, &transport);
model->setTransport(LinphoneEnums::toLinphone(transport));
model->setServerAddress(mServerAddress);
model->setTransport(LinphoneEnums::toLinphone(transport), true);
model->setServerAddress(mServerAddress, LinphoneEnums::toLinphone(transport), true);
model->setOutboundProxyEnabled(mOutboundProxyEnabled);
model->setStunServer(mStunServer);
model->setIceEnabled(mIceEnabled);

View file

@ -92,7 +92,7 @@ void AccountModel::setPictureUri(QString uri) {
// Hack because Account doesn't provide callbacks on updated data
// emit pictureUriChanged(uri);
auto core = CoreModel::getInstance()->getCore();
emit CoreModel::getInstance()->defaultAccountChanged(core, core->getDefaultAccount());
emit CoreModel::getInstance() -> defaultAccountChanged(core, core->getDefaultAccount());
}
void AccountModel::onDefaultAccountChanged() {
@ -150,7 +150,7 @@ void AccountModel::setDisplayName(QString displayName) {
// Hack because Account doesn't provide callbacks on updated data
// emit displayNameChanged(displayName);
auto core = CoreModel::getInstance()->getCore();
emit CoreModel::getInstance()->defaultAccountChanged(core, core->getDefaultAccount());
emit CoreModel::getInstance() -> defaultAccountChanged(core, core->getDefaultAccount());
}
void AccountModel::setDialPlan(int index) {
@ -222,26 +222,35 @@ linphone::TransportType AccountModel::getTransport() const {
return mMonitor->getParams()->getTransport();
}
void AccountModel::setTransport(linphone::TransportType value) {
void AccountModel::setTransport(linphone::TransportType value, bool save) {
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
auto params = mMonitor->getParams()->clone();
params->setTransport(value);
mMonitor->setParams(params);
emit transportChanged(value);
if (params->getServerAddress()) {
auto addressClone = params->getServerAddress()->clone();
addressClone->setTransport(value);
params->setServerAddress(addressClone);
if (save) mMonitor->setParams(params);
emit transportChanged(value);
emit serverAddressChanged(Utils::coreStringToAppString(addressClone->asString()));
}
}
QString AccountModel::getServerAddress() const {
return Utils::coreStringToAppString(mMonitor->getParams()->getServerAddress()->asString());
if (mMonitor->getParams()->getServerAddress())
return Utils::coreStringToAppString(mMonitor->getParams()->getServerAddress()->asString());
else return "";
}
void AccountModel::setServerAddress(QString value) {
void AccountModel::setServerAddress(QString value, linphone::TransportType transport, bool save) {
mustBeInLinphoneThread(log().arg(Q_FUNC_INFO));
auto params = mMonitor->getParams()->clone();
auto address = CoreModel::getInstance()->getCore()->interpretUrl(Utils::appStringToCoreString(value), false);
if (address) {
if (save) address->setTransport(transport);
params->setServerAddress(address);
mMonitor->setParams(params);
if (save) mMonitor->setParams(params);
emit serverAddressChanged(value);
emit transportChanged(address->getTransport());
} else qWarning() << "Unable to set ServerAddress, failed creating address from" << value;
}

View file

@ -57,9 +57,9 @@ public:
QString getMwiServerAddress() const;
void setMwiServerAddress(QString value);
linphone::TransportType getTransport() const;
void setTransport(linphone::TransportType value);
void setTransport(linphone::TransportType value, bool save);
QString getServerAddress() const;
void setServerAddress(QString value);
void setServerAddress(QString value, linphone::TransportType transport, bool save);
bool getOutboundProxyEnabled() const;
void setOutboundProxyEnabled(bool value);
QString getStunServer() const;