[SCM] ktp-accounts-kcm packaging branch, master, updated. debian/15.12.1-1-1157-gc4589c5

Maximiliano Curia maxy at moszumanska.debian.org
Sat May 28 00:06:17 UTC 2016


Gitweb-URL: http://git.debian.org/?p=pkg-kde/applications/ktp-accounts-kcm.git;a=commitdiff;h=76468f5

The following commit has been merged in the master branch:
commit 76468f5844845ecb0fed347ae6b1e91335b47982
Author: Martin Klapetek <mklapetek at kde.org>
Date:   Wed Jan 28 20:11:19 2015 +0100

    Allow the KAccounts plugin to also configure existing account
    
    This code is adapted from edit-account-dialog.cpp from the old kcm
---
 CMakeLists.txt                              |   1 +
 plugins/kaccounts/CMakeLists.txt            |   3 +-
 plugins/kaccounts/kaccounts-ui-provider.cpp | 194 +++++++++++++++++++++++++---
 plugins/kaccounts/kaccounts-ui-provider.h   |  13 +-
 4 files changed, 190 insertions(+), 21 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index e924715..b462ffe 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -17,6 +17,7 @@ set(IS_KTP_INTERNAL_MODULE TRUE)
 find_package (TelepathyQt5 REQUIRED)
 find_package (KAccounts REQUIRED)
 find_package (AccountsFileDir REQUIRED)
+find_package (AccountsQt5 1.10 REQUIRED CONFIG)
 find_package (Intltool REQUIRED) #needed to generate service and provider files
 
 # make some more macros available
diff --git a/plugins/kaccounts/CMakeLists.txt b/plugins/kaccounts/CMakeLists.txt
index 6c8d935..048dc32 100644
--- a/plugins/kaccounts/CMakeLists.txt
+++ b/plugins/kaccounts/CMakeLists.txt
@@ -3,6 +3,7 @@ project (ktpaccountskcm-plugin-kaccounts)
 include_directories (${CMAKE_CURRENT_BINARY_DIR}
                      ${CMAKE_CURRENT_SOURCE_DIR}
                      ${KACCOUNTS_INCLUDE_DIR}
+                     ${ACCOUNTSQT_INCLUDE_DIRS}
 )
 
 set (ktpaccountskcm_plugin_kaccounts_SRCS
@@ -25,4 +26,4 @@ target_link_libraries (ktpaccountskcm_plugin_kaccounts
 # Install:
 install (TARGETS ktpaccountskcm_plugin_kaccounts
          DESTINATION ${PLUGIN_INSTALL_DIR}/kaccounts/ui
-)
\ No newline at end of file
+)
diff --git a/plugins/kaccounts/kaccounts-ui-provider.cpp b/plugins/kaccounts/kaccounts-ui-provider.cpp
index cf79d6c..b5ea312 100644
--- a/plugins/kaccounts/kaccounts-ui-provider.cpp
+++ b/plugins/kaccounts/kaccounts-ui-provider.cpp
@@ -23,6 +23,8 @@
 #include <KCMTelepathyAccounts/ParameterEditModel>
 #include <KCMTelepathyAccounts/account-edit-widget.h>
 
+#include <KAccounts/getcredentialsjob.h>
+
 #include <TelepathyQt/Profile>
 #include <TelepathyQt/ConnectionManager>
 #include <TelepathyQt/AccountManager>
@@ -30,8 +32,11 @@
 #include <TelepathyQt/PendingReady>
 #include <TelepathyQt/PendingAccount>
 #include <TelepathyQt/ProfileManager>
+#include <TelepathyQt/PendingStringList>
 
 #include <KLocalizedString>
+#include <KSharedConfig>
+#include <KConfigGroup>
 
 #include <QDBusConnection>
 #include <QDebug>
@@ -51,6 +56,9 @@ public:
     QDialog *dialog;
     bool thingsReady;
     QString profileName;
+    KAccountsUiPlugin::UiType type;
+    Tp::AccountPtr account;
+    bool reconnectRequired;
 };
 
 KAccountsUiProvider::KAccountsUiProvider(QObject *parent)
