From 1edd46b995239fef5963a819c0696091c0102aa8 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Tue, 12 May 2015 15:16:32 +0200 Subject: [PATCH] Multi-Account: add possibility to delete an account --- src/gui/accountmanager.cpp | 10 ++++++++++ src/gui/accountmanager.h | 7 +++++++ src/gui/accountsettings.cpp | 19 +++++++++++++++++++ src/gui/accountsettings.h | 1 + src/gui/accountsettings.ui | 2 +- 5 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/gui/accountmanager.cpp b/src/gui/accountmanager.cpp index b17de5d616..819eceaa69 100644 --- a/src/gui/accountmanager.cpp +++ b/src/gui/accountmanager.cpp @@ -207,6 +207,16 @@ AccountState *AccountManager::addAccount(const AccountPtr& newAccount) return newAccountState.data(); } +void AccountManager::deleteAccount(AccountState* account) +{ + auto it = std::find(_accounts.begin(), _accounts.end(), account); + if (it == _accounts.end()) { return; } + auto copy = *it; // keep a reference to the shared pointer so it does not delete it just yet + _accounts.erase(it); + accountRemoved(account); +} + + void AccountManager::shutdown() { auto accountsCopy = _accounts; diff --git a/src/gui/accountmanager.h b/src/gui/accountmanager.h index 6cf4434f4b..f8a3ce9371 100644 --- a/src/gui/accountmanager.h +++ b/src/gui/accountmanager.h @@ -50,9 +50,16 @@ public: /** * Return a list of all accounts. + * (this is a list of QSharedPointer for internal reason, one should normaly not keep a copy of them) */ QList accounts() { return _accounts; } + /** + * Delete the AccountState + */ + void deleteAccount(AccountState *account); + + private: void save(const AccountPtr& account, QSettings& settings); AccountPtr load(QSettings& settings); diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 322d411e51..1a5245ed7f 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -25,6 +25,7 @@ #include "account.h" #include "accountstate.h" #include "quotainfo.h" +#include "accountmanager.h" #include "creds/abstractcredentials.h" #include @@ -126,6 +127,8 @@ AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) : this, SLOT(slotUpdateQuota(qint64,qint64))); slotUpdateQuota(quotaInfo->lastQuotaTotalBytes(), quotaInfo->lastQuotaUsedBytes()); + connect(ui->deleteButton, SIGNAL(clicked()) , this, SLOT(slotDeleteAccount())); + connect( ProgressDispatcher::instance(), SIGNAL(progressInfo(QString, ProgressInfo)), this, SLOT(slotSetProgress(QString, ProgressInfo)) ); @@ -643,4 +646,20 @@ void AccountSettings::refreshSelectiveSyncStatus() } } +void AccountSettings::slotDeleteAccount() +{ + int ret = QMessageBox::question( this, tr("Confirm Account Delete"), + tr("

Do you really want to delete the account %1?

" + "

Note: This will not remove the files from your client.

") + .arg(_accountState->account()->displayName()), + QMessageBox::Yes|QMessageBox::No ); + + if( ret == QMessageBox::No ) { + return; + } + + AccountManager::instance()->deleteAccount(_accountState); +} + + } // namespace OCC diff --git a/src/gui/accountsettings.h b/src/gui/accountsettings.h index 86bd74ccbd..fbbf23d2ce 100644 --- a/src/gui/accountsettings.h +++ b/src/gui/accountsettings.h @@ -77,6 +77,7 @@ protected slots: void slotFolderWizardAccepted(); void slotFolderWizardRejected(); void slotHideProgress(); + void slotDeleteAccount(); void refreshSelectiveSyncStatus(); private: diff --git a/src/gui/accountsettings.ui b/src/gui/accountsettings.ui index e2adf856be..c2c3f63087 100644 --- a/src/gui/accountsettings.ui +++ b/src/gui/accountsettings.ui @@ -44,7 +44,7 @@ - + 0