[Pkg-owncloud-commits] [owncloud-client] 108/498: Confirm feature: Use selective sync in the database

Sandro Knauß hefee-guest at moszumanska.debian.org
Tue Aug 11 14:48:41 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 10d9e53159aaaadd9316bdfbb8dd57635059c703
Author: Olivier Goffart <ogoffart at woboq.com>
Date:   Thu May 21 12:22:50 2015 +0200

    Confirm feature: Use selective sync in the database
---
 src/cmd/cmd.cpp                 | 33 ++++-----------------------------
 src/gui/folder.cpp              | 11 -----------
 src/gui/folder.h                |  4 ----
 src/gui/folderman.cpp           |  8 ++++++--
 src/gui/selectivesyncdialog.cpp | 11 ++++-------
 src/gui/socketapi.cpp           |  2 +-
 src/libsync/syncengine.cpp      | 15 +++++++--------
 src/libsync/syncengine.h        |  4 ----
 src/libsync/syncjournaldb.cpp   |  2 +-
 src/libsync/syncjournaldb.h     |  2 +-
 10 files changed, 24 insertions(+), 68 deletions(-)

diff --git a/src/cmd/cmd.cpp b/src/cmd/cmd.cpp
index 486cef3..0f83bdb 100644
--- a/src/cmd/cmd.cpp
+++ b/src/cmd/cmd.cpp
@@ -251,38 +251,14 @@ void selectiveSyncFixup(OCC::SyncJournalDb *journal, const QStringList &newList)
         return;
     }
 
-    SqlQuery select("SELECT path FROM last_selective_sync", db);
-    QSet<QString> oldBlackListSet;
-    if (select.exec()) {
-        while(select.next()) {
-            oldBlackListSet.insert(select.stringValue(0));
-        }
-    }
-
-
+    auto oldBlackListSet = journal->getSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList).toSet();
     auto blackListSet = newList.toSet();
     auto changes = (oldBlackListSet - blackListSet) + (blackListSet - oldBlackListSet);
     foreach(const auto &it, changes) {
         journal->avoidReadFromDbOnNextSync(it);
     }
 
-    SqlQuery drop("DROP TABLE last_selective_sync", db);
-    drop.exec();
-
-    if (!newList.isEmpty()) {
-        SqlQuery createQuery(db);
-        createQuery.prepare("CREATE TABLE IF NOT EXISTS last_selective_sync(path VARCHAR(4096));");
-        createQuery.exec();
-
-        SqlQuery insertQuery(db);
-        insertQuery.prepare("INSERT INTO last_selective_sync VALUES (?1);");
-
-        foreach(const auto &s, newList) {
-            insertQuery.reset();
-            insertQuery.bindValue(1, s);
-            insertQuery.exec();
-        }
-    }
+    journal->setSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList, newList);
 }
 
 
@@ -467,14 +443,13 @@ restart_sync:
 
     Cmd cmd;
     SyncJournalDb db(options.source_dir);
-    selectiveSyncFixup(&db, selectiveSyncList);
+    if (!selectiveSyncList.empty())
+        selectiveSyncFixup(&db, selectiveSyncList);
 
     SyncEngine engine(account, _csync_ctx, options.source_dir, QUrl(options.target_url).path(), folder, &db);
     QObject::connect(&engine, SIGNAL(finished()), &app, SLOT(quit()));
     QObject::connect(&engine, SIGNAL(transmissionProgress(ProgressInfo)), &cmd, SLOT(transmissionProgressSlot()));
 
-    engine.setSelectiveSyncBlackList(selectiveSyncList);
-
     // Have to be done async, else, an error before exec() does not terminate the event loop.
     QMetaObject::invokeMethod(&engine, "startSync", Qt::QueuedConnection);
 
diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp
index fa50a28..8616e18 100644
--- a/src/gui/folder.cpp
+++ b/src/gui/folder.cpp
@@ -820,7 +820,6 @@ void Folder::startSync(const QStringList &pathList)
     connect(_engine.data(), SIGNAL(syncItemDiscovered(const SyncFileItem &)), this, SLOT(slotSyncItemDiscovered(const SyncFileItem &)));
 
     setDirtyNetworkLimits();
-    _engine->setSelectiveSyncBlackList(selectiveSyncBlackList());
 
     QMetaObject::invokeMethod(_engine.data(), "startSync", Qt::QueuedConnection);
 
@@ -850,16 +849,6 @@ void Folder::setDirtyNetworkLimits()
     }
 }
 
