mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-01-20 04:58:09 +00:00
feat(src/components/assistant/AssistantModel): supports non-linphone account
This commit is contained in:
parent
a76b0089b2
commit
d00b77d5d1
9 changed files with 216 additions and 54 deletions
|
|
@ -133,6 +133,7 @@ set(SOURCES
|
|||
src/components/timeline/TimelineModel.cpp
|
||||
src/externals/single-application/SingleApplication.cpp
|
||||
src/main.cpp
|
||||
src/LinphoneUtils.cpp
|
||||
src/Utils.cpp
|
||||
)
|
||||
|
||||
|
|
@ -181,6 +182,7 @@ set(HEADERS
|
|||
src/components/timeline/TimelineModel.hpp
|
||||
src/externals/single-application/SingleApplication.hpp
|
||||
src/externals/single-application/SingleApplicationPrivate.hpp
|
||||
src/LinphoneUtils.hpp
|
||||
src/Utils.hpp
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -1402,6 +1402,10 @@ your friend's SIP address or username.</translation>
|
|||
<source>transportLabel</source>
|
||||
<translation>Transport</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>addOtherSipAccountError</source>
|
||||
<translation>Unable to add this account.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ZrtpTokenAuthentication</name>
|
||||
|
|
|
|||
|
|
@ -1401,6 +1401,10 @@ un chat ou ajouter un contact.</translation>
|
|||
<source>transportLabel</source>
|
||||
<translation>Transport</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>addOtherSipAccountError</source>
|
||||
<translation>Impossible d'ajouter ce compte.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ZrtpTokenAuthentication</name>
|
||||
|
|
|
|||
36
linphone-desktop/src/LinphoneUtils.cpp
Normal file
36
linphone-desktop/src/LinphoneUtils.cpp
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
* LinphoneUtils.cpp
|
||||
* Copyright (C) 2017 Belledonne Communications, Grenoble, France
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* Created on: June 2, 2017
|
||||
* Author: Ronan Abhamon
|
||||
*/
|
||||
|
||||
#include "LinphoneUtils.hpp"
|
||||
|
||||
// =============================================================================
|
||||
|
||||
linphone::TransportType LinphoneUtils::stringToTransportType (const QString &transport) {
|
||||
if (transport == "TCP")
|
||||
return linphone::TransportType::TransportTypeTcp;
|
||||
if (transport == "UDP")
|
||||
return linphone::TransportType::TransportTypeUdp;
|
||||
if (transport == "TLS")
|
||||
return linphone::TransportType::TransportTypeTls;
|
||||
|
||||
return linphone::TransportType::TransportTypeDtls;
|
||||
}
|
||||
35
linphone-desktop/src/LinphoneUtils.hpp
Normal file
35
linphone-desktop/src/LinphoneUtils.hpp
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* LinphoneUtils.hpp
|
||||
* Copyright (C) 2017 Belledonne Communications, Grenoble, France
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
* Created on: June 2, 2017
|
||||
* Author: Ronan Abhamon
|
||||
*/
|
||||
|
||||
#ifndef LINPHONE_UTILS_H_
|
||||
#define LINPHONE_UTILS_H_
|
||||
|
||||
#include <linphone++/linphone.hh>
|
||||
#include <QString>
|
||||
|
||||
// =============================================================================
|
||||
|
||||
namespace LinphoneUtils {
|
||||
linphone::TransportType stringToTransportType (const QString &transport);
|
||||
}
|
||||
|
||||
#endif // ifndef LINPHONE_UTILS_H_
|
||||
|
|
@ -21,6 +21,7 @@
|
|||
*/
|
||||
|
||||
#include "../../app/paths/Paths.hpp"
|
||||
#include "../../LinphoneUtils.hpp"
|
||||
#include "../../Utils.hpp"
|
||||
#include "../core/CoreManager.hpp"
|
||||
|
||||
|
|
@ -184,6 +185,59 @@ void AssistantModel::reset () {
|
|||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
bool AssistantModel::addOtherSipAccount (const QVariantMap &map) {
|
||||
CoreManager *coreManager = CoreManager::getInstance();
|
||||
|
||||
shared_ptr<linphone::Factory> factory = linphone::Factory::get();
|
||||
shared_ptr<linphone::Core> core = coreManager->getCore();
|
||||
shared_ptr<linphone::ProxyConfig> proxyConfig = core->createProxyConfig();
|
||||
|
||||
const QString &domain = map["sipDomain"].toString();
|
||||
|
||||
QString sipAddress = QStringLiteral("sip:%1@%2")
|
||||
.arg(map["username"].toString()).arg(domain);
|
||||
|
||||
// Server address.
|
||||
{
|
||||
shared_ptr<linphone::Address> address = factory->createAddress(
|
||||
::Utils::appStringToCoreString(QStringLiteral("sip:%1").arg(domain))
|
||||
);
|
||||
address->setTransport(LinphoneUtils::stringToTransportType(map["transport"].toString()));
|
||||
|
||||
if (proxyConfig->setServerAddr(address->asString())) {
|
||||
qWarning() << QStringLiteral("Unable to add server address: `%1`.")
|
||||
.arg(::Utils::coreStringToAppString(address->asString()));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Sip Address.
|
||||
shared_ptr<linphone::Address> address = factory->createAddress(::Utils::appStringToCoreString(sipAddress));
|
||||
if (!address) {
|
||||
qWarning() << QStringLiteral("Unable to create sip address object from: `%1`.").arg(sipAddress);
|
||||
return false;
|
||||
}
|
||||
|
||||
address->setDisplayName(::Utils::appStringToCoreString(map["displayName"].toString()));
|
||||
proxyConfig->setIdentityAddress(address);
|
||||
|
||||
// AuthInfo.
|
||||
core->addAuthInfo(
|
||||
factory->createAuthInfo(
|
||||
address->getUsername(), // Username.
|
||||
"", // User ID.
|
||||
::Utils::appStringToCoreString(map["password"].toString()), // Password.
|
||||
"", // HA1.
|
||||
"", // Realm.
|
||||
address->getDomain() // Domain.
|
||||
)
|
||||
);
|
||||
|
||||
return coreManager->getAccountSettingsModel()->addOrUpdateProxyConfig(proxyConfig);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
QString AssistantModel::getEmail () const {
|
||||
return ::Utils::coreStringToAppString(mAccountCreator->getEmail());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,6 +51,8 @@ public:
|
|||
|
||||
Q_INVOKABLE void reset ();
|
||||
|
||||
Q_INVOKABLE bool addOtherSipAccount (const QVariantMap &map);
|
||||
|
||||
signals:
|
||||
void emailChanged (const QString &email, const QString &error);
|
||||
void passwordChanged (const QString &password, const QString &error);
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
#include <QSet>
|
||||
#include <QtDebug>
|
||||
|
||||
#include "../../LinphoneUtils.hpp"
|
||||
#include "../../Utils.hpp"
|
||||
#include "../chat/ChatModel.hpp"
|
||||
#include "../core/CoreManager.hpp"
|
||||
|
|
@ -132,8 +133,7 @@ SipAddressObserver *SipAddressesModel::getSipAddressObserver (const QString &sip
|
|||
const QString &sipAddress = model->getSipAddress();
|
||||
if (mObservers.remove(sipAddress, model) == 0)
|
||||
qWarning() << QStringLiteral("Unable to remove sip address `%1` from observers.").arg(sipAddress);
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
return model;
|
||||
}
|
||||
|
|
@ -178,15 +178,7 @@ QString SipAddressesModel::addTransportToSipAddress (const QString &sipAddress,
|
|||
if (!address)
|
||||
return "";
|
||||
|
||||
QString transportStr = transport.toUpper();
|
||||
if (transportStr == "TCP")
|
||||
address->setTransport(linphone::TransportType::TransportTypeTcp);
|
||||
else if (transportStr == "UDP")
|
||||
address->setTransport(linphone::TransportType::TransportTypeUdp);
|
||||
else if (transportStr == "TLS")
|
||||
address->setTransport(linphone::TransportType::TransportTypeTls);
|
||||
else
|
||||
address->setTransport(linphone::TransportType::TransportTypeDtls);
|
||||
address->setTransport(LinphoneUtils::stringToTransportType(transport.toUpper()));
|
||||
|
||||
return ::Utils::coreStringToAppString(address->asString());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,12 @@
|
|||
import QtQuick 2.7
|
||||
|
||||
import Common 1.0
|
||||
import Linphone 1.0
|
||||
|
||||
// =============================================================================
|
||||
|
||||
AssistantAbstractView {
|
||||
mainAction: (function () {
|
||||
console.log('TODO')
|
||||
})
|
||||
mainAction: requestBlock.execute
|
||||
|
||||
mainActionEnabled: username.text.length &&
|
||||
sipDomain.text.length &&
|
||||
|
|
@ -17,56 +18,88 @@ AssistantAbstractView {
|
|||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
Form {
|
||||
Column {
|
||||
anchors.fill: parent
|
||||
orientation: Qt.Vertical
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('usernameLabel')
|
||||
Form {
|
||||
dealWithErrors: true
|
||||
orientation: Qt.Vertical
|
||||
width: parent.width
|
||||
|
||||
TextField {
|
||||
id: username
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('usernameLabel')
|
||||
|
||||
TextField {
|
||||
id: username
|
||||
}
|
||||
}
|
||||
|
||||
FormGroup {
|
||||
label: qsTr('displayNameLabel')
|
||||
|
||||
TextField {
|
||||
id: displayName
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('sipDomainLabel')
|
||||
|
||||
TextField {
|
||||
id: sipDomain
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('passwordLabel')
|
||||
|
||||
PasswordField {
|
||||
id: password
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('transportLabel')
|
||||
|
||||
ComboBox {
|
||||
id: transport
|
||||
|
||||
model: [ 'UDP', 'TCP', 'TLS', 'DTLS' ]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('displayNameLabel')
|
||||
RequestBlock {
|
||||
id: requestBlock
|
||||
|
||||
TextField {}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('sipDomainLabel')
|
||||
|
||||
TextField {
|
||||
id: sipDomain
|
||||
action: (function () {
|
||||
if (!assistantModel.addOtherSipAccount({
|
||||
username: username.text,
|
||||
displayName: displayName.text,
|
||||
sipDomain: sipDomain.text,
|
||||
password: password.text,
|
||||
transport: transport.model[transport.currentIndex]
|
||||
})) {
|
||||
requestBlock.stop(qsTr('addOtherSipAccountError'))
|
||||
} else {
|
||||
requestBlock.stop('')
|
||||
window.setView('Home')
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('passwordLabel')
|
||||
|
||||
PasswordField {
|
||||
id: password
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormLine {
|
||||
FormGroup {
|
||||
label: qsTr('transportLabel')
|
||||
|
||||
ExclusiveButtons {
|
||||
texts: [ 'UDP', 'TCP', 'TLS' ]
|
||||
}
|
||||
}
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
|
||||
AssistantModel {
|
||||
id: assistantModel
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue