From 27159104a947de7e388dcd16cae7a8c61ba44982 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Fri, 24 Apr 2015 10:18:33 +0200 Subject: [PATCH] Folders: Store inside account config. --- src/gui/accountmanager.cpp | 51 +++++------ src/gui/accountmanager.h | 4 +- src/gui/accountsettings.cpp | 15 ++-- src/gui/folder.cpp | 93 ++++++++++++++------ src/gui/folder.h | 50 +++++++++-- src/gui/folderman.cpp | 145 +++++++++++++++++++++----------- src/gui/folderman.h | 20 ++--- src/gui/folderstatusmodel.cpp | 4 - src/gui/owncloudsetupwizard.cpp | 10 ++- src/gui/selectivesyncdialog.cpp | 4 - src/libsync/account.cpp | 7 ++ src/libsync/account.h | 3 + 12 files changed, 262 insertions(+), 144 deletions(-) diff --git a/src/gui/accountmanager.cpp b/src/gui/accountmanager.cpp index 3be3c2cef..5d84ebf99 100644 --- a/src/gui/accountmanager.cpp +++ b/src/gui/accountmanager.cpp @@ -27,6 +27,8 @@ static const char authTypeC[] = "authType"; static const char userC[] = "user"; static const char httpUserC[] = "http_user"; static const char caCertsKeyC[] = "CaCertificates"; +static const char accountsC[] = "Accounts"; +static const char foldersC[] = "Folders"; } @@ -40,7 +42,7 @@ AccountManager *AccountManager::instance() bool AccountManager::restore() { - QScopedPointer settings(Account::settingsWithGroup("Accounts")); + QScopedPointer settings(Account::settingsWithGroup(QLatin1String(accountsC))); // If there are no accounts, check the old format. if (settings->childGroups().isEmpty()) { @@ -49,7 +51,7 @@ bool AccountManager::restore() foreach (const auto& accountId, settings->childGroups()) { settings->beginGroup(accountId); - if (auto acc = load(settings)) { + if (auto acc = load(*settings)) { acc->_id = accountId; addAccount(acc); } @@ -106,7 +108,7 @@ bool AccountManager::restoreFromLegacySettings() // Try to load the single account. if (!settings->childKeys().isEmpty()) { - if (auto acc = load(settings)) { + if (auto acc = load(*settings)) { if (migratedCreds) { acc->setMigrated(true); } @@ -119,41 +121,41 @@ bool AccountManager::restoreFromLegacySettings() void AccountManager::save() { - QScopedPointer settings(Account::settingsWithGroup("Accounts")); + QScopedPointer settings(Account::settingsWithGroup(QLatin1String(accountsC))); foreach (const auto &acc, _accounts) { settings->beginGroup(acc->account()->id()); - save(acc->account(), settings); + save(acc->account(), *settings); settings->endGroup(); } } -void AccountManager::save(const AccountPtr& acc, QScopedPointer& settings) +void AccountManager::save(const AccountPtr& acc, QSettings& settings) { - settings->setValue(QLatin1String(urlC), acc->_url.toString()); + settings.setValue(QLatin1String(urlC), acc->_url.toString()); if (acc->_credentials) { acc->_credentials->persist(); Q_FOREACH(QString key, acc->_settingsMap.keys()) { - settings->setValue(key, acc->_settingsMap.value(key)); + settings.setValue(key, acc->_settingsMap.value(key)); } - settings->setValue(QLatin1String(authTypeC), acc->_credentials->authType()); + settings.setValue(QLatin1String(authTypeC), acc->_credentials->authType()); // HACK: Save http_user also as user if (acc->_settingsMap.contains(httpUserC)) - settings->setValue(userC, acc->_settingsMap.value(httpUserC)); + settings.setValue(userC, acc->_settingsMap.value(httpUserC)); } - settings->sync(); + settings.sync(); // Save accepted certificates. - settings->beginGroup(QLatin1String("General")); + settings.beginGroup(QLatin1String("General")); qDebug() << "Saving " << acc->approvedCerts().count() << " unknown certs."; QByteArray certs; Q_FOREACH( const QSslCertificate& cert, acc->approvedCerts() ) { certs += cert.toPem() + '\n'; } if (!certs.isEmpty()) { - settings->setValue( QLatin1String(caCertsKeyC), certs ); + settings.setValue( QLatin1String(caCertsKeyC), certs ); } - settings->endGroup(); + settings.endGroup(); // Save cookies. if (acc->_am) { @@ -165,28 +167,29 @@ void AccountManager::save(const AccountPtr& acc, QScopedPointer& sett } } -AccountPtr AccountManager::load(const QScopedPointer& settings) +AccountPtr AccountManager::load(QSettings& settings) { auto acc = Account::create(); - acc->setUrl(settings->value(QLatin1String(urlC)).toUrl()); + acc->setUrl(settings.value(QLatin1String(urlC)).toUrl()); // We want to only restore settings for that auth type and the user value - acc->_settingsMap.insert(QLatin1String(userC), settings->value(userC)); - QString authTypePrefix = settings->value(authTypeC).toString() + "_"; - Q_FOREACH(QString key, settings->childKeys()) { + acc->_settingsMap.insert(QLatin1String(userC), settings.value(userC)); + QString authTypePrefix = settings.value(authTypeC).toString() + "_"; + Q_FOREACH(QString key, settings.childKeys()) { if (!key.startsWith(authTypePrefix)) continue; - acc->_settingsMap.insert(key, settings->value(key)); + acc->_settingsMap.insert(key, settings.value(key)); } - acc->setCredentials(CredentialsFactory::create(settings->value(QLatin1String(authTypeC)).toString())); + acc->setCredentials(CredentialsFactory::create(settings.value(QLatin1String(authTypeC)).toString())); // now the cert, it is in the general group - settings->beginGroup(QLatin1String("General")); - acc->setApprovedCerts(QSslCertificate::fromData(settings->value(caCertsKeyC).toByteArray())); + settings.beginGroup(QLatin1String("General")); + acc->setApprovedCerts(QSslCertificate::fromData(settings.value(caCertsKeyC).toByteArray())); acc->setSslErrorHandler(new SslDialogErrorHandler); - settings->endGroup(); + settings.endGroup(); + return acc; } diff --git a/src/gui/accountmanager.h b/src/gui/accountmanager.h index 228e54c3e..44ef48fab 100644 --- a/src/gui/accountmanager.h +++ b/src/gui/accountmanager.h @@ -51,8 +51,8 @@ public: QList accounts() { return _accounts; } private: - void save(const AccountPtr& account, QScopedPointer& settings); - AccountPtr load(const QScopedPointer& settings); + void save(const AccountPtr& account, QSettings& settings); + AccountPtr load(QSettings& settings); bool restoreFromLegacySettings(); bool isAccountIdAvailable(const QString& id) const; diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 8bcf52cb6..4a8be3b25 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -184,16 +184,13 @@ void AccountSettings::slotFolderWizardAccepted() qDebug() << "* Folder wizard completed"; - QString alias = folderWizard->field(QLatin1String("alias")).toString(); - QString sourceFolder = folderWizard->field(QLatin1String("sourceFolder")).toString(); - QString targetPath = folderWizard->property("targetPath").toString(); - QStringList selectiveSyncBlackList - = folderWizard->property("selectiveSyncBlackList").toStringList(); + FolderDefinition definition; + definition.alias = folderWizard->field(QLatin1String("alias")).toString(); + definition.localPath = folderWizard->field(QLatin1String("sourceFolder")).toString(); + definition.targetPath = folderWizard->property("targetPath").toString(); + definition.selectiveSyncBlackList = folderWizard->property("selectiveSyncBlackList").toStringList(); - if (!folderMan->addFolderDefinition(alias, sourceFolder, targetPath, selectiveSyncBlackList)) - return; - - Folder *f = folderMan->setupFolderFromConfigFile( alias ); + Folder *f = folderMan->addFolder(_accountState, definition); folderMan->setSyncEnabled(true); if( f ) { folderMan->slotScheduleAllFolders(); diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp index 0b37518ee..9a47a10b0 100644 --- a/src/gui/folder.cpp +++ b/src/gui/folder.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #include #include @@ -54,16 +55,16 @@ static void csyncLogCatcher(int /*verbosity*/, Folder::Folder(AccountState* accountState, - const QString& alias, - const QString& path, - const QString& secondPath, + const FolderDefinition& definition, QObject* parent) : QObject(parent) , _accountState(accountState) - , _path(path) - , _remotePath(secondPath) - , _alias(alias) - , _paused(false) + , _definition(definition) + , _alias(_definition.alias) + , _path(_definition.localPath) + , _remotePath(_definition.targetPath) + , _paused(_definition.paused) + , _selectiveSyncBlackList(_definition.selectiveSyncBlackList) , _csyncError(false) , _csyncUnavail(false) , _wipeDb(false) @@ -72,7 +73,7 @@ Folder::Folder(AccountState* accountState, , _forceSyncOnPollTimeout(false) , _consecutiveFailingSyncs(0) , _consecutiveFollowUpSyncs(0) - , _journal(path) + , _journal(_path) , _csync_ctx(0) { qsrand(QTime::currentTime().msec()); @@ -84,7 +85,7 @@ Folder::Folder(AccountState* accountState, // check if the local path exists checkLocalPath(); - _syncResult.setFolder(alias); + _syncResult.setFolder(_alias); } bool Folder::init() @@ -220,16 +221,21 @@ bool Folder::syncPaused() const void Folder::setSyncPaused( bool paused ) { - _paused = paused; + const bool oldPaused = _paused; + _paused = paused; - if( !paused ) { - // qDebug() << "Syncing enabled on folder " << name(); - } else { - // do not stop or start the watcher here, that is done internally by - // folder class. Even if the watcher fires, the folder does not - // schedule itself because it checks the var. _enabled before. - setSyncState(SyncResult::Paused); - } + if (_paused != oldPaused) { + saveToSettings(); + } + + if( !paused ) { + // qDebug() << "Syncing enabled on folder " << name(); + } else { + // do not stop or start the watcher here, that is done internally by + // folder class. Even if the watcher fires, the folder does not + // schedule itself because it checks the var. _enabled before. + setSyncState(SyncResult::Paused); + } } void Folder::setSyncState(SyncResult::Status state) @@ -567,16 +573,6 @@ void Folder::slotWatchedPathChanged(const QString& path) } } -void Folder::setConfigFile( const QString& file ) -{ - _configFile = file; -} - -QString Folder::configFile() -{ - return _configFile; -} - static void addErroredSyncItemPathsToList(const SyncFileItemVector& items, QSet* set) { Q_FOREACH(const SyncFileItem &item, items) { if (item.hasErrorStatus()) { @@ -640,6 +636,20 @@ bool Folder::estimateState(QString fn, csync_ftw_type_e t, SyncFileStatus* s) return false; } +void Folder::saveToSettings() const +{ + QScopedPointer settings(_accountState->account()->settings()); + settings->beginGroup(QLatin1String("Folders")); + FolderDefinition::save(*settings, _definition); +} + +void Folder::removeFromSettings() const +{ + QScopedPointer settings(_accountState->account()->settings()); + settings->beginGroup(QLatin1String("Folders")); + settings->remove(_definition.alias); +} + void Folder::watcherSlot(QString fn) { // FIXME: On OS X we could not do this "if" since on OS X the file watcher ignores events for ourselves @@ -847,6 +857,7 @@ void Folder::setSelectiveSyncBlackList(const QStringList& blackList) _selectiveSyncBlackList[i].append(QLatin1Char('/')); } } + saveToSettings(); } @@ -1020,5 +1031,31 @@ void Folder::slotAboutToRemoveAllFiles(SyncFileItem::Direction, bool *cancel) QTimer::singleShot(50, this, SLOT(slotRunEtagJob())); } } + + + +void FolderDefinition::save(QSettings& settings, const FolderDefinition& folder) +{ + settings.beginGroup(folder.alias); + settings.setValue(QLatin1String("localPath"), folder.localPath); + settings.setValue(QLatin1String("targetPath"), folder.targetPath); + settings.setValue(QLatin1String("blackList"), folder.selectiveSyncBlackList); + settings.setValue(QLatin1String("paused"), folder.paused); + settings.endGroup(); +} + +bool FolderDefinition::load(QSettings& settings, const QString& alias, + FolderDefinition* folder) +{ + settings.beginGroup(alias); + folder->alias = alias; + folder->localPath = settings.value(QLatin1String("localPath")).toString(); + folder->targetPath = settings.value(QLatin1String("targetPath")).toString(); + folder->selectiveSyncBlackList = settings.value(QLatin1String("blackList")).toStringList(); + folder->paused = settings.value(QLatin1String("paused")).toBool(); + settings.endGroup(); + return true; +} + } // namespace OCC diff --git a/src/gui/folder.h b/src/gui/folder.h index f07be9570..774bb0052 100644 --- a/src/gui/folder.h +++ b/src/gui/folder.h @@ -37,19 +37,46 @@ #include class QThread; +class QSettings; namespace OCC { class SyncEngine; class AccountState; +class FolderDefinition +{ +public: + FolderDefinition() + : paused(false) + {} + + /// The name of the folder in the ui and internally + QString alias; + /// path on local machine + QString localPath; + /// path on remote + QString targetPath; + /// Which folders not to sync + QStringList selectiveSyncBlackList; + /// whether the folder is paused + bool paused; + + /// Saves the folder definition, creating a new settings group. + static void save(QSettings& settings, const FolderDefinition& folder); + + /// Reads a folder definition from a settings group with the name 'alias'. + static bool load(QSettings& settings, const QString& alias, + FolderDefinition* folder); +}; + class Folder : public QObject { Q_OBJECT public: - Folder(AccountState* accountState, - const QString&, const QString&, const QString& , QObject*parent = 0L); + Folder(AccountState* accountState, const FolderDefinition& definition, + QObject* parent = 0L); ~Folder(); @@ -136,6 +163,11 @@ public: qint64 msecLastSyncDuration() const { return _lastSyncDuration; } int consecutiveFollowUpSyncs() const { return _consecutiveFollowUpSyncs; } + /// Saves the folder data in the account's settings. + void saveToSettings() const; + /// Removes the folder from the account's settings. + void removeFromSettings() const; + signals: void syncStateChange(); void syncStarted(); @@ -209,15 +241,17 @@ private: const QString& renameTarget = QString::null ); AccountState* _accountState; - QString _path; - QString _remotePath; - QString _alias; - QString _configFile; - bool _paused; + FolderDefinition _definition; + // TODO: Remove these. + QString& _path; + QString& _remotePath; + QString& _alias; + bool& _paused; + QStringList& _selectiveSyncBlackList; + SyncResult _syncResult; QScopedPointer _engine; QStringList _errors; - QStringList _selectiveSyncBlackList; bool _csyncError; bool _csyncUnavail; bool _wipeDb; diff --git a/src/gui/folderman.cpp b/src/gui/folderman.cpp index b4e476f59..3ee2186fa 100644 --- a/src/gui/folderman.cpp +++ b/src/gui/folderman.cpp @@ -187,32 +187,68 @@ void FolderMan::removeMonitorPath( const QString& alias, const QString& path ) int FolderMan::setupFolders() { - qDebug() << "* Setup folders from " << _folderConfigPath; + unloadAndDeleteAllFolders(); - unloadAndDeleteAllFolders(); - - ConfigFile cfg; - QDir storageDir(cfg.configPath()); - storageDir.mkpath(QLatin1String("folders")); - _folderConfigPath = cfg.configPath() + QLatin1String("folders"); - - QDir dir( _folderConfigPath ); - //We need to include hidden files just in case the alias starts with '.' - dir.setFilter(QDir::Files | QDir::Hidden); - QStringList list = dir.entryList(); - - foreach ( const QString& alias, list ) { - Folder *f = setupFolderFromConfigFile( alias ); - if( f ) { - slotScheduleSync(alias); - emit( folderSyncStateChange( f->alias() ) ); + QScopedPointer settings(Account::settingsWithGroup(QLatin1String("Accounts"))); + const auto accountsWithSettings = settings->childGroups(); + if (accountsWithSettings.isEmpty()) { + return setupFoldersMigration(); } - } - emit folderListLoaded(_folderMap); + qDebug() << "* Setup folders from settings file"; - // return the number of valid folders. - return _folderMap.size(); + foreach (const auto& account, AccountManager::instance()->accounts()) { + const auto id = account->account()->id(); + if (!accountsWithSettings.contains(id)) { + continue; + } + settings->beginGroup(id); + settings->beginGroup(QLatin1String("Folders")); + foreach (const auto& folderAlias, settings->childGroups()) { + FolderDefinition folderDefinition; + if (FolderDefinition::load(*settings, folderAlias, &folderDefinition)) { + Folder* f = addFolderInternal(account.data(), folderDefinition); + if (f) { + slotScheduleSync(f->alias()); + emit folderSyncStateChange(f->alias()); + } + } + } + settings->endGroup(); // Folders + settings->endGroup(); // + } + + emit folderListLoaded(_folderMap); + + return _folderMap.size(); +} + +int FolderMan::setupFoldersMigration() +{ + ConfigFile cfg; + QDir storageDir(cfg.configPath()); + storageDir.mkpath(QLatin1String("folders")); + _folderConfigPath = cfg.configPath() + QLatin1String("folders"); + + qDebug() << "* Setup folders from " << _folderConfigPath << "(migration)"; + + QDir dir( _folderConfigPath ); + //We need to include hidden files just in case the alias starts with '.' + dir.setFilter(QDir::Files | QDir::Hidden); + QStringList list = dir.entryList(); + + foreach ( const QString& alias, list ) { + Folder *f = setupFolderFromConfigFile( alias ); + if( f ) { + slotScheduleSync(alias); + emit( folderSyncStateChange( f->alias() ) ); + } + } + + emit folderListLoaded(_folderMap); + + // return the number of valid folders. + return _folderMap.size(); } bool FolderMan::ensureJournalGone(const QString &localPath) @@ -352,9 +388,12 @@ Folder* FolderMan::setupFolderFromConfigFile(const QString &file) { return 0; } - folder = new Folder( accountState, alias, path, targetPath, this ); - folder->setConfigFile(cfgFile.absoluteFilePath()); - folder->setSelectiveSyncBlackList(blackList); + FolderDefinition folderDefinition; + folderDefinition.alias = alias; + folderDefinition.localPath = path; + folderDefinition.targetPath = targetPath; + folderDefinition.selectiveSyncBlackList = blackList; + folder = new Folder( accountState, folderDefinition, this ); qDebug() << "Adding folder to Folder Map " << folder; _folderMap[alias] = folder; if (paused) { @@ -384,16 +423,12 @@ void FolderMan::slotSetFolderPaused( const QString& alias, bool paused ) slotScheduleSync(alias); - // FIXME: Use ConfigFile - QSettings settings(f->configFile(), QSettings::IniFormat); - settings.beginGroup(escapeAlias(f->alias())); if (!paused) { - settings.remove("paused"); _disabledFolders.remove(f); } else { - settings.setValue("paused", true); _disabledFolders.insert(f); } + f->setSyncPaused(paused); emit folderSyncStateChange(alias); } @@ -703,25 +738,37 @@ void FolderMan::slotFolderSyncFinished( const SyncResult& ) startScheduledSyncSoon(); } -bool FolderMan::addFolderDefinition(const QString& alias, const QString& sourceFolder, - const QString& targetPath, const QStringList& selectiveSyncBlackList) +Folder* FolderMan::addFolder(AccountState* accountState, const FolderDefinition& folderDefinition) { - if (! ensureJournalGone(sourceFolder)) - return false; + if (!ensureJournalGone(folderDefinition.localPath)) { + return 0; + } - QString escapedAlias = escapeAlias(alias); - // Create a settings file named after the alias - QSettings settings( _folderConfigPath + QLatin1Char('/') + escapedAlias, QSettings::IniFormat); - settings.beginGroup(escapedAlias); - settings.setValue(QLatin1String("localPath"), sourceFolder ); - settings.setValue(QLatin1String("targetPath"), targetPath ); - // for compat reasons - settings.setValue(QLatin1String("backend"), "owncloud" ); - settings.setValue(QLatin1String("connection"), Theme::instance()->appName()); - settings.setValue(QLatin1String("blackList"), selectiveSyncBlackList); - settings.sync(); + auto folder = addFolderInternal(accountState, folderDefinition); + folder->saveToSettings(); +} - return true; +Folder* FolderMan::addFolderInternal(AccountState* accountState, const FolderDefinition& folderDefinition) +{ + auto folder = new Folder( accountState, folderDefinition, this ); + + qDebug() << "Adding folder to Folder Map " << folder; + _folderMap[folder->alias()] = folder; + if (folderDefinition.paused) { + folder->setSyncPaused(true); + _disabledFolders.insert(folder); + } + + /* Use a signal mapper to connect the signals to the alias */ + connect(folder, SIGNAL(scheduleToSync(const QString&)), SLOT(slotScheduleSync(const QString&))); + connect(folder, SIGNAL(syncStateChange()), _folderChangeSignalMapper, SLOT(map())); + connect(folder, SIGNAL(syncStarted()), SLOT(slotFolderSyncStarted())); + connect(folder, SIGNAL(syncFinished(SyncResult)), SLOT(slotFolderSyncFinished(SyncResult))); + + _folderChangeSignalMapper->setMapping( folder, folder->alias() ); + + registerFolderMonitor(folder); + return folder; } Folder *FolderMan::folderForPath(const QString &path) @@ -776,11 +823,7 @@ void FolderMan::slotRemoveFolder( const QString& alias ) f->setSyncPaused(true); // remove the folder configuration - QFile file(f->configFile() ); - if( file.exists() ) { - qDebug() << "Remove folder config file " << file.fileName(); - file.remove(); - } + f->removeFromSettings(); unloadFolder( alias ); if( !currentlyRunning ) { diff --git a/src/gui/folderman.h b/src/gui/folderman.h index 7c7ae4a31..d8bdb6de1 100644 --- a/src/gui/folderman.h +++ b/src/gui/folderman.h @@ -41,22 +41,13 @@ public: static FolderMan* instance(); int setupFolders(); + int setupFoldersMigration(); OCC::Folder::Map map(); - /** - * Add a folder definition to the config - * Params: - * QString alias - * QString sourceFolder on local machine - * QString targetPath on remote - * - * Ensures any existing journal in the sourceFolder is deleted. - * Returns true on success. + /** Adds a folder for an account, ensures the journal is gone and saves it in the settings. */ - bool addFolderDefinition(const QString& alias, const QString& sourceFolder, - const QString& targetPath, - const QStringList& selectiveSyncBlacklist = QStringList()); + Folder* addFolder(AccountState* accountState, const FolderDefinition& folderDefinition); /** Returns the folder which the file or directory stored in path is in */ Folder* folderForPath(const QString& path); @@ -145,9 +136,14 @@ private slots: // slot to take the next folder from queue and start syncing. void slotStartScheduledFolderSync(); void slotEtagPollTimerTimeout(); + void slotRemoveFoldersForAccount(AccountState* accountState); private: + /** Adds a folder for an account, does not add it to the account settings. + */ + Folder* addFolderInternal(AccountState* accountState, const FolderDefinition& folderDefinition); + /* unloads a folder object, does not delete it */ void unloadFolder( const QString& alias ); diff --git a/src/gui/folderstatusmodel.cpp b/src/gui/folderstatusmodel.cpp index e27c98c4b..0c3854015 100644 --- a/src/gui/folderstatusmodel.cpp +++ b/src/gui/folderstatusmodel.cpp @@ -475,10 +475,6 @@ void FolderStatusModel::slotApplySelectiveSync() QStringList blackList = createBlackList(&_folders[i], oldBlackList); folder->setSelectiveSyncBlackList(blackList); - // FIXME: Use ConfigFile - QSettings settings(folder->configFile(), QSettings::IniFormat); - settings.beginGroup(FolderMan::escapeAlias(folder->alias())); - settings.setValue("blackList", blackList); FolderMan *folderMan = FolderMan::instance(); auto blackListSet = blackList.toSet(); auto oldBlackListSet = oldBlackList.toSet(); diff --git a/src/gui/owncloudsetupwizard.cpp b/src/gui/owncloudsetupwizard.cpp index b00acbd84..975d8ec12 100644 --- a/src/gui/owncloudsetupwizard.cpp +++ b/src/gui/owncloudsetupwizard.cpp @@ -480,8 +480,14 @@ void OwncloudSetupWizard::slotAssistantFinished( int result ) bool startFromScratch = _ocWizard->field("OCSyncFromScratch").toBool(); if (!startFromScratch || ensureStartFromScratch(localFolder)) { qDebug() << "Adding folder definition for" << localFolder << _remoteFolder; - folderMan->addFolderDefinition(Theme::instance()->appName(), - localFolder, _remoteFolder, _ocWizard->selectiveSyncBlacklist() ); + FolderDefinition folderDefinition; + folderDefinition.alias = Theme::instance()->appName(); + folderDefinition.localPath = localFolder; + folderDefinition.targetPath = _remoteFolder; + folderDefinition.selectiveSyncBlackList = _ocWizard->selectiveSyncBlacklist(); +#warning fixme: which account? save the one from addAccount below? + AccountState* account = AccountManager::instance()->accounts().value(0).data(); + folderMan->addFolder(account, folderDefinition); _ocWizard->appendToConfigurationLog(tr("Local sync folder %1 successfully created!").arg(localFolder)); } } diff --git a/src/gui/selectivesyncdialog.cpp b/src/gui/selectivesyncdialog.cpp index 07a616299..b50bb33bb 100644 --- a/src/gui/selectivesyncdialog.cpp +++ b/src/gui/selectivesyncdialog.cpp @@ -400,10 +400,6 @@ void SelectiveSyncDialog::accept() QStringList blackList = _treeView->createBlackList(); _folder->setSelectiveSyncBlackList(blackList); - // FIXME: Use ConfigFile - QSettings settings(_folder->configFile(), QSettings::IniFormat); - settings.beginGroup(FolderMan::escapeAlias(_folder->alias())); - settings.setValue("blackList", blackList); FolderMan *folderMan = FolderMan::instance(); if (_folder->isBusy()) { _folder->slotTerminateSync(); diff --git a/src/libsync/account.cpp b/src/libsync/account.cpp index 3c1bcff5c..71f349a63 100644 --- a/src/libsync/account.cpp +++ b/src/libsync/account.cpp @@ -318,6 +318,13 @@ QSettings *Account::settingsWithGroup(const QString& group, QObject *parent) return settings; } +QSettings* Account::settings() +{ + auto s = settingsWithGroup(QLatin1String("Accounts")); + s->beginGroup(id()); + return s; +} + QVariant Account::credentialSetting(const QString &key) const { if (_credentials) { diff --git a/src/libsync/account.h b/src/libsync/account.h index 49fa7372c..0f6a99554 100644 --- a/src/libsync/account.h +++ b/src/libsync/account.h @@ -121,6 +121,9 @@ public: with the given parent. If no parents is specified, the caller must destroy the settings */ static QSettings* settingsWithGroup(const QString &group, QObject *parent = 0); + /** Returns a new settings object for this account, already in the right groups. */ + QSettings* settings(); + // to be called by credentials only QVariant credentialSetting(const QString& key) const; void setCredentialSetting(const QString& key, const QVariant &value);