[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