[Pkg-owncloud-commits] [owncloud-client] 28/498: Multi-account WIP
Sandro Knauß
hefee-guest at moszumanska.debian.org
Tue Aug 11 14:48:30 UTC 2015
This is an automated email from the git hooks/post-receive script.
hefee-guest pushed a commit to branch master
in repository owncloud-client.
commit a932eac832b442cca763197240f036905dd284da
Author: Olivier Goffart <ogoffart at woboq.com>
Date: Fri Apr 17 17:56:17 2015 +0200
Multi-account WIP
---
src/gui/accountmanager.cpp | 40 ++++++++++------
src/gui/accountmanager.h | 29 +++++++++---
src/gui/accountsettings.cpp | 43 ++++++-----------
src/gui/accountsettings.h | 4 +-
src/gui/accountstate.cpp | 43 ++++-------------
src/gui/accountstate.h | 30 ++----------
src/gui/application.cpp | 44 +++++++++--------
src/gui/folderman.cpp | 14 ++----
src/gui/owncloudgui.cpp | 25 ++++------
src/gui/owncloudsetupwizard.cpp | 29 +-----------
src/gui/owncloudsetupwizard.h | 1 -
src/gui/settingsdialog.cpp | 71 +++++++++++++++++++---------
src/gui/settingsdialog.h | 7 ++-
src/gui/sharedialog.cpp | 2 +-
src/gui/wizard/abstractcredswizardpage.cpp | 6 ---
src/gui/wizard/owncloudadvancedsetuppage.cpp | 20 +-------
16 files changed, 174 insertions(+), 234 deletions(-)
diff --git a/src/gui/accountmanager.cpp b/src/gui/accountmanager.cpp
index 8eced16..fad18d3 100644
--- a/src/gui/accountmanager.cpp
+++ b/src/gui/accountmanager.cpp
@@ -12,6 +12,7 @@
*/
#include "accountmanager.h"
+#include "sslerrordialog.h"
#include <theme.h>
#include <creds/credentialsfactory.h>
#include <creds/abstractcredentials.h>
@@ -37,17 +38,6 @@ AccountManager *AccountManager::instance()
return &instance;
}
-void AccountManager::setAccount(AccountPtr account)
-{
- if (_account) {
- emit accountRemoved(_account);
- }
- _account = account;
- if (account) {
- emit accountAdded(account);
- }
-}
-
bool AccountManager::restore()
{
// try to open the correctly themed settings
@@ -113,7 +103,8 @@ bool AccountManager::restore()
settings->beginGroup(QLatin1String("General"));
acc->setApprovedCerts(QSslCertificate::fromData(settings->value(caCertsKeyC).toByteArray()));
acc->setMigrated(migratedCreds);
- setAccount(acc);
+ acc->setSslErrorHandler(new SslDialogErrorHandler);
+ addAccount(acc);
return true;
}
return false;
@@ -122,8 +113,13 @@ bool AccountManager::restore()
void AccountManager::save()
{
- auto acc = account();
- if (!acc) { return; }
+ foreach (const auto &acc , _accounts) {
+ save(acc->account());
+ }
+}
+
+void AccountManager::save(const AccountPtr& acc)
+{
QScopedPointer<QSettings> settings(Account::settingsWithGroup(Theme::instance()->appName()));
settings->setValue(QLatin1String(urlC), acc->_url.toString());
if (acc->_credentials) {
@@ -160,5 +156,21 @@ void AccountManager::save()
}
}
+void AccountManager::addAccount(const AccountPtr& newAccount)
+{
+ AccountStatePtr newAccountState(new AccountState(newAccount));
+ _accounts << newAccountState;
+ emit accountAdded(newAccountState.data());
+}
+
+void AccountManager::shutdown()
+{
+ auto accountsCopy = _accounts;
+ _accounts.clear();
+ foreach (const auto &acc, accountsCopy) {
+ emit accountRemoved(acc.data());
+ }
+}
+
}
\ No newline at end of file
diff --git a/src/gui/accountmanager.h b/src/gui/accountmanager.h
index 2d8b2fc..0ea3361 100644
--- a/src/gui/accountmanager.h
+++ b/src/gui/accountmanager.h
@@ -14,18 +14,18 @@
#pragma once
#include "account.h"
+#include "accountstate.h"
namespace OCC {
+typedef QSharedPointer<AccountState> AccountStatePtr;
+
class OWNCLOUDSYNC_EXPORT AccountManager : public QObject {
Q_OBJECT
public:
static AccountManager *instance();
~AccountManager() {}
- void setAccount(AccountPtr account);
- AccountPtr account() { return _account; }
-
/**
* Saves the account to a given settings file
*/
@@ -37,13 +37,30 @@ public:
*/
bool restore();
+ /**
+ * Add this account in the list of saved account.
+ * Typically called from the wizard
+ */
+ void addAccount(const AccountPtr &newAccount);
+
+ /**
+ * remove all accounts
+ */
+ void shutdown();
+
+ QList<AccountStatePtr> accounts() { return _accounts; }
+
+private:
+ void save(const AccountPtr &account);
+
+
Q_SIGNALS:
- void accountAdded(AccountPtr account);
- void accountRemoved(AccountPtr account);
+ void accountAdded(AccountState *account);
+ void accountRemoved(AccountState *account);
private:
AccountManager() {}
- AccountPtr _account;
+ QList<AccountStatePtr> _accounts;
};
}
\ No newline at end of file
diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp
index 3bac03b..8bcf52c 100644
--- a/src/gui/accountsettings.cpp
+++ b/src/gui/accountsettings.cpp
@@ -26,7 +26,6 @@
#include "accountstate.h"
#include "quotainfo.h"
#include "creds/abstractcredentials.h"
-#include "accountmanager.h"
#include <math.h>
@@ -57,11 +56,11 @@ static const char progressBarStyleC[] =
"background-color: %1; width: 1px;"
"}";
-AccountSettings::AccountSettings(QWidget *parent) :
+AccountSettings::AccountSettings(AccountState *accountState, QWidget *parent) :
QWidget(parent),
ui(new Ui::AccountSettings),
_wasDisabledBefore(false),
- _accountState(AccountStateManager::instance()->accountState())
+ _accountState(accountState)
{
ui->setupUi(this);
@@ -119,9 +118,17 @@ AccountSettings::AccountSettings(QWidget *parent) :
ui->connectLabel->setText(tr("No account configured."));
- connect(AccountStateManager::instance(), SIGNAL(accountStateAdded(AccountState*)),
- this, SLOT(slotAccountStateChanged(AccountState*)));
- slotAccountStateChanged(AccountStateManager::instance()->accountState());
+ connect(_accountState, SIGNAL(stateChanged(int)), SLOT(slotAccountStateChanged(int)));
+ slotAccountStateChanged(_accountState->state());
+
+ QuotaInfo *quotaInfo = _accountState->quotaInfo();
+ connect( quotaInfo, SIGNAL(quotaUpdated(qint64,qint64)),
+ this, SLOT(slotUpdateQuota(qint64,qint64)));
+ slotUpdateQuota(quotaInfo->lastQuotaTotalBytes(), quotaInfo->lastQuotaUsedBytes());
+
+ connect( ProgressDispatcher::instance(), SIGNAL(progressInfo(QString, Progress::Info)),
+ this, SLOT(slotSetProgress(QString, Progress::Info)) );
+
}
void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos)
@@ -149,28 +156,6 @@ void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos)
menu->exec(tv->mapToGlobal(pos));
}
-
-void AccountSettings::slotAccountStateChanged(AccountState *newAccountState)
-{
- if (_accountState) {
- disconnect(_accountState, SIGNAL(stateChanged(int)), this, SLOT(slotAccountStateChanged(int)));
- disconnect(_accountState->quotaInfo(), SIGNAL(quotaUpdated(qint64,qint64)),
- this, SLOT(slotUpdateQuota(qint64,qint64)));
- disconnect(_accountState, SIGNAL(stateChanged(int)), this, SLOT(slotAccountStateChanged(int)));
- }
-
- _accountState = newAccountState;
- if (_accountState) {
- connect(_accountState, SIGNAL(stateChanged(int)), SLOT(slotAccountStateChanged(int)));
- slotAccountStateChanged(_accountState->state());
-
- QuotaInfo *quotaInfo = _accountState->quotaInfo();
- connect( quotaInfo, SIGNAL(quotaUpdated(qint64,qint64)),
- this, SLOT(slotUpdateQuota(qint64,qint64)));
- slotUpdateQuota(quotaInfo->lastQuotaTotalBytes(), quotaInfo->lastQuotaUsedBytes());
- }
-}
-
void AccountSettings::slotFolderActivated( const QModelIndex& indx )
{
if (indx.data(FolderStatusDelegate::AddButton).toBool()) {
@@ -184,7 +169,7 @@ void AccountSettings::slotAddFolder()
FolderMan *folderMan = FolderMan::instance();
folderMan->setSyncEnabled(false); // do not start more syncs.
- FolderWizard *folderWizard = new FolderWizard(AccountManager::instance()->account(), this);
+ FolderWizard *folderWizard = new FolderWizard(_accountState->account(), this);
connect(folderWizard, SIGNAL(accepted()), SLOT(slotFolderWizardAccepted()));
connect(folderWizard, SIGNAL(rejected()), SLOT(slotFolderWizardRejected()));
diff --git a/src/gui/accountsettings.h b/src/gui/accountsettings.h
index 111a5b5..bf5d112 100644
--- a/src/gui/accountsettings.h
+++ b/src/gui/accountsettings.h
@@ -45,7 +45,7 @@ class AccountSettings : public QWidget
Q_OBJECT
public:
- explicit AccountSettings(QWidget *parent = 0);
+ explicit AccountSettings(AccountState *accountState, QWidget *parent = 0);
~AccountSettings();
@@ -66,6 +66,7 @@ public slots:
void slotAccountStateChanged(int state);
void setGeneralErrors( const QStringList& errors );
+ AccountState* accountsState() { return _accountState; };
protected slots:
void slotAddFolder();
@@ -92,7 +93,6 @@ private:
QLabel *_quotaLabel;
private slots:
void slotFolderSyncStateChange();
- void slotAccountStateChanged(AccountState*);
void slotCustomContextMenuRequested(const QPoint&);
};
diff --git a/src/gui/accountstate.cpp b/src/gui/accountstate.cpp
index aae1344..6003467 100644
--- a/src/gui/accountstate.cpp
+++ b/src/gui/accountstate.cpp
@@ -21,39 +21,6 @@
namespace OCC {
-Q_GLOBAL_STATIC(AccountStateManager, g_accountStateManager)
-
-AccountStateManager *AccountStateManager::instance()
-{
- return g_accountStateManager();
-}
-
-AccountStateManager::AccountStateManager()
- : _accountState(0)
-{
- connect(AccountManager::instance(), SIGNAL(accountAdded(AccountPtr)),
- SLOT(slotAccountAdded(AccountPtr)));
-}
-
-AccountStateManager::~AccountStateManager()
-{}
-
-void AccountStateManager::setAccountState(AccountState *accountState)
-{
- if (_accountState) {
- emit accountStateRemoved(_accountState);
- }
- _accountState = accountState;
- if (accountState) {
- emit accountStateAdded(accountState);
- }
-}
-
-void AccountStateManager::slotAccountAdded(AccountPtr account)
-{
- setAccountState(new AccountState(account));
-}
-
AccountState::AccountState(AccountPtr account)
: QObject(account.data())
, _account(account)
@@ -78,7 +45,7 @@ AccountState::~AccountState()
AccountPtr AccountState::account() const
{
- return _account.toStrongRef();
+ return _account;
}
AccountState::ConnectionStatus AccountState::connectionStatus() const
@@ -267,4 +234,12 @@ void AccountState::slotCredentialsFetched(AbstractCredentials* credentials)
checkConnectivity();
}
+QString AccountState::displayName()
+{
+ auto user = account()->credentials()->user();
+ auto url = account()->url();
+ return tr("%1@%2").arg(user, url.host());
+}
+
+
} // namespace OCC
diff --git a/src/gui/accountstate.h b/src/gui/accountstate.h
index 8da575b..2dae899 100644
--- a/src/gui/accountstate.h
+++ b/src/gui/accountstate.h
@@ -27,29 +27,6 @@ class AccountState;
class Account;
class AbstractCredentials;
-class AccountStateManager : public QObject {
- Q_OBJECT
-public:
- static AccountStateManager *instance();
-
- AccountStateManager();
- ~AccountStateManager();
-
- AccountState *accountState() { return _accountState; }
-
-signals:
- void accountStateAdded(AccountState *accountState);
- void accountStateRemoved(AccountState *accountState);
-
-private slots:
- void slotAccountAdded(AccountPtr account);
-
-private:
- void setAccountState(AccountState *account);
-
- AccountState *_accountState;
-};
-
/**
* @brief Extra info about an ownCloud server account.
*/
@@ -108,6 +85,9 @@ public:
/// connection status and errors.
void checkConnectivity();
+ // The name of the account as shown in the toolbar
+ QString displayName();
+
private:
void setState(State state);
@@ -120,9 +100,7 @@ protected Q_SLOTS:
void slotCredentialsFetched(AbstractCredentials* creds);
private:
- // A strong reference here would keep Account and AccountState
- // alive indefinitely since Account is the parent of AccountState.
- QWeakPointer<Account> _account;
+ AccountPtr _account;
QuotaInfo *_quotaInfo;
State _state;
ConnectionStatus _connectionStatus;
diff --git a/src/gui/application.cpp b/src/gui/application.cpp
index 439888e..c2a98a7 100644
--- a/src/gui/application.cpp
+++ b/src/gui/application.cpp
@@ -123,13 +123,7 @@ Application::Application(int &argc, char **argv) :
connect(this, SIGNAL(messageReceived(QString, QObject*)), SLOT(slotParseMessage(QString, QObject*)));
- // Create the account info manager to ensure it's listening to the
- // account manager.
- AccountStateManager::instance();
-
- if (AccountManager::instance()->restore()) {
- AccountManager::instance()->account()->setSslErrorHandler(new SslDialogErrorHandler);
- }
+ AccountManager::instance()->restore();
FolderMan::instance()->setSyncEnabled(false);
@@ -149,12 +143,12 @@ Application::Application(int &argc, char **argv) :
_gui->slotToggleLogBrowser(); // _showLogWindow is set in parseOptions.
}
- connect(AccountStateManager::instance(), SIGNAL(accountStateAdded(AccountState*)),
+ connect(AccountManager::instance(), SIGNAL(accountAdded(AccountState*)),
SLOT(slotAccountStateAdded(AccountState*)));
- connect(AccountStateManager::instance(), SIGNAL(accountStateRemoved(AccountState*)),
+ connect(AccountManager::instance(), SIGNAL(accountRemoved(AccountState*)),
SLOT(slotAccountStateRemoved(AccountState*)));
- if (AccountState *ai = AccountStateManager::instance()->accountState()) {
- slotAccountStateAdded(ai);
+ foreach (auto ai , AccountManager::instance()->accounts()) {
+ slotAccountStateAdded(ai.data());
}
connect(FolderMan::instance()->socketApi(), SIGNAL(shareCommandReceived(QString, QString, bool)),
@@ -180,22 +174,26 @@ Application::Application(int &argc, char **argv) :
Application::~Application()
{
// Remove the account from the account manager so it can be deleted.
- AccountManager::instance()->setAccount(AccountPtr());
+ AccountManager::instance()->shutdown();
}
void Application::slotLogin()
{
- AccountState *a = AccountStateManager::instance()->accountState();
- if (a) {
+ auto list = AccountManager::instance()->accounts();
+ if (!list.isEmpty()) {
FolderMan::instance()->setupFolders();
+ }
+
+ foreach (const auto &a, list) {
a->setSignedOut(false);
}
}
void Application::slotLogout()
{
- AccountState* ai = AccountStateManager::instance()->accountState();
- if (ai) {
+ auto list = AccountManager::instance()->accounts();
+
+ foreach (const auto &ai, list) {
AccountPtr a = ai->account();
// invalidate & forget token/password
a->credentials()->invalidateToken();
@@ -207,6 +205,9 @@ void Application::slotLogout()
// show result
_gui->slotComputeOverallSyncStatus();
}
+ if (!list.isEmpty()) {
+ FolderMan::instance()->setupFolders();
+ }
}
void Application::slotAccountStateRemoved(AccountState *accountState)
@@ -244,12 +245,12 @@ void Application::slotStartUpdateDetector()
void Application::slotCheckConnection()
{
- AccountState *accountState = AccountStateManager::instance()->accountState();
-
- if( accountState ) {
+ auto list = AccountManager::instance()->accounts();
+ foreach (const auto &accountState , list) {
accountState->checkConnectivity();
+ }
- } else {
+ if (list.isEmpty()) {
// let gui open the setup wizard
_gui->slotOpenSettingsDialog( true );
@@ -301,10 +302,13 @@ void Application::slotUpdateConnectionErrors(int accountState)
_startupNetworkError = accountState == AccountState::NetworkError;
}
+#warning FIXME
+#if 0
AccountState *as = AccountStateManager::instance()->accountState();
if (as) {
_gui->setConnectionErrors( isConnected, as->connectionErrors() );
}
+#endif
}
void Application::slotownCloudWizardDone( int res )
diff --git a/src/gui/folderman.cpp b/src/gui/folderman.cpp
index dc8c27c..3572b40 100644
--- a/src/gui/folderman.cpp
+++ b/src/gui/folderman.cpp
@@ -76,7 +76,7 @@ FolderMan::FolderMan(QObject *parent) :
connect(&_startScheduledSyncTimer, SIGNAL(timeout()),
SLOT(slotStartScheduledFolderSync()));
- connect(AccountStateManager::instance(), SIGNAL(accountStateRemoved(AccountState*)),
+ connect(AccountManager::instance(), SIGNAL(accountRemoved(AccountState*)),
SLOT(slotRemoveFoldersForAccount(AccountState*)));
}
@@ -201,15 +201,6 @@ int FolderMan::setupFolders()
dir.setFilter(QDir::Files | QDir::Hidden);
QStringList list = dir.entryList();
- if( list.count() == 0 ) {
- // maybe the account was just migrated.
- AccountPtr acc = AccountManager::instance()->account();
- if ( acc && acc->wasMigrated() ) {
- AccountMigrator accMig;
- list = accMig.migrateFolderDefinitons();
- }
- }
-
foreach ( const QString& alias, list ) {
Folder *f = setupFolderFromConfigFile( alias );
if( f ) {
@@ -354,7 +345,8 @@ Folder* FolderMan::setupFolderFromConfigFile(const QString &file) {
targetPath.remove(0,1);
}
- AccountState* accountState = AccountStateManager::instance()->accountState();
+#warning fixme
+ AccountState* accountState = AccountManager::instance()->accounts().value(0).data();
if (!accountState) {
qWarning() << "can't create folder without an account";
return 0;
diff --git a/src/gui/owncloudgui.cpp b/src/gui/owncloudgui.cpp
index 01f9d69..0fa41f5 100644
--- a/src/gui/owncloudgui.cpp
+++ b/src/gui/owncloudgui.cpp
@@ -136,7 +136,7 @@ void ownCloudGui::setupOverlayIcons()
void ownCloudGui::slotOpenSettingsDialog( bool openSettings )
{
// if account is set up, start the configuration wizard.
- if( AccountManager::instance()->account() ) {
+ if( !AccountManager::instance()->accounts().isEmpty() ) {
if( openSettings ) {
if (_settingsDialog.isNull() || !_settingsDialog->isVisible()) {
slotShowSettings();
@@ -207,16 +207,14 @@ void ownCloudGui::slotAccountStateChanged()
void ownCloudGui::setConnectionErrors( bool /*connected*/, const QStringList& fails )
{
_startupFails = fails; // store that for the settings dialog once it appears.
- if( !_settingsDialog.isNull() ) {
- _settingsDialog->setGeneralErrors( _startupFails );
- }
slotComputeOverallSyncStatus();
}
void ownCloudGui::slotComputeOverallSyncStatus()
{
- if (AccountState *a = AccountStateManager::instance()->accountState()) {
+#warning FIXME
+ if (AccountState *a = AccountManager::instance()->accounts().value(0).data()) {
if (a->isSignedOut()) {
_tray->setIcon(Theme::instance()->folderOfflineIcon(true));
_tray->setToolTip(tr("Please sign in"));
@@ -234,10 +232,6 @@ void ownCloudGui::slotComputeOverallSyncStatus()
Folder::Map map = folderMan->map();
SyncResult overallResult = FolderMan::accountStatus(map.values());
- // if there have been startup problems, show an error message.
- if( !_settingsDialog.isNull() )
- _settingsDialog->setGeneralErrors( _startupFails );
-
if( !_startupFails.isEmpty() ) {
trayMessage = _startupFails.join(QLatin1String("\n"));
QIcon statusIcon;
@@ -281,7 +275,8 @@ void ownCloudGui::setupContextMenu()
{
FolderMan *folderMan = FolderMan::instance();
- AccountState *a = AccountStateManager::instance()->accountState();
+#warning FIXME
+ AccountState *a = AccountManager::instance()->accounts().value(0).data();
bool isConfigured = (a != 0);
_actionOpenoC->setEnabled(isConfigured);
@@ -560,7 +555,6 @@ void ownCloudGui::slotShowSettings()
_settingsDialog->setAttribute( Qt::WA_DeleteOnClose, true );
_settingsDialog->show();
}
- _settingsDialog->setGeneralErrors( _startupFails );
raiseDialog(_settingsDialog.data());
}
@@ -595,8 +589,8 @@ void ownCloudGui::slotToggleLogBrowser()
void ownCloudGui::slotOpenOwnCloud()
{
- if (AccountPtr account = AccountManager::instance()->account()) {
- QDesktopServices::openUrl(account->url());
+ if (auto account = AccountManager::instance()->accounts().value(0)) {
+ QDesktopServices::openUrl(account->account()->url());
}
}
@@ -645,14 +639,15 @@ void ownCloudGui::raiseDialog( QWidget *raiseWidget )
void ownCloudGui::slotShowShareDialog(const QString &sharePath, const QString &localPath, bool resharingAllowed)
{
- AccountPtr account = AccountManager::instance()->account();
+#warning FIXME
+ auto account = AccountManager::instance()->accounts().value(0);
if (!account) {
qDebug() << "Could not open share dialog because no account is configured";
return;
}
qDebug() << Q_FUNC_INFO << "Opening share dialog";
- ShareDialog *w = new ShareDialog(account, sharePath, localPath, resharingAllowed);
+ ShareDialog *w = new ShareDialog(account->account(), sharePath, localPath, resharingAllowed);
w->getShares();
w->setAttribute( Qt::WA_DeleteOnClose, true );
raiseDialog(w);
diff --git a/src/gui/owncloudsetupwizard.cpp b/src/gui/owncloudsetupwizard.cpp
index 6104a93..b00acbd 100644
--- a/src/gui/owncloudsetupwizard.cpp
+++ b/src/gui/owncloudsetupwizard.cpp
@@ -454,14 +454,6 @@ bool OwncloudSetupWizard::ensureStartFromScratch(const QString &localFolder) {
return renameOk;
}
-void OwncloudSetupWizard::replaceDefaultAccountWith(AccountPtr newAccount)
-{
- // new Account
- AccountManager *mgr = AccountManager::instance();
- mgr->setAccount(newAccount);
- mgr->save();
-}
-
// Method executed when the user ends has finished the basic setup.
void OwncloudSetupWizard::slotAssistantFinished( int result )
{
@@ -511,26 +503,9 @@ void OwncloudSetupWizard::slotSkipFolderConfiguration()
void OwncloudSetupWizard::applyAccountChanges()
{
AccountPtr newAccount = _ocWizard->account();
- AccountPtr origAccount = AccountManager::instance()->account();
-
- bool isInitialSetup = (origAccount == 0);
+ auto manager = AccountManager::instance();
- // check if either the account changed in a major way
- bool reinitRequired =
- newAccount->changed(origAccount, true /* ignoreProtocol, allows http->https */);
-
- // If this is a completely new account, replace it entirely
- // thereby clearing all folder definitions.
- if (isInitialSetup || reinitRequired) {
- replaceDefaultAccountWith(newAccount);
- qDebug() << "Significant changes or first setup: switched to new account";
- }
- // Otherwise, set only URL and credentials
- else {
- origAccount->setUrl(newAccount->url());
- origAccount->setCredentials(_ocWizard->getCredentials());
- qDebug() << "Only password or schema was changed, adjusted existing account";
- }
+ manager->addAccount(newAccount);
}
diff --git a/src/gui/owncloudsetupwizard.h b/src/gui/owncloudsetupwizard.h
index 9bbb69d..b74db54 100644
--- a/src/gui/owncloudsetupwizard.h
+++ b/src/gui/owncloudsetupwizard.h
@@ -79,7 +79,6 @@ private:
void createRemoteFolder();
void finalizeSetup( bool );
bool ensureStartFromScratch(const QString &localFolder);
- void replaceDefaultAccountWith(AccountPtr newAccount);
void applyAccountChanges();
bool checkDowngradeAdvised(QNetworkReply* reply);
diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp
index acd80d9..93b20f8 100644
--- a/src/gui/settingsdialog.cpp
+++ b/src/gui/settingsdialog.cpp
@@ -23,6 +23,7 @@
#include "progressdispatcher.h"
#include "owncloudgui.h"
#include "protocolwidget.h"
+#include "accountmanager.h"
#include <QLabel>
#include <QStandardItemModel>
@@ -47,8 +48,7 @@ namespace OCC {
//
SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) :
QDialog(parent)
- , _ui(new Ui::SettingsDialog)
- , _accountSettings(new AccountSettings)
+ , _ui(new Ui::SettingsDialog), _gui(gui)
{
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
@@ -72,11 +72,6 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) :
setWindowTitle(Theme::instance()->appNameGUI());
- QIcon accountIcon(QLatin1String(":/client/resources/account.png"));
- QAction *accountAction = toolBar->addAction(accountIcon, tr("Account"));
- accountAction->setCheckable(true);
- _ui->stack->addWidget(_accountSettings);
-
QIcon protocolIcon(QLatin1String(":/client/resources/activity.png"));
_protocolAction = toolBar->addAction(protocolIcon, tr("Activity"));
_protocolAction->setCheckable(true);
@@ -95,29 +90,27 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) :
NetworkSettings *networkSettings = new NetworkSettings;
_ui->stack->addWidget(networkSettings);
- _actions.insert(accountAction, _accountSettings);
_actions.insert(_protocolAction, protocolWidget);
_actions.insert(generalAction, generalSettings);
_actions.insert(networkAction, networkSettings);
QActionGroup *group = new QActionGroup(this);
- group->addAction(accountAction);
group->addAction(_protocolAction);
group->addAction(generalAction);
group->addAction(networkAction);
group->setExclusive(true);
connect(group, SIGNAL(triggered(QAction*)), SLOT(slotSwitchPage(QAction*)));
- connect( _accountSettings, SIGNAL(folderChanged()), gui, SLOT(slotFoldersChanged()));
- connect( _accountSettings, SIGNAL(openFolderAlias(const QString&)),
- gui, SLOT(slotFolderOpenAction(QString)));
-
- connect( ProgressDispatcher::instance(), SIGNAL(progressInfo(QString, Progress::Info)),
- _accountSettings, SLOT(slotSetProgress(QString, Progress::Info)) );
-
+ connect(AccountManager::instance(), SIGNAL(accountAdded(AccountState*)),
+ this, SLOT(accountAdded(AccountState*)));
+ connect(AccountManager::instance(), SIGNAL(accountRemoved(AccountState*)),
+ this, SLOT(accountRemoved(AccountState*)));
+ foreach (auto ai , AccountManager::instance()->accounts()) {
+ accountAdded(ai.data());
+ }
// default to Account
- accountAction->setChecked(true);
+ toolBar->actions().at(0)->setChecked(true);
QPushButton *closeButton = _ui->buttonBox->button(QDialogButtonBox::Close);
connect(closeButton, SIGNAL(clicked()), SLOT(accept()));
@@ -136,11 +129,6 @@ SettingsDialog::~SettingsDialog()
delete _ui;
}
-void SettingsDialog::setGeneralErrors(const QStringList &errors)
-{
- _accountSettings->setGeneralErrors(errors);
-}
-
// close event is not being called here
void SettingsDialog::reject() {
ConfigFile cfg;
@@ -166,5 +154,44 @@ void SettingsDialog::showActivityPage()
}
}
+void SettingsDialog::accountAdded(AccountState *s)
+{
+ QIcon accountIcon(QLatin1String(":/client/resources/account.png"));
+ auto toolBar = qobject_cast<QToolBar*>(layout()->menuBar());
+ Q_ASSERT(toolBar);
+ auto accountAction = new QAction(accountIcon, s->displayName(), this);
+ toolBar->insertAction(toolBar->actions().at(0), accountAction);
+ accountAction->setCheckable(true);
+ auto accountSettings = new AccountSettings(s, this);
+ _ui->stack->insertWidget(0 , accountSettings);
+ _actions.insert(accountAction, accountSettings);
+
+ auto group = findChild<QActionGroup*>(QString(), Qt::FindDirectChildrenOnly);
+ Q_ASSERT(group);
+ group->addAction(accountAction);
+
+ connect( accountSettings, SIGNAL(folderChanged()), _gui, SLOT(slotFoldersChanged()));
+ connect( accountSettings, SIGNAL(openFolderAlias(const QString&)),
+ _gui, SLOT(slotFolderOpenAction(QString)));
+
+}
+
+void SettingsDialog::accountRemoved(AccountState *s)
+{
+ for (auto it = _actions.begin(); it != _actions.end(); ++it) {
+ auto as = qobject_cast<AccountSettings *>(*it);
+ if (!as) {
+ continue;
+ }
+ if (as->accountsState() == s) {
+ delete it.key();
+ delete it.value();
+ _actions.erase(it);
+ break;
+ }
+ }
+}
+
+
} // namespace OCC
diff --git a/src/gui/settingsdialog.h b/src/gui/settingsdialog.h
index 002e4a2..f8e311a 100644
--- a/src/gui/settingsdialog.h
+++ b/src/gui/settingsdialog.h
@@ -24,6 +24,8 @@ class QStandardItemModel;
namespace OCC {
+class AccountState;
+
namespace Ui {
class SettingsDialog;
}
@@ -41,7 +43,6 @@ public:
~SettingsDialog();
void addAccount(const QString &title, QWidget *widget);
- void setGeneralErrors( const QStringList& errors );
public slots:
void showActivityPage();
@@ -52,12 +53,14 @@ protected:
void accept() Q_DECL_OVERRIDE;
private slots:
+ void accountAdded(AccountState *);
+ void accountRemoved(AccountState *);
private:
Ui::SettingsDialog * const _ui;
QHash<QAction*, QWidget*> _actions;
- AccountSettings * const _accountSettings;
QAction * _protocolAction;
+ ownCloudGui *_gui;
};
}
diff --git a/src/gui/sharedialog.cpp b/src/gui/sharedialog.cpp
index cdf9049..43440c5 100644
--- a/src/gui/sharedialog.cpp
+++ b/src/gui/sharedialog.cpp
@@ -285,7 +285,7 @@ void ShareDialog::slotSharesFetched(const QString &reply)
bool success = false;
QVariantMap json = QtJson::parse(reply, success).toMap();
ShareDialog::_shares = json.value("ocs").toMap().value("data").toList();
- const QString versionString = AccountManager::instance()->account()->serverVersion();
+ const QString versionString = _account->serverVersion();
Q_FOREACH(auto share, ShareDialog::_shares) {
QVariantMap data = share.toMap();
diff --git a/src/gui/wizard/abstractcredswizardpage.cpp b/src/gui/wizard/abstractcredswizardpage.cpp
index 731b637..559d673 100644
--- a/src/gui/wizard/abstractcredswizardpage.cpp
+++ b/src/gui/wizard/abstractcredswizardpage.cpp
@@ -25,13 +25,7 @@ void AbstractCredentialsWizardPage::cleanupPage()
{
// Reset the credentials when the 'Back' button is used.
- // Unfortunately this code is also run when the Wizard finishes
- // prematurely with 'Skip Folder Configuration'. Therefore we need to
- // avoid resetting credentials on active accounts.
AccountPtr account = static_cast<OwncloudWizard*>(wizard())->account();
- if (account == AccountManager::instance()->account())
- return;
-
AbstractCredentials *creds = account->credentials();
if (creds) {
if (!creds->inherits("DummyCredentials")) {
diff --git a/src/gui/wizard/owncloudadvancedsetuppage.cpp b/src/gui/wizard/owncloudadvancedsetuppage.cpp
index e86678f..e2821b8 100644
--- a/src/gui/wizard/owncloudadvancedsetuppage.cpp
+++ b/src/gui/wizard/owncloudadvancedsetuppage.cpp
@@ -27,7 +27,6 @@
#include "theme.h"
#include "configfile.h"
#include "selectivesyncdialog.h"
-#include <accountmanager.h>
#include "creds/abstractcredentials.h"
#include "networkjobs.h"
@@ -160,25 +159,10 @@ void OwncloudAdvancedSetupPage::updateStatus()
wizard()->resize(wizard()->sizeHint());
}
+/* obsolete */
bool OwncloudAdvancedSetupPage::dataChanged()
{
- OwncloudWizard* ocWizard(dynamic_cast< OwncloudWizard* >(wizard()));
- AccountPtr oldAccount = AccountManager::instance()->account();
-
- if (!ocWizard || !oldAccount) {
- // If there was no account configured before, the data is new (hence changed)
- return true;
- }
-
- const QString url(field("OCUrl").toString());
- AbstractCredentials* newCredentials(ocWizard->getCredentials());
- AbstractCredentials* oldCredentials(oldAccount->credentials());
- const bool differentCreds(oldCredentials->changed(newCredentials));
- delete newCredentials;
- const QString newLocalFolder(QDir::toNativeSeparators(_ui.pbSelectLocalFolder->text()));
- const QString oldLocalFolder(QDir::toNativeSeparators(_oldLocalFolder));
-
- return ((url != oldAccount->url().toString()) || differentCreds || (oldLocalFolder != newLocalFolder));
+ return true;
}
void OwncloudAdvancedSetupPage::startSpinner()
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-client.git
More information about the Pkg-owncloud-commits
mailing list