-void Folder::setSelectiveSyncBlackList(const QStringList& blackList)
-{
-    _selectiveSyncBlackList = blackList;
-    for (int i = 0; i < _selectiveSyncBlackList.count(); ++i) {
-        if (!_selectiveSyncBlackList.at(i).endsWith(QLatin1Char('/'))) {
-            _selectiveSyncBlackList[i].append(QLatin1Char('/'));
-        }
-    }
-}
-
 
 void Folder::slotSyncError(const QString& err)
 {
diff --git a/src/gui/folder.h b/src/gui/folder.h
index e2f47a2..06db2a0 100644
--- a/src/gui/folder.h
+++ b/src/gui/folder.h
@@ -131,9 +131,6 @@ public:
      // Used by the Socket API
      SyncJournalDb *journalDb() { return &_journal; }
 
-     QStringList selectiveSyncBlackList() { return _selectiveSyncBlackList; }
-     void setSelectiveSyncBlackList(const QStringList &blackList);
-
      bool estimateState(QString fn, csync_ftw_type_e t, SyncFileStatus* s);
 
      RequestEtagJob *etagJob() { return _requestEtagJob; }
@@ -222,7 +219,6 @@ private:
     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 6e39847..ee2beb0 100644
--- a/src/gui/folderman.cpp
+++ b/src/gui/folderman.cpp
@@ -339,7 +339,6 @@ Folder* FolderMan::setupFolderFromConfigFile(const QString &file) {
     QString backend = settings.value(QLatin1String("backend")).toString();
     QString targetPath = settings.value( QLatin1String("targetPath")).toString();
     bool paused = settings.value( QLatin1String("paused"), false).toBool();
-    QStringList blackList = settings.value( QLatin1String("blackList")).toStringList();
     // QString connection = settings.value( QLatin1String("connection") ).toString();
     QString alias = unescapeAlias( escapedAlias );
 
@@ -361,7 +360,6 @@ Folder* FolderMan::setupFolderFromConfigFile(const QString &file) {
 
     folder = new Folder( accountState, alias, path, targetPath, this );
     folder->setConfigFile(cfgFile.absoluteFilePath());
-    folder->setSelectiveSyncBlackList(blackList);
     qDebug() << "Adding folder to Folder Map " << folder;
     _folderMap[alias] = folder;
     if (paused) {
@@ -378,6 +376,12 @@ Folder* FolderMan::setupFolderFromConfigFile(const QString &file) {
     _folderChangeSignalMapper->setMapping( folder, folder->alias() );
 
     registerFolderMonitor(folder);
+    QStringList blackList = settings.value( QLatin1String("blackList")).toStringList();
+    if (!blackList.empty()) {
+        //migrate settings
+        folder->journalDb()->setSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList, blackList);
+        settings.remove(QLatin1String("blackList"));
+    }
     return folder;
 }
 
diff --git a/src/gui/selectivesyncdialog.cpp b/src/gui/selectivesyncdialog.cpp
index 429fe98..7a659e1 100644
--- a/src/gui/selectivesyncdialog.cpp
+++ b/src/gui/selectivesyncdialog.cpp
@@ -358,7 +358,8 @@ SelectiveSyncDialog::SelectiveSyncDialog(AccountPtr account, Folder* folder, QWi
     :   QDialog(parent, f), _folder(folder)
 {
     init(account, tr("Unchecked folders will be <b>removed</b> from your local file system and will not be synchronized to this computer anymore"));
-    _treeView->setFolderInfo(_folder->remotePath(), _folder->alias(), _folder->selectiveSyncBlackList());
+    _treeView->setFolderInfo(_folder->remotePath(), _folder->alias(),
+                             _folder->journalDb()->getSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList));
 
     // Make sure we don't get crashes if the folder is destroyed while we are still open
     connect(_folder, SIGNAL(destroyed(QObject*)), this, SLOT(deleteLater()));
@@ -396,14 +397,10 @@ void SelectiveSyncDialog::init(const AccountPtr &account, const QString &labelTe
 void SelectiveSyncDialog::accept()
 {
     if (_folder) {
-        auto oldBlackListSet = _folder->selectiveSyncBlackList().toSet();
+        auto oldBlackListSet = _folder->journalDb()->getSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList).toSet();
         QStringList blackList = _treeView->createBlackList();
-        _folder->setSelectiveSyncBlackList(blackList);
+        _folder->journalDb()->setSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList, 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/gui/socketapi.cpp b/src/gui/socketapi.cpp
index 1a7f641..b04116f 100644
--- a/src/gui/socketapi.cpp
+++ b/src/gui/socketapi.cpp
@@ -597,7 +597,7 @@ SyncFileStatus SocketApi::fileStatus(Folder *folder, const QString& systemFileNa
     }
 
     // Error if it is in the selective sync blacklistr
-    foreach(const auto &s, folder->selectiveSyncBlackList()) {
+    foreach(const auto &s, folder->journalDb()->getSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList)) {
         if (fileNameSlash.startsWith(s)) {
             return SyncFileStatus(SyncFileStatus::STATUS_ERROR);
         }
diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp
index 208c381..1457281 100644
--- a/src/libsync/syncengine.cpp
+++ b/src/libsync/syncengine.cpp
@@ -606,7 +606,8 @@ void SyncEngine::startSync()
     // thereby speeding up the initial discovery significantly.
     _csync_ctx->db_is_empty = (fileRecordCount == 0);
 
-    bool usingSelectiveSync = (!_selectiveSyncBlackList.isEmpty());
+    auto selectiveSyncBlackList = _journal->getSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList);
+    bool usingSelectiveSync = (!selectiveSyncBlackList.isEmpty());
     qDebug() << (usingSelectiveSync ? "====Using Selective Sync" : "====NOT Using Selective Sync");
     if (fileRecordCount >= 0 && fileRecordCount < 50 && !usingSelectiveSync) {
         qDebug() << "===== Activating recursive PROPFIND (currently" << fileRecordCount << "file records)";
@@ -636,7 +637,7 @@ void SyncEngine::startSync()
 
 
     DiscoveryJob *discoveryJob = new DiscoveryJob(_csync_ctx);
-    discoveryJob->_selectiveSyncBlackList = _selectiveSyncBlackList;
+    discoveryJob->_selectiveSyncBlackList = selectiveSyncBlackList;
     discoveryJob->moveToThread(&_thread);
     connect(discoveryJob, SIGNAL(finished(int)), this, SLOT(slotDiscoveryJobFinished(int)));
     connect(discoveryJob, SIGNAL(folderDiscovered(bool,QString)),
@@ -905,6 +906,9 @@ QString SyncEngine::adjustRenamedPath(const QString& original)
  */
 void SyncEngine::checkForPermission()
 {
+    auto selectiveSyncBlackList = _journal->getSelectiveSyncList(SyncJournalDb::SelectiveSyncBlackList);
+    std::sort(selectiveSyncBlackList.begin(), selectiveSyncBlackList.end());
+
     for (SyncFileItemVector::iterator it = _syncedItems.begin(); it != _syncedItems.end(); ++it) {
         if ((*it)->_direction != SyncFileItem::Up) {
             // Currently we only check server-side permissions
@@ -913,7 +917,7 @@ void SyncEngine::checkForPermission()
 
         // Do not propagate anything in the server if it is in the selective sync blacklist
         const QString path = (*it)->destination() + QLatin1Char('/');
-        if (std::binary_search(_selectiveSyncBlackList.constBegin(), _selectiveSyncBlackList.constEnd(),
+        if (std::binary_search(selectiveSyncBlackList.constBegin(), selectiveSyncBlackList.constEnd(),
                                 path)) {
             (*it)->_instruction = CSYNC_INSTRUCTION_IGNORE;
             (*it)->_status = SyncFileItem::FileIgnored;
@@ -1134,11 +1138,6 @@ QByteArray SyncEngine::getPermissions(const QString& file) const
     return _remotePerms.value(file);
 }
 
-void SyncEngine::setSelectiveSyncBlackList(const QStringList& list)
-{
-    _selectiveSyncBlackList = list;
-}
-
 bool SyncEngine::estimateState(QString fn, csync_ftw_type_e t, SyncFileStatus* s)
 {
     Q_UNUSED(t);
diff --git a/src/libsync/syncengine.h b/src/libsync/syncengine.h
index baa3ffc..a60781e 100644
--- a/src/libsync/syncengine.h
+++ b/src/libsync/syncengine.h
@@ -64,8 +64,6 @@ public:
 
     Utility::StopWatch &stopWatch() { return _stopWatch; }
 
-    void setSelectiveSyncBlackList(const QStringList &list);
-
     /* Return true if we detected that another sync is needed to complete the sync */
     bool isAnotherSyncNeeded() { return _anotherSyncNeeded; }
 
@@ -200,8 +198,6 @@ private:
     // hash containing the permissions on the remote directory
     QHash<QString, QByteArray> _remotePerms;
 
-    QStringList _selectiveSyncBlackList;
-
     bool _anotherSyncNeeded;
 };
 
diff --git a/src/libsync/syncjournaldb.cpp b/src/libsync/syncjournaldb.cpp
index eebd3ef..c3a4568 100644
--- a/src/libsync/syncjournaldb.cpp
+++ b/src/libsync/syncjournaldb.cpp
@@ -1259,7 +1259,7 @@ void SyncJournalDb::setPollInfo(const SyncJournalDb::PollInfo& info)
     }
 }
 
-QStringList SyncJournalDb::selectiveSyncList(SyncJournalDb::SelectiveSyncListType type)
+QStringList SyncJournalDb::getSelectiveSyncList(SyncJournalDb::SelectiveSyncListType type)
 {
     QStringList result;
 
diff --git a/src/libsync/syncjournaldb.h b/src/libsync/syncjournaldb.h
index fcbc155..b1b2d07 100644
--- a/src/libsync/syncjournaldb.h
+++ b/src/libsync/syncjournaldb.h
@@ -97,7 +97,7 @@ public:
         SelectiveSyncUndecidedList = 3
     };
     /* return the specified list from the database */
-    QStringList selectiveSyncList(SelectiveSyncListType type);
+    QStringList getSelectiveSyncList(SelectiveSyncListType type);
     /* Write the selective sync list (remove all other entries of that list */
     void setSelectiveSyncList(SelectiveSyncListType type, const QStringList &list);
 

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