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

List:       kde-commits
Subject:    playground/network/telepathy-accounts-kcm/src
From:       George Goldberg <grundleborg () googlemail ! com>
Date:       2009-08-03 14:27:06
Message-ID: 1249309626.914854.7319.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1006345 by gberg:

Save changes when editing accounts. Editing accounts now works.

 M  +100 -0    edit-account-dialog.cpp  
 M  +8 -0      edit-account-dialog.h  


--- trunk/playground/network/telepathy-accounts-kcm/src/edit-account-dialog.cpp #1006344:1006345
@@ -34,6 +34,7 @@
 #include <QtCore/QList>
 
 #include <TelepathyQt4/ConnectionManager>
+#include <TelepathyQt4/PendingStringList>
 
 class EditAccountDialog::Private
 {
@@ -181,6 +182,105 @@
     kDebug();
 }
 
+void EditAccountDialog::slotButtonClicked(int button)
+{
+    kDebug() << "Button clicked:" << button;
 
+    if (button == KDialog::Ok) {
+        accept();
+    } else{
+        KDialog::slotButtonClicked(button);
+    }
+}
+
+void EditAccountDialog::accept()
+{
+    kDebug();
+
+    // Check all pages of parameters pass validation.
+    if (!d->mandatoryParametersWidget->validateParameterValues()) {
+        kDebug() << "A widget failed parameter validation. Not accepting wizard.";
+        return;
+    }
+
+    foreach (AbstractAccountParametersWidget *w, d->optionalParametersWidgets) {
+        if (!w->validateParameterValues()) {
+            kDebug() << "A widget failed parameter validation. Not accepting wizard.";
+            return;
+        }
+    }
+
+    // Get the mandatory parameters.
+    QMap<Tp::ProtocolParameter*, QVariant> mandatoryParameterValues;
+    mandatoryParameterValues = d->mandatoryParametersWidget->parameterValues();
+
+    // Get the optional parameters.
+    QMap<Tp::ProtocolParameter*, QVariant> optionalParameterValues;
+
+    foreach (AbstractAccountParametersWidget *w, d->optionalParametersWidgets) {
+        QMap<Tp::ProtocolParameter*, QVariant> parameters = w->parameterValues();
+        QMap<Tp::ProtocolParameter*, QVariant>::const_iterator i = parameters.constBegin();
+        while (i != parameters.constEnd()) {
+            if (!optionalParameterValues.contains(i.key())) {
+                optionalParameterValues.insert(i.key(), i.value());
+            } else {
+                kWarning() << "Parameter:" << i.key()->name() << "is already in the map.";
+            }
+
+            ++i;
+        }
+        continue;
+    }
+
+    // Merge the parameters into a QVariantMap for submitting to the Telepathy AM.
+    QVariantMap parameters;
+    QStringList unsetParameters;
+
+    foreach (Tp::ProtocolParameter *pp, mandatoryParameterValues.keys()) {
+        QVariant value = mandatoryParameterValues.value(pp);
+
+        // Unset empty parameters.
+        if (!value.isNull()) {
+            parameters.insert(pp->name(), value);
+            continue;
+        }
+
+        unsetParameters.append(pp->name());
+    }
+
+    foreach (Tp::ProtocolParameter *pp, optionalParameterValues.keys()) {
+        QVariant value = optionalParameterValues.value(pp);
+
+        // Unset empty parameters.
+        if (!value.isNull()) {
+            parameters.insert(pp->name(), value);
+            continue;
+        }
+
+        unsetParameters.append(pp->name());
+    }
+
+    // FIXME: Ask the user to submit a Display Name
+    Tp::PendingStringList *psl = d->item->account()->updateParameters(parameters, unsetParameters);
+
+    connect(psl,
+            SIGNAL(finished(Tp::PendingOperation*)),
+            SLOT(onParametersUpdated(Tp::PendingOperation*)));
+}
+
+void EditAccountDialog::onParametersUpdated(Tp::PendingOperation *op)
+{
+    kDebug();
+
+    if (op->isError()) {
+        // FIXME: Visual feedback in GUI to user.
+        kWarning() << "Could not update parameters:" << op->errorName() << op->errorMessage();
+        return;
+    }
+
+    emit finished();
+}
+
+
 #include "edit-account-dialog.moc"
 
--- trunk/playground/network/telepathy-accounts-kcm/src/edit-account-dialog.h #1006344:1006345
@@ -35,9 +35,17 @@
     explicit EditAccountDialog(AccountItem *item, QWidget *parent = 0);
     virtual ~EditAccountDialog();
 
+protected Q_SLOTS:
+    virtual void slotButtonClicked(int button);
+
+private Q_SLOTS:
+    void onParametersUpdated(Tp::PendingOperation *op);
+
 private:
     Q_DISABLE_COPY(EditAccountDialog);
 
+    void accept();
+
     class Private;
     Private * const d;
 };
[prev in list] [next in list] [prev in thread] [next in thread] 

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