From 30d8de514963245de4876d2fedc3240fd4bffbd7 Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Fri, 6 Jan 2017 16:08:28 +0100 Subject: [PATCH] feat(app): account settings & settings in progress. --- tests/src/app/App.cpp | 8 +++ tests/src/components/presence/Presence.hpp | 1 + .../settings/AccountSettingsModel.cpp | 52 +++++++++++-------- .../settings/AccountSettingsModel.hpp | 27 +++------- .../src/components/settings/SettingsModel.cpp | 23 ++++++-- .../src/components/settings/SettingsModel.hpp | 15 +++++- .../Linphone/Account/AccountStatus.qml | 8 +-- tests/ui/views/App/MainWindow/MainWindow.qml | 4 +- 8 files changed, 88 insertions(+), 50 deletions(-) diff --git a/tests/src/app/App.cpp b/tests/src/app/App.cpp index d73978137..039637242 100644 --- a/tests/src/app/App.cpp +++ b/tests/src/app/App.cpp @@ -9,6 +9,7 @@ #include "../components/contacts/ContactsListProxyModel.hpp" #include "../components/core/CoreManager.hpp" #include "../components/settings/AccountSettingsModel.hpp" +#include "../components/settings/SettingsModel.hpp" #include "../components/timeline/TimelineModel.hpp" #include "../components/smart-search-bar/SmartSearchBarModel.hpp" @@ -143,6 +144,13 @@ void App::registerTypes () { } ); + qmlRegisterSingletonType( + "Linphone", 1, 0, "SettingsModel", + [](QQmlEngine *, QJSEngine *) -> QObject *{ + return new SettingsModel(); + } + ); + qmlRegisterSingletonType( "Linphone", 1, 0, "TimelineModel", [](QQmlEngine *, QJSEngine *) -> QObject *{ diff --git a/tests/src/components/presence/Presence.hpp b/tests/src/components/presence/Presence.hpp index d736b4cfd..b820665b2 100644 --- a/tests/src/components/presence/Presence.hpp +++ b/tests/src/components/presence/Presence.hpp @@ -1,6 +1,7 @@ #ifndef PRESENCE_H_ #define PRESENCE_H_ +#include #include // ============================================================================= diff --git a/tests/src/components/settings/AccountSettingsModel.cpp b/tests/src/components/settings/AccountSettingsModel.cpp index 746f922b7..5dffb1399 100644 --- a/tests/src/components/settings/AccountSettingsModel.cpp +++ b/tests/src/components/settings/AccountSettingsModel.cpp @@ -1,17 +1,33 @@ +#include + +#include "../../utils.hpp" +#include "../core/CoreManager.hpp" + #include "AccountSettingsModel.hpp" -// =================================================================== +// ============================================================================= -AccountSettingsModel::AccountSettingsModel (QObject *parent) : - QObject(parent) {} +AccountSettingsModel::AccountSettingsModel (QObject *parent) : QObject(parent) { + m_default_proxy = CoreManager::getInstance()->getCore()->getDefaultProxyConfig(); +} QString AccountSettingsModel::getUsername () const { - return "Edward Miller "; + shared_ptr address = getDefaultSipAddress(); + const string &display_name = address->getDisplayName(); + + return ::Utils::linphoneStringToQString( + display_name.empty() ? address->getUsername() : display_name + ); } void AccountSettingsModel::setUsername (const QString &username) { - // NOTHING TODO. - (void) username; + shared_ptr address = getDefaultSipAddress(); + + if (address->setDisplayName(::Utils::qStringToLinphoneString(username))) + qWarning() << QStringLiteral("Unable to set displayName on sip address: `%1`.") + .arg(::Utils::linphoneStringToQString(address->asStringUriOnly())); + + emit accountUpdated(); } Presence::PresenceLevel AccountSettingsModel::getPresenceLevel () const { @@ -23,22 +39,14 @@ Presence::PresenceStatus AccountSettingsModel::getPresenceStatus () const { } QString AccountSettingsModel::getSipAddress () const { - return QString("e.miller@sip-linphone.org"); + return ::Utils::linphoneStringToQString(getDefaultSipAddress()->asStringUriOnly()); } -bool AccountSettingsModel::getAutoAnswerStatus () const { - return true; +// ----------------------------------------------------------------------------- + +shared_ptr AccountSettingsModel::getDefaultSipAddress () const { + if (m_default_proxy) + return m_default_proxy->getIdentityAddress(); + + return CoreManager::getInstance()->getCore()->getPrimaryContactParsed(); } - -// TODO: TMP -/* - shared_ptr cfg = m_core->getDefaultProxyConfig(); - shared_ptr address = cfg->getIdentityAddress(); - shared_ptr auth_info = m_core->findAuthInfo("", address->getUsername(), cfg->getDomain()); - - if (auth_info) - qDebug() << "OK"; - else - qDebug() << "FAIL"; - - */ diff --git a/tests/src/components/settings/AccountSettingsModel.hpp b/tests/src/components/settings/AccountSettingsModel.hpp index f2243bb18..2a10510d3 100644 --- a/tests/src/components/settings/AccountSettingsModel.hpp +++ b/tests/src/components/settings/AccountSettingsModel.hpp @@ -10,18 +10,8 @@ class AccountSettingsModel : public QObject { Q_OBJECT; - Q_PROPERTY( - QString username - READ getUsername - // WRITE setUsername - CONSTANT // TODO: TMP - ); - - Q_PROPERTY( - QString sipAddress - READ getSipAddress - CONSTANT - ); + Q_PROPERTY(QString username READ getUsername WRITE setUsername NOTIFY accountUpdated); + Q_PROPERTY(QString sipAddress READ getSipAddress NOTIFY accountUpdated); Q_PROPERTY( Presence::PresenceLevel presenceLevel @@ -35,15 +25,12 @@ class AccountSettingsModel : public QObject { CONSTANT ); - Q_PROPERTY( - bool autoAnswerStatus - READ getAutoAnswerStatus - CONSTANT - ); - public: AccountSettingsModel (QObject *parent = Q_NULLPTR); +signals: + void accountUpdated (); + private: QString getUsername () const; void setUsername (const QString &username); @@ -53,7 +40,9 @@ private: QString getSipAddress () const; - bool getAutoAnswerStatus () const; + std::shared_ptr getDefaultSipAddress () const; + + std::shared_ptr m_default_proxy; }; #endif // ACCOUNT_SETTINGS_MODEL_H_ diff --git a/tests/src/components/settings/SettingsModel.cpp b/tests/src/components/settings/SettingsModel.cpp index 4552d7b28..29d715a48 100644 --- a/tests/src/components/settings/SettingsModel.cpp +++ b/tests/src/components/settings/SettingsModel.cpp @@ -1,7 +1,24 @@ +#include "../core/CoreManager.hpp" + #include "SettingsModel.hpp" -// =================================================================== +using namespace std; -SettingsModel::SettingsModel (QObject *parent) : - QObject(parent) { +// ============================================================================= + +const string SettingsModel::UI_SECTION("ui"); + +SettingsModel::SettingsModel (QObject *parent) : QObject(parent) { + // TODO: Uncomment when `getConfig` will be available. + // m_config = CoreManager::getInstance()->getCore()->getConfig(); +} + +bool SettingsModel::getAutoAnswerStatus () const { + return true; // TODO: See above. + return !!m_config->getInt(UI_SECTION, "auto_answer", 0); +} + +bool SettingsModel::setAutoAnswerStatus (bool status) { + m_config->setInt(UI_SECTION, "auto_answer", status); + emit autoAnswerStatusChanged(status); } diff --git a/tests/src/components/settings/SettingsModel.hpp b/tests/src/components/settings/SettingsModel.hpp index fbb9f722a..cffa208d9 100644 --- a/tests/src/components/settings/SettingsModel.hpp +++ b/tests/src/components/settings/SettingsModel.hpp @@ -1,20 +1,31 @@ #ifndef SETTINGS_MODEL_H_ #define SETTINGS_MODEL_H_ +#include #include #include "AccountSettingsModel.hpp" -// =================================================================== +// ============================================================================= class SettingsModel : public QObject { Q_OBJECT; + Q_PROPERTY(bool autoAnswerStatus READ getAutoAnswerStatus WRITE setAutoAnswerStatus NOTIFY autoAnswerStatusChanged); + public: SettingsModel (QObject *parent = Q_NULLPTR); +signals: + void autoAnswerStatusChanged (bool status); + private: - QList accountsSettings; + bool getAutoAnswerStatus () const; + bool setAutoAnswerStatus (bool status); + + std::shared_ptr m_config; + + static const std::string UI_SECTION; }; #endif // SETTINGS_MODEL_H_ diff --git a/tests/ui/modules/Linphone/Account/AccountStatus.qml b/tests/ui/modules/Linphone/Account/AccountStatus.qml index 28eb74934..72a248031 100644 --- a/tests/ui/modules/Linphone/Account/AccountStatus.qml +++ b/tests/ui/modules/Linphone/Account/AccountStatus.qml @@ -11,6 +11,8 @@ Item { // --------------------------------------------------------------------------- + property var account + signal clicked // --------------------------------------------------------------------------- @@ -29,7 +31,7 @@ Item { Layout.preferredHeight: AccountStatusStyle.presenceLevel.size Layout.preferredWidth: AccountStatusStyle.presenceLevel.size icon: 'chevron' - level: AccountSettingsModel.presenceLevel + level: account.presenceLevel } Text { @@ -39,7 +41,7 @@ Item { elide: Text.ElideRight font.bold: true font.pointSize: AccountStatusStyle.username.fontSize - text: AccountSettingsModel.username + text: account.username verticalAlignment: Text.AlignBottom } } @@ -49,7 +51,7 @@ Item { elide: Text.ElideRight font.pointSize: AccountStatusStyle.sipAddress.fontSize height: parent.height / 2 - text: AccountSettingsModel.sipAddress + text: account.sipAddress verticalAlignment: Text.AlignTop width: parent.width } diff --git a/tests/ui/views/App/MainWindow/MainWindow.qml b/tests/ui/views/App/MainWindow/MainWindow.qml index bd77ec2d2..e8149f2c0 100644 --- a/tests/ui/views/App/MainWindow/MainWindow.qml +++ b/tests/ui/views/App/MainWindow/MainWindow.qml @@ -113,6 +113,8 @@ ApplicationWindow { Layout.fillHeight: parent.height Layout.preferredWidth: MainWindowStyle.accountStatus.width + account: AccountSettingsModel + onClicked: Utils.openWindow('ManageAccounts', window) } @@ -120,7 +122,7 @@ ApplicationWindow { width: MainWindowStyle.autoAnswerStatus.width Icon { - icon: AccountSettingsModel.autoAnswerStatus + icon: SettingsModel.autoAnswerStatus ? 'auto_answer' : '' iconSize: MainWindowStyle.autoAnswerStatus.iconSize