diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 919bae587..f1fa0d8bc 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -398,6 +398,18 @@ void AccountSettings::slotSelectiveSync() } } +void AccountSettings::slotForceRemoteDiscoveryOnFolders() +{ + FolderMan* folders = FolderMan::instance(); + foreach (Folder* folder, folders->map()) { + if (folder->accountState() != _accountState) { + continue; + } + + folder->journalDb()->forceRemoteDiscoveryNextSync(); + } +} + void AccountSettings::slotDoubleClicked( const QModelIndex& indx ) { if( ! indx.isValid() ) return; @@ -777,6 +789,7 @@ void AccountSettings::slotIgnoreFilesEditor() _ignoreEditor = new IgnoreListEditor(this); _ignoreEditor->setAttribute( Qt::WA_DeleteOnClose, true ); _ignoreEditor->open(); + connect(_ignoreEditor, SIGNAL(accepted()), SLOT(slotForceRemoteDiscoveryOnFolders())); } else { ownCloudGui::raiseDialog(_ignoreEditor); } diff --git a/src/gui/accountsettings.h b/src/gui/accountsettings.h index 94110a9bc..a6be9600b 100644 --- a/src/gui/accountsettings.h +++ b/src/gui/accountsettings.h @@ -83,6 +83,7 @@ protected slots: void slotOpenAccountWizard(); void slotHideProgress(); void slotSelectiveSync(); + void slotForceRemoteDiscoveryOnFolders(); private: QString shortenFilename( const QString& folder, const QString& file ) const; diff --git a/src/libsync/syncjournaldb.cpp b/src/libsync/syncjournaldb.cpp index 9298a120f..a3f6a5d1f 100644 --- a/src/libsync/syncjournaldb.cpp +++ b/src/libsync/syncjournaldb.cpp @@ -331,14 +331,7 @@ bool SyncJournalDb::checkConnect() * In 1.8.1 we had a fix to re-get the data, but this one here is better */ if (forceRemoteDiscovery) { - qDebug() << "Forcing remote re-discovery by deleting folder Etags"; - SqlQuery deleteRemoteFolderEtagsQuery(_db); - deleteRemoteFolderEtagsQuery.prepare("UPDATE metadata SET md5='_invalid_' WHERE type=2;"); - if( !deleteRemoteFolderEtagsQuery.exec() ) { - qDebug() << "ERROR: Query failed" << deleteRemoteFolderEtagsQuery.error(); - } else { - qDebug() << "Cleared" << deleteRemoteFolderEtagsQuery.numRowsAffected() << "folder ETags"; - } + forceRemoteDiscoveryNextSyncLocked(); } _getFileRecordQuery.reset(new SqlQuery(_db)); @@ -1295,6 +1288,30 @@ void SyncJournalDb::avoidReadFromDbOnNextSync(const QString& fileName) _avoidReadFromDbOnNextSyncFilter.append(fileName); } +void SyncJournalDb::forceRemoteDiscoveryNextSync() +{ + QMutexLocker locker(&_mutex); + + if( !checkConnect() ) { + return; + } + + forceRemoteDiscoveryNextSyncLocked(); +} + +void SyncJournalDb::forceRemoteDiscoveryNextSyncLocked() +{ + qDebug() << "Forcing remote re-discovery by deleting folder Etags"; + SqlQuery deleteRemoteFolderEtagsQuery(_db); + deleteRemoteFolderEtagsQuery.prepare("UPDATE metadata SET md5='_invalid_' WHERE type=2;"); + if( !deleteRemoteFolderEtagsQuery.exec() ) { + qDebug() << "ERROR: Query failed" << deleteRemoteFolderEtagsQuery.error(); + } else { + qDebug() << "Cleared" << deleteRemoteFolderEtagsQuery.numRowsAffected() << "folder ETags"; + } +} + + void SyncJournalDb::commit(const QString& context, bool startTrans) { QMutexLocker lock(&_mutex); diff --git a/src/libsync/syncjournaldb.h b/src/libsync/syncjournaldb.h index 6074631f1..f6e1f2f3d 100644 --- a/src/libsync/syncjournaldb.h +++ b/src/libsync/syncjournaldb.h @@ -97,6 +97,13 @@ public: */ void avoidReadFromDbOnNextSync(const QString& fileName); + /** + * Ensures full remote discovery happens on the next sync. + * + * Equivalent to calling avoidReadFromDbOnNextSync() for all files. + */ + void forceRemoteDiscoveryNextSync(); + bool postSyncCleanup(const QSet& filepathsToKeep, const QSet& prefixesToKeep); @@ -124,6 +131,9 @@ private: QStringList tableColumns( const QString& table ); bool checkConnect(); + // Same as forceRemoteDiscoveryNextSync but without acquiring the lock + void forceRemoteDiscoveryNextSyncLocked(); + SqlDatabase _db; QString _dbFile; QMutex _mutex; // Public functions are protected with the mutex.