diff --git a/src/mirall/folder.cpp b/src/mirall/folder.cpp index 39a93cf69d..604dde4683 100644 --- a/src/mirall/folder.cpp +++ b/src/mirall/folder.cpp @@ -56,6 +56,7 @@ Folder::Folder(const QString &alias, const QString &path, const QString& secondP , _csync_ctx(0) { qsrand(QTime::currentTime().msec()); + _timeSinceLastSync.start(); _watcher = new FolderWatcher(path, this); @@ -235,11 +236,17 @@ void Folder::evaluateSync(const QStringList &/*pathList*/) void Folder::slotPollTimerTimeout() { - qDebug() << "* Polling" << alias() << "for changes. Ignoring all pending events until now"; + qDebug() << "* Polling" << alias() << "for changes. Ignoring all pending events until now (time since next sync:" << (_timeSinceLastSync.elapsed() / 1000) << "s)"; _watcher->clearPendingEvents(); - QObject::connect(new RequestEtagJob(secondPath(), this), SIGNAL(etagRetreived(QString)), - this, SLOT(etagRetreived(QString))); + if (_timeSinceLastSync.elapsed() > MirallConfigFile().forceSyncInterval()) { + qDebug() << "* Force Sync now"; + evaluateSync(QStringList()); + } else { + // check if the etag is different + QObject::connect(new RequestEtagJob(secondPath(), this), SIGNAL(etagRetreived(QString)), + this, SLOT(etagRetreived(QString))); + } } void Folder::etagRetreived(const QString& etag) @@ -262,6 +269,7 @@ void Folder::slotSyncFinished(const SyncResult &result) { _watcher->setEventsEnabledDelayed(2000); _pollTimer.start(); + _timeSinceLastSync.restart(); qDebug() << "OO folder slotSyncFinished: result: " << int(result.status()); emit syncStateChange(); diff --git a/src/mirall/folder.h b/src/mirall/folder.h index 44fea9b5a0..142fbd777a 100644 --- a/src/mirall/folder.h +++ b/src/mirall/folder.h @@ -30,6 +30,7 @@ #include #include +#include class QFileSystemWatcher; class QThread; @@ -213,6 +214,7 @@ protected: Progress::Kind _progressKind; QTimer _pollTimer; QString _lastEtag; + QElapsedTimer _timeSinceLastSync; CSYNC *_csync_ctx; diff --git a/src/mirall/mirallconfigfile.cpp b/src/mirall/mirallconfigfile.cpp index b58f8d162f..425b1ef132 100644 --- a/src/mirall/mirallconfigfile.cpp +++ b/src/mirall/mirallconfigfile.cpp @@ -33,6 +33,7 @@ static const char authTypeC[] = "authType"; static const char caCertsKeyC[] = "CaCertificates"; static const char remotePollIntervalC[] = "remotePollInterval"; +static const char forceSyncIntervalC[] = "forceSyncInterval"; static const char monoIconsC[] = "monoIcons"; static const char optionalDesktopNoficationsC[] = "optionalDesktopNotifications"; static const char skipUpdateCheckC[] = "skipUpdateCheck"; @@ -390,6 +391,24 @@ void MirallConfigFile::setRemotePollInterval(int interval, const QString &connec settings.sync(); } +quint64 MirallConfigFile::forceSyncInterval(const QString& connection) const +{ + uint pollInterval = remotePollInterval(connection); + + QString con( connection ); + if( connection.isEmpty() ) con = defaultConnection(); + QSettings settings(configFile(), QSettings::IniFormat); + settings.setIniCodec("UTF-8"); + settings.beginGroup( con ); + + quint64 interval = settings.value( QLatin1String(forceSyncIntervalC), 10 * pollInterval ).toULongLong(); + if( interval < pollInterval) { + qDebug() << "Force sync interval is less than the remote poll inteval, reverting to" << pollInterval; + interval = pollInterval; + } + return interval; +} + QString MirallConfigFile::ownCloudVersion() const { return _oCVersion; diff --git a/src/mirall/mirallconfigfile.h b/src/mirall/mirallconfigfile.h index 6986a79dc5..bc6304761f 100644 --- a/src/mirall/mirallconfigfile.h +++ b/src/mirall/mirallconfigfile.h @@ -72,6 +72,9 @@ public: /* Set poll interval. Value in microseconds has to be larger than 5000 */ void setRemotePollInterval(int interval, const QString& connection = QString() ); + /* Force sync interval, in milliseconds */ + quint64 forceSyncInterval(const QString &connection = QString()) const; + // Custom Config: accept the custom config to become the main one. void acceptCustomConfig(); // Custom Config: remove the custom config file.