From 84e5ad7346f103d584f878e99b989cd13cc8b3ef Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Thu, 11 Dec 2014 12:28:01 +0100 Subject: [PATCH] FolderMan: Delete old journal file when adding folder. #2606 --- src/mirall/accountsettings.cpp | 3 +-- src/mirall/folderman.cpp | 10 ++++++++-- src/mirall/folderman.h | 8 ++++++-- src/mirall/owncloudsetupwizard.cpp | 14 ++++++++------ 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/mirall/accountsettings.cpp b/src/mirall/accountsettings.cpp index ea1014225..7578e8927 100644 --- a/src/mirall/accountsettings.cpp +++ b/src/mirall/accountsettings.cpp @@ -202,10 +202,9 @@ void AccountSettings::slotFolderWizardAccepted() QStringList selectiveSyncBlackList = folderWizard->property("selectiveSyncBlackList").toStringList(); - if (!FolderMan::ensureJournalGone( sourceFolder )) + if (!folderMan->addFolderDefinition(alias, sourceFolder, targetPath, selectiveSyncBlackList)) return; - folderMan->addFolderDefinition(alias, sourceFolder, targetPath, selectiveSyncBlackList ); Folder *f = folderMan->setupFolderFromConfigFile( alias ); slotAddFolder( f ); folderMan->setSyncEnabled(true); diff --git a/src/mirall/folderman.cpp b/src/mirall/folderman.cpp index 0d45fb10e..99b91d1b3 100644 --- a/src/mirall/folderman.cpp +++ b/src/mirall/folderman.cpp @@ -234,6 +234,7 @@ bool FolderMan::ensureJournalGone(const QString &localPath) // remove old .csync_journal file QString stateDbFile = localPath+QLatin1String("/.csync_journal.db"); while (QFile::exists(stateDbFile) && !QFile::remove(stateDbFile)) { + qDebug() << "Could not remove old db file at" << stateDbFile; int ret = QMessageBox::warning(0, tr("Could not reset folder state"), tr("An old sync journal '%1' was found, " "but could not be removed. Please make sure " @@ -650,9 +651,12 @@ void FolderMan::slotFolderSyncFinished( const SyncResult& ) QTimer::singleShot(200, this, SLOT(slotStartScheduledFolderSync())); } -void FolderMan::addFolderDefinition(const QString& alias, const QString& sourceFolder, - const QString& targetPath, const QStringList &selectiveSyncBlackList ) +bool FolderMan::addFolderDefinition(const QString& alias, const QString& sourceFolder, + const QString& targetPath, const QStringList& selectiveSyncBlackList) { + if (! ensureJournalGone(sourceFolder)) + return false; + QString escapedAlias = escapeAlias(alias); // Create a settings file named after the alias QSettings settings( _folderConfigPath + QLatin1Char('/') + escapedAlias, QSettings::IniFormat); @@ -664,6 +668,8 @@ void FolderMan::addFolderDefinition(const QString& alias, const QString& sourceF settings.setValue(QLatin1String("connection"), Theme::instance()->appName()); settings.setValue(QLatin1String("blackList"), selectiveSyncBlackList); settings.sync(); + + return true; } Folder *FolderMan::folderForPath(const QString &path) diff --git a/src/mirall/folderman.h b/src/mirall/folderman.h index 442a169b4..fd59014fb 100644 --- a/src/mirall/folderman.h +++ b/src/mirall/folderman.h @@ -49,9 +49,13 @@ public: * QString alias * QString sourceFolder on local machine * QString targetPath on remote + * + * Ensures any existing journal in the sourceFolder is deleted. + * Returns true on success. */ - void addFolderDefinition(const QString&, const QString&, const QString& , - const QStringList &selectiveSyncBlacklist = QStringList() ); + bool addFolderDefinition(const QString& alias, const QString& sourceFolder, + const QString& targetPath, + const QStringList& selectiveSyncBlacklist = QStringList()); /** Returns the folder which the file or directory stored in path is in */ Folder* folderForPath(const QString& path); diff --git a/src/mirall/owncloudsetupwizard.cpp b/src/mirall/owncloudsetupwizard.cpp index a5b8534f2..56425cc5a 100644 --- a/src/mirall/owncloudsetupwizard.cpp +++ b/src/mirall/owncloudsetupwizard.cpp @@ -437,17 +437,19 @@ void OwncloudSetupWizard::slotAssistantFinished( int result ) // 2.1: startFromScratch: (Re)move local data, clean slate sync if (startFromScratch) { if (ensureStartFromScratch(localFolder)) { - folderMan->addFolderDefinition(Theme::instance()->appName(), - localFolder, _remoteFolder, _ocWizard->blacklist() ); - _ocWizard->appendToConfigurationLog(tr("Local sync folder %1 successfully created!").arg(localFolder)); + if (folderMan->addFolderDefinition(Theme::instance()->appName(), + localFolder, _remoteFolder, _ocWizard->blacklist() )) { + _ocWizard->appendToConfigurationLog(tr("Local sync folder %1 successfully created!").arg(localFolder)); + } replaceDefaultAccountWith(newAccount); } } // 2.2: Reinit: Remove journal and start a sync else { - folderMan->addFolderDefinition(Theme::instance()->appName(), - localFolder, _remoteFolder, _ocWizard->blacklist() ); - _ocWizard->appendToConfigurationLog(tr("Local sync folder %1 successfully created!").arg(localFolder)); + if (folderMan->addFolderDefinition(Theme::instance()->appName(), + localFolder, _remoteFolder, _ocWizard->blacklist() )) { + _ocWizard->appendToConfigurationLog(tr("Local sync folder %1 successfully created!").arg(localFolder)); + } replaceDefaultAccountWith(newAccount); } }