@@ -58,6 +66,7 @@ KAccountsUiProvider::KAccountsUiProvider(QObject *parent)
       d(new Private)
 {
     d->accountEditWidget = 0;
+    d->reconnectRequired = false;
 
     Tp::registerTypes();
 
@@ -70,21 +79,37 @@ KAccountsUiProvider::KAccountsUiProvider(QObject *parent)
 
     d->accountManager = Tp::AccountManager::create(accountFactory);
     d->accountManager->becomeReady();
-
-    d->profileManager = Tp::ProfileManager::create(QDBusConnection::sessionBus());
-    Tp::PendingOperation *op = d->profileManager->becomeReady(Tp::Features() << Tp::ProfileManager::FeatureFakeProfiles);
-    connect(op, SIGNAL(finished(Tp::PendingOperation*)), this, SLOT(onProfileManagerReady(Tp::PendingOperation*)));
 }
 
 KAccountsUiProvider::~KAccountsUiProvider()
 {
     // tp managers are automatically ref-count-deleted
-
-    delete d->accountEditWidget;
-    delete d->dialog;
     delete d;
 }
 
+QStringList KAccountsUiProvider::supportedServicesForConfig() const
+{
+    return QStringList() << QStringLiteral("IM");
+}
+
+void KAccountsUiProvider::init(KAccountsUiPlugin::UiType type)
+{
+    d->type = type;
+
+    if (d->type == KAccountsUiPlugin::NewAccountDialog) {
+        d->profileManager = Tp::ProfileManager::create(QDBusConnection::sessionBus());
+        Tp::PendingOperation *op = d->profileManager->becomeReady(Tp::Features() << Tp::ProfileManager::FeatureFakeProfiles);
+        connect(op, SIGNAL(finished(Tp::PendingOperation*)), this, SLOT(onProfileManagerReady(Tp::PendingOperation*)));
+    } else {
+        if (d->accountManager->isReady()) {
+            Q_EMIT uiReady();
+        } else {
+            // let's wait for AM to become ready first
+            connect(d->accountManager->becomeReady(), &Tp::PendingOperation::finished, this, &KAccountsUiProvider::uiReady);
+        }
+    }
+}
+
 void KAccountsUiProvider::onProfileManagerReady(Tp::PendingOperation *op)
 {
     if (op && op->isError()) {
@@ -96,7 +121,7 @@ void KAccountsUiProvider::onProfileManagerReady(Tp::PendingOperation *op)
     // OR if profile name was set and profile manager is not yet ready, return.
     // If profile name is set and this returns, it will get through this again when profile manager
     // becomes ready and vice-versa.
-    if (d->profileName.isEmpty() || !d->profileManager->isReady(Tp::Features() << Tp::ProfileManager::FeatureFakeProfiles)) {
+    if (d->profileName.isEmpty() || (d->profileManager && !d->profileManager->isReady(Tp::Features() << Tp::ProfileManager::FeatureFakeProfiles))) {
         return;
     }
 
@@ -132,6 +157,7 @@ void KAccountsUiProvider::onConnectionManagerReady(Tp::PendingOperation*)
     }
 
     d->dialog = new QDialog();
+    d->dialog->setAttribute(Qt::WA_DeleteOnClose);
     QVBoxLayout *mainLayout = new QVBoxLayout(d->dialog);
     d->dialog->setLayout(mainLayout);
 
@@ -140,11 +166,11 @@ void KAccountsUiProvider::onConnectionManagerReady(Tp::PendingOperation*)
                                                  QString(),
                                                  parameterModel,
                                                  doConnectOnAdd,
-                                                 0);
+                                                 d->dialog);
 
     QDialogButtonBox *dbb = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, d->dialog);
-    connect(dbb, SIGNAL(accepted()), this, SLOT(onDialogAccepted()));
-    connect(dbb, SIGNAL(rejected()), this, SLOT(onDialogRejected()));
+    connect(dbb, SIGNAL(accepted()), this, SLOT(onCreateAccountDialogAccepted()));
+    connect(dbb, SIGNAL(rejected()), this, SLOT(onCreateAccountDialogRejected()));
 
     mainLayout->addWidget(d->accountEditWidget);
     mainLayout->addWidget(dbb);
@@ -157,14 +183,76 @@ void KAccountsUiProvider::onConnectionManagerReady(Tp::PendingOperation*)
     Q_EMIT uiReady();
 }
 
