[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