From 127efedd1668b546d0ac8c83655a2056d0439f29 Mon Sep 17 00:00:00 2001 From: Valentin Rusu Date: Fri, 7 Aug 2015 18:59:04 +0200 Subject: [PATCH] Stop showing the migration wizard by default BUG:351056 If the migration wizard is needed, then add this to kwalletrc [Migration] showMigrationWizard=true On systems having kwallet-pam the migration agent would also merge all the old wallets into the default LocalWallet, as a side effect. This would avoid wallet creation prompts, though. --- src/runtime/kwalletd/main.cpp | 2 +- src/runtime/kwalletd/migrationagent.cpp | 42 ++++++++++++++++++++++++++------ src/runtime/kwalletd/migrationagent.h | 5 ++-- src/runtime/kwalletd/migrationwizard.cpp | 2 +- 4 files changed, 39 insertions(+), 12 deletions(-) diff --git a/src/runtime/kwalletd/main.cpp b/src/runtime/kwalletd/main.cpp index c0fecaa..62fcd3a 100644 --- a/src/runtime/kwalletd/main.cpp +++ b/src/runtime/kwalletd/main.cpp @@ -186,7 +186,7 @@ int main(int argc, char **argv) aboutdata.addAuthor(i18n("Thiago Maceira"), i18n("D-Bus Interface"), "thiago@kde.org"); KWalletD walletd; - MigrationAgent migrationAgent(&walletd); + MigrationAgent migrationAgent(&walletd, hash); KDBusService dbusUniqueInstance(KDBusService::Unique | KDBusService::NoExitOnFailure); // NOTE: the command should be parsed only after KDBusService instantiation diff --git a/src/runtime/kwalletd/migrationagent.cpp b/src/runtime/kwalletd/migrationagent.cpp index 6eaeb12..192a871 100644 --- a/src/runtime/kwalletd/migrationagent.cpp +++ b/src/runtime/kwalletd/migrationagent.cpp @@ -34,10 +34,12 @@ #define SERVICE_KWALLETD4 "org.kde.kwalletd" #define ENTRY_ALREADY_MIGRATED "alreadyMigrated" +#define ENTRY_SHOW_MIGRATION_WIZARD "showMigrationWizard" -MigrationAgent::MigrationAgent(KWalletD* kd) : +MigrationAgent::MigrationAgent(KWalletD* kd, const char *hash) : _kf5_daemon(kd) , _kde4_daemon(0) + , _pam_hash(hash) { QTimer::singleShot(100, this, SLOT(migrateWallets())); } @@ -118,11 +120,27 @@ bool MigrationAgent::isMigrationWizardOk() { bool ok = false; - MigrationWizard *wizard = new MigrationWizard(this); - int result = wizard->exec(); - if (QDialog::Accepted == result) { - // the user either migrated the wallets, or choose not to be prompted again - ok = true; + // The migration wizard would no longer been shown by default. + // see BUG 351056 + // NOTE if user wants to show the migration wizard, then he should add the + // following setting to the kwalletrc: + // [Migration] + // showMigrationWizard=true + KConfig kwalletrc("kwalletrc"); + KConfigGroup cfg(&kwalletrc, "Migration"); + bool showMigrationWizard = cfg.readEntry(ENTRY_SHOW_MIGRATION_WIZARD, false); + + if (showMigrationWizard) { + MigrationWizard *wizard = new MigrationWizard(this); + int result = wizard->exec(); + if (QDialog::Accepted == result) { + // the user either migrated the wallets, or choose not to be prompted again + ok = true; + } + } else { + if (performMigration(0, true)) { + qDebug() << "Migration failed."; + } } return ok; @@ -162,7 +180,7 @@ bool MigrationAgent::isEmptyOldWallet() const { return wallets.length() == 0; } -bool MigrationAgent::performMigration(WId wid) +bool MigrationAgent::performMigration(WId wid, bool withoutWizard) { auto appId = i18n("KDE Wallet Migration Agent"); try { @@ -174,7 +192,15 @@ bool MigrationAgent::performMigration(WId wid) emit progressMessage(i18n("Migrating wallet: %1", wallet)); emit progressMessage(i18n("* Creating KF5 wallet: %1", wallet)); - int handle5 = _kf5_daemon->internalOpen(appId, wallet, false, 0, true, QString()); + int handle5 = -1; + if (withoutWizard && (_pam_hash != nullptr)) { + // see BUG 351056 for why this hacky code + // If the user has several wallets, all the values will be + // merged into the single LocalWallet + handle5 = _kf5_daemon->pamOpen(KWallet::Wallet::LocalWallet(), _pam_hash, 0); + } else { + handle5 = _kf5_daemon->internalOpen(appId, wallet, false, 0, true, QString()); + } if (handle5 <0) { emit progressMessage(i18n("ERROR when attempting new wallet creation. Aborting.")); return false; diff --git a/src/runtime/kwalletd/migrationagent.h b/src/runtime/kwalletd/migrationagent.h index 55a251d..c52509e 100644 --- a/src/runtime/kwalletd/migrationagent.h +++ b/src/runtime/kwalletd/migrationagent.h @@ -32,10 +32,10 @@ class KWalletD; class MigrationAgent : public QObject { Q_OBJECT public: - MigrationAgent(KWalletD* kd); + MigrationAgent(KWalletD* kd, const char* hash); bool isEmptyOldWallet() const; - bool performMigration(WId wid); + bool performMigration(WId wid, bool withoutWizard); private Q_SLOTS: void migrateWallets(); @@ -52,6 +52,7 @@ Q_SIGNALS: private: KWalletD *_kf5_daemon; org::kde::KWallet *_kde4_daemon; + const char *_pam_hash; }; #endif // _MIGRATIONAGENT_H_ diff --git a/src/runtime/kwalletd/migrationwizard.cpp b/src/runtime/kwalletd/migrationwizard.cpp index b7d3f70..cdd2a92 100644 --- a/src/runtime/kwalletd/migrationwizard.cpp +++ b/src/runtime/kwalletd/migrationwizard.cpp @@ -58,7 +58,7 @@ public: virtual void initializePage() { connect(_agent, SIGNAL(progressMessage(QString)), _ui._report, SLOT(append(QString))); - _migrationCompleted = _agent->performMigration(winId()); + _migrationCompleted = _agent->performMigration(winId(), false); emit completeChanged(); } -- 2.4.6