-void KAccountsUiProvider::showDialog()
+void KAccountsUiProvider::showNewAccountDialog()
+{
+    d->dialog->exec();
+}
+
+void KAccountsUiProvider::showConfigureAccountDialog(const quint32 accountId)
 {
+    KSharedConfigPtr kaccountsConfig = KSharedConfig::openConfig(QStringLiteral("kaccounts-ktprc"));
+    KConfigGroup ktpKaccountsGroup = kaccountsConfig->group(QStringLiteral("kaccounts-ktp"));
+    QString accountUid = ktpKaccountsGroup.readEntry(QString::number(accountId));
+
+    if (accountUid.isEmpty()) {
+        qWarning() << "Empty accountUid, returning...";
+        return;
+    }
+
+    d->account = d->accountManager->accountForObjectPath(accountUid);
+
+    // Get the protocol's parameters and values.
+    Tp::ProtocolInfo protocolInfo = d->account->protocolInfo();
+    Tp::ProtocolParameterList parameters = protocolInfo.parameters();
+    QVariantMap parameterValues = d->account->parameters();
+
+    // Add the parameters to the model.
+    ParameterEditModel *parameterModel = new ParameterEditModel(this);
+    parameterModel->addItems(parameters, d->account->profile()->parameters(), parameterValues);
+
+    //update the parameter model with the password from kwallet (if applicable)
+    Tp::ProtocolParameter passwordParameter = parameterModel->parameter(QLatin1String("password"));
+
+
+    d->dialog = new QDialog();
+    d->dialog->setAttribute(Qt::WA_DeleteOnClose);
+    QVBoxLayout *mainLayout = new QVBoxLayout(d->dialog);
+    d->dialog->setLayout(mainLayout);
+
+    QDialogButtonBox *dbb = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, d->dialog);
+    connect(dbb, SIGNAL(accepted()), this, SLOT(onConfigureAccountDialogAccepted()));
+    connect(dbb, SIGNAL(rejected()), this, SLOT(onConfigureAccountDialogRejected()));
+
+    if (passwordParameter.isValid()) {
+        QModelIndex index = parameterModel->indexForParameter(passwordParameter);
+        GetCredentialsJob *credentialsJob = new GetCredentialsJob(accountId, this);
+        connect(credentialsJob, &GetCredentialsJob::finished, [=](KJob *job){
+            QString secret = qobject_cast<GetCredentialsJob*>(job)->credentialsData().value(QLatin1String("Secret")).toString();
+            parameterModel->setData(index, secret, Qt::EditRole);
+        });
+        credentialsJob->start();
+    }
+
+
+    d->accountEditWidget = new AccountEditWidget(d->account->profile(),
+                                                 d->account->displayName(),
+                                                 parameterModel,
+                                                 doNotConnectOnAdd,
+                                                 d->dialog);
+
+    connect(this,
+            SIGNAL(feedbackMessage(QString,QString,KMessageWidget::MessageType)),
+            d->accountEditWidget,
+            SIGNAL(feedbackMessage(QString,QString,KMessageWidget::MessageType)), Qt::UniqueConnection);
+
+    mainLayout->addWidget(d->accountEditWidget);
+    mainLayout->addWidget(dbb);
+
     d->dialog->exec();
 }
 
-void KAccountsUiProvider::onDialogAccepted()
+void KAccountsUiProvider::onCreateAccountDialogAccepted()
 {
-    qDebug();
     // Get the parameter values.
     QVariantMap values  = d->accountEditWidget->parametersSet();
 
@@ -208,14 +296,13 @@ void KAccountsUiProvider::onDialogAccepted()
             SLOT(onAccountCreated(Tp::PendingOperation*)));
 }
 
-void KAccountsUiProvider::onDialogRejected()
+void KAccountsUiProvider::onCreateAccountDialogRejected()
 {
     d->dialog->reject();
 }
 
 void KAccountsUiProvider::onAccountCreated(Tp::PendingOperation *op)
 {
-    qDebug();
     if (op->isError()) {
         Q_EMIT feedbackMessage(i18n("Failed to create account"),
                                 i18n("Possibly not all required fields are valid"),
@@ -232,7 +319,7 @@ void KAccountsUiProvider::onAccountCreated(Tp::PendingOperation *op)
                                 QString(),
                                 KMessageWidget::Error);
         qWarning() << "Method called with wrong type.";
-        Q_EMIT error(QStringLiteral("Eh"));
+        Q_EMIT error(QStringLiteral("Something went wrong with Telepathy"));
         return;
     }
 
@@ -252,3 +339,76 @@ void KAccountsUiProvider::onAccountCreated(Tp::PendingOperation *op)
 
     d->dialog->accept();
 }
