Git commit 9610007dcf3da5d3896ac326ef9ec7f632e6c662 by Emmanuel Lepage Vall= ee. Committed on 30/09/2013 at 21:03. Pushed by lepagevalleeemmanuel into branch 'master'. [ #30834 ] Handle password saving correctly depending on the protocol M +3 -3 src/accountwizard.cpp M +14 -20 src/conf/dlgaccounts.cpp M +53 -15 src/lib/account.cpp M +18 -11 src/lib/account.h M +1 -1 src/lib/sflphone_const.h http://commits.kde.org/sflphone-kde/9610007dcf3da5d3896ac326ef9ec7f632e6c662 diff --git a/src/accountwizard.cpp b/src/accountwizard.cpp index 63de55b..f57850a 100644 --- a/src/accountwizard.cpp +++ b/src/accountwizard.cpp @@ -246,7 +246,7 @@ void AccountWizard::accept() field( FIELD_SIP_USER ) =3D QString( acc.user = ); field( FIELD_SIP_VOICEMAIL ).clear(); = - protocol =3D QString( Account::Protocol::SIP ); + protocol =3D QString( Account::ProtocolName::SIP ); server =3D QString( SFL_ACCOUNT_HOST ); password =3D QString( acc.passwd ); user =3D QString( acc.user ); @@ -265,7 +265,7 @@ void AccountWizard::accept() alias =3D field ( FIELD_SIP_ALIAS ).toString(); enabled =3D QString ( REGISTRATION_ENABLED_TRUE ) ; mailbox =3D field ( FIELD_SIP_VOICEMAIL ).toString(); - protocol =3D QString ( Account::Protocol::SIP ) ; + protocol =3D QString ( Account::ProtocolName::SIP ) ; server =3D field ( FIELD_SIP_SERVER ).toString(); password =3D field ( FIELD_SIP_PASSWORD ).toString(); user =3D field ( FIELD_SIP_USER ).toString(); @@ -280,7 +280,7 @@ void AccountWizard::accept() alias =3D field ( FIELD_IAX_ALIAS ).toString(); enabled =3D QString ( REGISTRATION_ENABLED_TRUE ) ; mailbox =3D field ( FIELD_IAX_VOICEMAIL ).toString(); - protocol =3D QString ( Account::Protocol::IAX ) ; + protocol =3D QString ( Account::ProtocolName::IAX ) ; server =3D field ( FIELD_IAX_SERVER ).toString(); password =3D field ( FIELD_IAX_PASSWORD ).toString(); user =3D field ( FIELD_IAX_USER ).toString(); diff --git a/src/conf/dlgaccounts.cpp b/src/conf/dlgaccounts.cpp index ba86625..043bace 100644 --- a/src/conf/dlgaccounts.cpp +++ b/src/conf/dlgaccounts.cpp @@ -205,11 +205,9 @@ void DlgAccounts::saveAccount(QModelIndex item) m_pProxyLE->setText(""); } = - QString protocolsTab[] =3D ACCOUNT_TYPES_TAB; - //ACCOUNT DETAILS // = WIDGET VALUE / - /**/account->setType ( protocolsTab[edit2_protoc= ol->currentIndex()] ); + /**/account->setType ( static_cast(edit2_protocol->currentIndex()) ); /**/account->setAlias ( edit1_alias->text() = ); /**/account->setHostname ( edit3_server->text() = ); /**/account->setUsername ( edit4_user->text() = ); @@ -299,25 +297,21 @@ void DlgAccounts::loadAccount(QModelIndex item) = edit1_alias->setText( account->alias()); = - QString protocolsTab[] =3D ACCOUNT_TYPES_TAB; - QList * protocolsList =3D new QList(); - for(int i =3D 0 ; i < (int) (sizeof(protocolsTab) / sizeof(QString)) ; = i++) { - protocolsList->append(protocolsTab[i]); - } - - const QString accountType =3D account->type(); - const int protocolIndex =3D protocolsList->indexOf(accountType); - delete protocolsList; - + const int protocolIndex =3D static_cast(account->type()); = - const QModelIndex idx =3D account->credentialsModel()->index(0,0); - disconnect(edit5_password, SIGNAL(textEdited(QString)), this , SLOT(mai= n_password_field_changed())); - if (idx.isValid() && !account->id().isEmpty()) { - edit5_password->setText(account->credentialsModel()->data(idx,Creden= tialModel::Role::PASSWORD).toString()); + if (account->type() =3D=3D Account::Protocol::SIP) { + const QModelIndex idx =3D account->credentialsModel()->index(0,0); + disconnect(edit5_password, SIGNAL(textEdited(QString)), this , SLOT(= main_password_field_changed())); + if (idx.isValid() && !account->id().isEmpty()) { + edit5_password->setText(account->credentialsModel()->data(idx,Cre= dentialModel::Role::PASSWORD).toString()); + } + else + edit5_password->setText(""); + connect(edit5_password, SIGNAL(textEdited(QString)), this , SLOT(mai= n_password_field_changed())); + } + else { + edit5_password->setText(account->password()); } - else - edit5_password->setText(""); - connect(edit5_password, SIGNAL(textEdited(QString)), this , SLOT(main_p= assword_field_changed())); = disconnect(this,SLOT(aliasChanged(QString))); connect(account,SIGNAL(aliasChanged(QString)),this,SLOT(aliasChanged(QS= tring))); diff --git a/src/lib/account.cpp b/src/lib/account.cpp index 0234ee9..442e337 100644 --- a/src/lib/account.cpp +++ b/src/lib/account.cpp @@ -250,26 +250,26 @@ QVariant Account::stateColor() const } = ///Create and return the credential model -CredentialModel* Account::credentialsModel() +CredentialModel* Account::credentialsModel() const { if (!m_pCredentials) - reloadCredentials(); + const_cast(this)->reloadCredentials(); return m_pCredentials; } = ///Create and return the audio codec model -AudioCodecModel* Account::audioCodecModel() +AudioCodecModel* Account::audioCodecModel() const { if (!m_pAudioCodecs) - reloadAudioCodecs(); + const_cast(this)->reloadAudioCodecs(); return m_pAudioCodecs; } = ///Create and return the video codec model -VideoCodecModel* Account::videoCodecModel() +VideoCodecModel* Account::videoCodecModel() const { if (!m_pVideoCodecs) - m_pVideoCodecs =3D new VideoCodecModel(this); + const_cast(this)->m_pVideoCodecs =3D new VideoCodecModel(c= onst_cast(this)); return m_pVideoCodecs; } = @@ -317,6 +317,19 @@ QString Account::proxy() const return accountDetail(Account::MapField::ROUTE); } = + +QString Account::password() const +{ + switch (type()) { + case Account::Protocol::SIP: + if (credentialsModel()->rowCount()) + return credentialsModel()->data(credentialsModel()->index(0,0)= ,CredentialModel::Role::PASSWORD).toString(); + case Account::Protocol::IAX: + return accountDetail(Account::MapField::PASSWORD); + }; + return ""; +} + /// bool Account::isDisplaySasOnce() const { = @@ -505,9 +518,15 @@ QString Account::registrationStatus() const } = ///Return the account type -QString Account::type() const +Account::Protocol Account::type() const { - return accountDetail(Account::MapField::TYPE); + const QString str =3D accountDetail(Account::MapField::TYPE); + if (str.isEmpty() || str =3D=3D Account::ProtocolName::SIP) + return Account::Protocol::SIP; + else if (str =3D=3D Account::ProtocolName::IAX) + return Account::Protocol::IAX; + qDebug() << "Warning: unhandled protocol name" << str << ", defaulting = to SIP"; + return Account::Protocol::SIP; } = ///Return the DTMF type @@ -534,7 +553,7 @@ QVariant Account::roleData(int role) const case Account::Role::Alias: return alias(); case Account::Role::Type: - return type(); + return static_cast(type()); case Account::Role::Hostname: return hostname(); case Account::Role::Username: @@ -617,7 +636,7 @@ QVariant Account::roleData(int role) const return var; } case Account::Role::TypeName: - return type(); + return static_cast(type()); case Account::Role::PresenceStatus: return PresenceStatusModel::instance()->currentStatus(); case Account::Role::PresenceMessage: @@ -675,9 +694,14 @@ void Account::setId(const QString& id) } = ///Set the account type, SIP or IAX -void Account::setType(const QString& detail) +void Account::setType(Account::Protocol proto) { - setAccountDetail(Account::MapField::TYPE ,detail); + switch (proto) { + case Account::Protocol::SIP: + setAccountDetail(Account::MapField::TYPE ,Account::ProtocolName::= SIP); + case Account::Protocol::IAX: + setAccountDetail(Account::MapField::TYPE ,Account::ProtocolName::= IAX); + }; } = ///The set account hostname, it can be an hostname or an IP address @@ -710,7 +734,19 @@ void Account::setProxy(const QString& detail) ///Set the main credential password void Account::setPassword(const QString& detail) { - setAccountDetail(Account::MapField::PASSWORD, detail); + switch (type()) { + case Account::Protocol::SIP: + if (credentialsModel()->rowCount()) + credentialsModel()->setData(credentialsModel()->index(0,0),det= ail,CredentialModel::Role::PASSWORD); + else { + const QModelIndex idx =3D credentialsModel()->addCredentials(); + credentialsModel()->setData(idx,detail,CredentialModel::Role::= PASSWORD); + } + break; + case Account::Protocol::IAX: + setAccountDetail(Account::MapField::PASSWORD, detail); + break; + }; } = ///Set the TLS (encryption) password @@ -910,8 +946,10 @@ void Account::setRoleData(int role, const QVariant& va= lue) switch(role) { case Account::Role::Alias: setAlias(value.toString()); - case Account::Role::Type: - setType(value.toString()); + case Account::Role::Type: { + const int proto =3D value.toInt(); + setType((proto>=3D0&&proto<=3D1)?static_cast(p= roto):Account::Protocol::SIP); + } case Account::Role::Hostname: setHostname(value.toString()); case Account::Role::Username: diff --git a/src/lib/account.h b/src/lib/account.h index d50ce21..c1251f3 100644 --- a/src/lib/account.h +++ b/src/lib/account.h @@ -56,7 +56,7 @@ class LIB_EXPORT Account : public QObject { = //Properties Q_PROPERTY(QString alias READ alias = WRITE setAlias ) - Q_PROPERTY(QString type READ type = WRITE setType ) + Q_PROPERTY(Account::Protocol type READ type = WRITE setType ) Q_PROPERTY(QString hostname READ hostname = WRITE setHostname ) Q_PROPERTY(QString username READ username = WRITE setUsername ) Q_PROPERTY(QString mailbox READ mailbox = WRITE setMailbox ) @@ -94,7 +94,7 @@ class LIB_EXPORT Account : public QObject { Q_PROPERTY(bool publishedSameAsLocal READ isPublished= SameAsLocal WRITE setPublishedSameAsLocal ) Q_PROPERTY(bool ringtoneEnabled READ isRingtoneE= nabled WRITE setRingtoneEnabled ) Q_PROPERTY(DtmfType dTMFType READ DTMFType = WRITE setDTMFType ) - Q_PROPERTY(QString typeName READ type = WRITE setType ) +// Q_PROPERTY(QString typeName READ type = WRITE setType ) Q_PROPERTY(bool presenceStatus READ presenceSta= tus ) Q_PROPERTY(QString presenceMessage READ presenceMes= sage ) = @@ -217,12 +217,18 @@ class LIB_EXPORT Account : public QObject { }; }; = - class Protocol { + class ProtocolName { public: constexpr static const char* SIP =3D "SIP"; constexpr static const char* IAX =3D "IAX"; }; = + enum class Protocol { + SIP =3D 0, + IAX =3D 1, + }; + Q_ENUMS(Protocol) + /** *Perform an action * @return If the state changed @@ -241,9 +247,9 @@ class LIB_EXPORT Account : public QObject { QString stateColorName() const; QVariant stateColor() const; = - Q_INVOKABLE CredentialModel* credentialsModel(); - Q_INVOKABLE AudioCodecModel* audioCodecModel (); - Q_INVOKABLE VideoCodecModel* videoCodecModel (); + Q_INVOKABLE CredentialModel* credentialsModel() const; + Q_INVOKABLE AudioCodecModel* audioCodecModel () const; + Q_INVOKABLE VideoCodecModel* videoCodecModel () const; = //Getters QString hostname () const; @@ -252,6 +258,7 @@ class LIB_EXPORT Account : public QObject { QString username () const; QString mailbox () const; QString proxy () const; + QString password () const; bool isDisplaySasOnce () const; bool isSrtpRtpFallback () const; bool isZrtpDisplaySas () const; @@ -281,18 +288,18 @@ class LIB_EXPORT Account : public QObject { int localPort () const; QString localInterface () const; QString registrationStatus () const; - QString type () const; DtmfType DTMFType () const; bool presenceStatus () const; QString presenceMessage () const; - TlsMethodModel::Type tlsMethod () const; + Account::Protocol type () const; + TlsMethodModel::Type tlsMethod () const; KeyExchangeModel::Type keyExchange () const; QVariant roleData (int role) const; = //Setters void setId (const QString& id); void setAlias (const QString& detail); - void setType (const QString& detail); + void setType (Account::Protocol proto); void setHostname (const QString& detail); void setUsername (const QString& detail); void setMailbox (const QString& detail); @@ -350,9 +357,9 @@ class LIB_EXPORT Account : public QObject { Account(); = //Attributes - QString m_AccountId ; + QString m_AccountId ; QHash m_hAccountDetails; - = + = public Q_SLOTS: void setEnabled(bool checked); diff --git a/src/lib/sflphone_const.h b/src/lib/sflphone_const.h index 2289dd1..84360f3 100644 --- a/src/lib/sflphone_const.h +++ b/src/lib/sflphone_const.h @@ -116,7 +116,7 @@ /** Maybe to remove **/ static const QString REGISTRATION_ENABLED_TRUE("true"); static const QString REGISTRATION_ENABLED_FALSE("false"); -#define ACCOUNT_TYPES_TAB {QString(Account::Protocol::SIP)= , QString(Account::Protocol::IAX)} +// #define ACCOUNT_TYPES_TAB {QString(Account::ProtocolNam= e::SIP), QString(Account::ProtocolName::IAX)} /*********************/ = /** Constant variables */