[Pkg-owncloud-commits] [owncloud-client] 50/498: Folders: Store inside account config.

Sandro Knauß hefee-guest at moszumanska.debian.org
Tue Aug 11 14:48:33 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 27159104a947de7e388dcd16cae7a8c61ba44982
Author: Christian Kamm <kamm at incasoftware.de>
Date:   Fri Apr 24 10:18:33 2015 +0200

    Folders: Store inside account config.
---
 src/gui/accountmanager.cpp      |  51 ++++++++-------
 src/gui/accountmanager.h        |   4 +-
 src/gui/accountsettings.cpp     |  15 ++---
 src/gui/folder.cpp              |  95 ++++++++++++++++++---------
 src/gui/folder.h                |  50 ++++++++++++---
 src/gui/folderman.cpp           | 139 ++++++++++++++++++++++++++--------------
 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, 260 insertions(+), 142 deletions(-)

diff --git a/src/gui/accountmanager.cpp b/src/gui/accountmanager.cpp
index 3be3c2c..5d84ebf 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<QSettings> settings(Account::settingsWithGroup("Accounts"));
+    QScopedPointer<QSettings> 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<QSettings> settings(Account::settingsWithGroup("Accounts"));
+    QScopedPointer<QSettings> 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<QSettings>& 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<QSettings>& sett
     }
 }
 
-AccountPtr AccountManager::load(const QScopedPointer<QSettings>& 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 228e54c..44ef48f 100644
--- a/src/gui/accountmanager.h
+++ b/src/gui/accountmanager.h
@@ -51,8 +51,8 @@ public:
     QList<AccountStatePtr> accounts() { return _accounts; }
 
 private:
-    void save(const AccountPtr& account, QScopedPointer<QSettings>& settings);
-    AccountPtr load(const QScopedPointer<QSettings>& 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 8bcf52c..4a8be3b 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 0b37518..9a47a10 100644
--- a/src/gui/folder.cpp
+++ b/src/gui/folder.cpp
@@ -38,6 +38,7 @@
 #include <QTimer>
 #include <QUrl>
 #include <QDir>
+#include <QSettings>
 
 #include <QMessageBox>
 #include <QPushButton>
@@ -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;
-
-  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);
-  }
+    const bool oldPaused = _paused;
+    _paused = 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<QString>* 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<QSettings> settings(_accountState->account()->settings());
+    settings->beginGroup(QLatin1String("Folders"));
+    FolderDefinition::save(*settings, _definition);
+}
+
+void Folder::removeFromSettings() const
+{
+    QScopedPointer<QSettings> 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 f07be95..774bb00 100644
--- a/src/gui/folder.h
+++ b/src/gui/folder.h
@@ -37,19 +37,46 @@
 #include <qelapsedtimer.h>
 
 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<SyncEngine> _engine;
     QStringList  _errors;
-    QStringList _selectiveSyncBlackList;
     bool         _csyncError;
     bool         _csyncUnavail;
     bool         _wipeDb;
diff --git a/src/gui/folderman.cpp b/src/gui/folderman.cpp
index b4e476f..3ee2186 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();
+    QScopedPointer<QSettings> settings(Account::settingsWithGroup(QLatin1String("Accounts")));
+    const auto accountsWithSettings = settings->childGroups();
+    if (accountsWithSettings.isEmpty()) {
+        return setupFoldersMigration();
+    }
+
+    qDebug() << "* Setup folders from settings file";
 
-  ConfigFile cfg;
-  QDir storageDir(cfg.configPath());
-  storageDir.mkpath(QLatin1String("folders"));
-  _folderConfigPath = cfg.configPath() + QLatin1String("folders");
+    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(); // <account>
+    }
 
-  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();
+    emit folderListLoaded(_folderMap);
 
-  foreach ( const QString& alias, list ) {
-    Folder *f = setupFolderFromConfigFile( alias );
-    if( f ) {
-        slotScheduleSync(alias);
-        emit( folderSyncStateChange( f->alias() ) );
+    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);
+    emit folderListLoaded(_folderMap);
 
-  // return the number of valid folders.
-  return _folderMap.size();
+    // 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 7c7ae4a..d8bdb6d 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 e27c98c..0c38540 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 b00acbd..975d8ec 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("<font color=\"green\"><b>Local sync folder %1 successfully created!</b></font>").arg(localFolder));
         }
     }
diff --git a/src/gui/selectivesyncdialog.cpp b/src/gui/selectivesyncdialog.cpp
index 07a6162..b50bb33 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 3c1bcff..71f349a 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 49fa737..0f6a995 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);

-- 
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