+
+void KAccountsUiProvider::onConfigureAccountDialogAccepted()
+{
+    QVariantMap setParameters = d->accountEditWidget->parametersSet();
+    QStringList unsetParameters = d->accountEditWidget->parametersUnset();
+
+    // Check all pages of parameters pass validation.
+    if (!d->accountEditWidget->validateParameterValues()) {
+        qWarning() << "A widget failed parameter validation. Not accepting wizard.";
+        return;
+    }
+
+    //remove password from setParameters as this is now stored by kwallet instead
+    setParameters.remove(QStringLiteral("password"));
+    unsetParameters.append(QStringLiteral("password")); //remove the password from mission control
+
+    Tp::PendingStringList *psl = d->account->updateParameters(setParameters, unsetParameters);
+
+    connect(psl, &Tp::PendingOperation::finished, this, [=](Tp::PendingOperation *op){
+        if (op->isError()) {
+            // FIXME: Visual feedback in GUI to user.
+            qWarning() << "Could not update parameters:" << op->errorName() << op->errorMessage();
+            return;
+        }
+
+        Tp::PendingStringList *psl = qobject_cast<Tp::PendingStringList*>(op);
+
+        Q_ASSERT(psl);
+        if (!psl) {
+            qWarning() << "Something  weird happened";
+        }
+
+        if (psl->result().size() > 0) {
+            qDebug() << "The following parameters won't be updated until reconnection: " << psl->result();
+            d->reconnectRequired = true;
+        }
+
+        QVariantMap values = d->accountEditWidget->parametersSet();
+
+        if (values.contains(QLatin1String("password"))) {
+            //TODO Store the new password in sso
+        } else {
+            //TODO ...or remove it.
+        }
+
+        if (d->accountEditWidget->updateDisplayName()) {
+            connect(d->account->setDisplayName(d->accountEditWidget->displayName()), &Tp::PendingOperation::finished,
+                    this, [=](Tp::PendingOperation *op) {
+                        if (op->isError()) {
+                            qWarning() << "Error updating display name:" << op->errorName() << op->errorMessage();
+                        }
+
+                        onConfigureAccountFinished();
+                    });
+        } else {
+            onConfigureAccountFinished();
+        }
+    });
+}
+
+void KAccountsUiProvider::onConfigureAccountFinished()
+{
+    if (d->reconnectRequired) {
+        d->account->reconnect();
+    }
+
+    d->dialog->accept();
+}
+
+void KAccountsUiProvider::onConfigureAccountDialogRejected()
+{
+    d->dialog->reject();
+}
diff --git a/plugins/kaccounts/kaccounts-ui-provider.h b/plugins/kaccounts/kaccounts-ui-provider.h
index c01ef1f..0d1c656 100644
--- a/plugins/kaccounts/kaccounts-ui-provider.h
+++ b/plugins/kaccounts/kaccounts-ui-provider.h
@@ -39,8 +39,12 @@ public:
     KAccountsUiProvider(QObject *parent = 0);
     virtual ~KAccountsUiProvider();
 
-    virtual void showDialog();
+    virtual void init(KAccountsUiPlugin::UiType type);
+
+    virtual void showNewAccountDialog();
+    virtual void showConfigureAccountDialog(const quint32 accountId);
     virtual void setProviderName(const QString &providerName);
+    virtual QStringList supportedServicesForConfig() const;
 
 Q_SIGNALS:
     void feedbackMessage(const QString &text, const QString &comment, KMessageWidget::MessageType);
@@ -49,8 +53,11 @@ private Q_SLOTS:
     void onProfileManagerReady(Tp::PendingOperation*);
     void onConnectionManagerReady(Tp::PendingOperation*);
     void onAccountCreated(Tp::PendingOperation*);
-    void onDialogAccepted();
-    void onDialogRejected();
+    void onCreateAccountDialogAccepted();
+    void onCreateAccountDialogRejected();
+    void onConfigureAccountDialogAccepted();
+    void onConfigureAccountDialogRejected();
+    void onConfigureAccountFinished();
 
 private:
     class Private;

-- 
ktp-accounts-kcm packaging



More information about the pkg-kde-commits mailing list