[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [sflphone-kde] src: [ #30834 ] Handle password saving correctly depending on the protocol
From:       Emmanuel Lepage Vallee <emmanuel.lepage () savoirfairelinux ! com>
Date:       2013-09-30 21:06:37
Message-ID: E1VQkft-0006Yi-Es () scm ! kde ! org
[Download RAW message or body]

Git commit 9610007dcf3da5d3896ac326ef9ec7f632e6c662 by Emmanuel Lepage Vallee.
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      ) = QString( acc.user                         );
          field( FIELD_SIP_VOICEMAIL ).clear();
 
-         protocol = QString( Account::Protocol::SIP    );
+         protocol = QString( Account::ProtocolName::SIP    );
          server   = QString( SFL_ACCOUNT_HOST          );
          password = QString( acc.passwd                );
          user     = QString( acc.user                  );
@@ -265,7 +265,7 @@ void AccountWizard::accept()
       alias    = field   ( FIELD_SIP_ALIAS           ).toString();
       enabled  = QString ( REGISTRATION_ENABLED_TRUE )           ;
       mailbox  = field   ( FIELD_SIP_VOICEMAIL       ).toString();
-      protocol = QString ( Account::Protocol::SIP    )           ;
+      protocol = QString ( Account::ProtocolName::SIP    )           ;
       server   = field   ( FIELD_SIP_SERVER          ).toString();
       password = field   ( FIELD_SIP_PASSWORD        ).toString();
       user     = field   ( FIELD_SIP_USER            ).toString();
@@ -280,7 +280,7 @@ void AccountWizard::accept()
       alias    = field   ( FIELD_IAX_ALIAS           ).toString();
       enabled  = QString ( REGISTRATION_ENABLED_TRUE )           ;
       mailbox  = field   ( FIELD_IAX_VOICEMAIL       ).toString();
-      protocol = QString ( Account::Protocol::IAX    )           ;
+      protocol = QString ( Account::ProtocolName::IAX    )           ;
       server   = field   ( FIELD_IAX_SERVER          ).toString();
       password = field   ( FIELD_IAX_PASSWORD        ).toString();
       user     = 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[] = ACCOUNT_TYPES_TAB;
-
    //ACCOUNT DETAILS
    //                                                                     WIDGET VALUE                   \
                /
-   /**/account->setType                        ( protocolsTab[edit2_protocol->currentIndex()]            \
); +   /**/account->setType                        ( \
static_cast<Account::Protocol>(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[] = ACCOUNT_TYPES_TAB;
-   QList<QString> * protocolsList = new QList<QString>();
-   for(int i = 0 ; i < (int) (sizeof(protocolsTab) / sizeof(QString)) ; i++) {
-      protocolsList->append(protocolsTab[i]);
-   }
-
-   const QString accountType = account->type();
-   const int protocolIndex = protocolsList->indexOf(accountType);
-   delete protocolsList;
-
+   const int protocolIndex = static_cast<int>(account->type());
 
-   const QModelIndex idx = 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,CredentialModel::Role::PASSWORD).toString());
 +   if (account->type() == Account::Protocol::SIP) {
+      const QModelIndex idx = 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,CredentialModel::Role::PASSWORD).toString());
 +      }
+      else
+         edit5_password->setText("");
+      connect(edit5_password, SIGNAL(textEdited(QString)), this , SLOT(main_password_field_changed()));
+   }
+   else {
+      edit5_password->setText(account->password());
    }
-   else
-      edit5_password->setText("");
-   connect(edit5_password, SIGNAL(textEdited(QString)), this , SLOT(main_password_field_changed()));
 
    disconnect(this,SLOT(aliasChanged(QString)));
    connect(account,SIGNAL(aliasChanged(QString)),this,SLOT(aliasChanged(QString)));
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<Account*>(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<Account*>(this)->reloadAudioCodecs();
    return m_pAudioCodecs;
 }
 
 ///Create and return the video codec model
-VideoCodecModel* Account::videoCodecModel()
+VideoCodecModel* Account::videoCodecModel() const
 {
    if (!m_pVideoCodecs)
-      m_pVideoCodecs = new VideoCodecModel(this);
+      const_cast<Account*>(this)->m_pVideoCodecs = new VideoCodecModel(const_cast<Account*>(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 = accountDetail(Account::MapField::TYPE);
+   if (str.isEmpty() || str == Account::ProtocolName::SIP)
+      return Account::Protocol::SIP;
+   else if (str == 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<int>(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<int>(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),detail,CredentialModel::Role::PASSWORD);
 +         else {
+            const QModelIndex idx = 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& value)
    switch(role) {
       case Account::Role::Alias:
          setAlias(value.toString());
-      case Account::Role::Type:
-         setType(value.toString());
+      case Account::Role::Type: {
+         const int proto = value.toInt();
+         setType((proto>=0&&proto<=1)?static_cast<Account::Protocol>(proto):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 isPublishedSameAsLocal        WRITE setPublishedSameAsLocal        )  \
Q_PROPERTY(bool           ringtoneEnabled              READ isRingtoneEnabled             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 \
presenceStatus                                                     )  Q_PROPERTY(QString        \
presenceMessage              READ presenceMessage                                                    )  
@@ -217,12 +217,18 @@ class LIB_EXPORT Account : public QObject {
          };
       };
 
-      class Protocol {
+      class ProtocolName {
       public:
          constexpr static const char* SIP = "SIP";
          constexpr static const char* IAX = "IAX";
       };
 
+      enum class Protocol {
+         SIP = 0,
+         IAX = 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<QString,QString>  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::ProtocolName::SIP), QString(Account::ProtocolName::IAX)}  /*********************/
 
 /** Constant variables */


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic