use timer to check filesystem; refs #155

master
Marc Wäckerlin 13 years ago
parent 7e381d1bf3
commit 7d47d245c9
  1. 34
      src/qbrowserlib/filestorage.hxx

@ -9,9 +9,10 @@
#include <QtCore/QFile> #include <QtCore/QFile>
#include <QtCore/QDir> #include <QtCore/QDir>
#include <QtCore/QFileInfo> #include <QtCore/QFileInfo>
#include <QtCore/QFileSystemWatcher>
#include <QtCore/QString> #include <QtCore/QString>
#include <QtCore/QStringList> #include <QtCore/QStringList>
#include <QtCore/QTimer>
#include <QtCore/QDateTime>
#include <cassert> #include <cassert>
@ -59,24 +60,22 @@ class FileStorage: public Storage {
Q_OBJECT; Q_OBJECT;
public: public:
/*! @param file full path to storage file */ /*! @param file full path to storage file */
FileStorage(QString file): _file(file) { FileStorage(QString file, int msec=1000): _file(file), _fileInfo(_file) {
TRC; LOG<<"file: "<<file; TRC; LOG<<"file: "<<file;
_watcher.addPath(QFileInfo(_file).absolutePath()); assert(connect(&_timer, SIGNAL(timeout()), SLOT(check())));
assert(connect(&_watcher, SIGNAL(directoryChanged(const QString&)), _timer.setInterval(msec);
SLOT(setupWatcher()))); _timer.start();
assert(connect(&_watcher, SIGNAL(fileChanged(const QString&)),
SLOT(emitChanged())));
} }
QString name() { QString name() {
return _file.fileName(); return _file.fileName();
} }
bool readable() { bool readable() {
return QFileInfo(_file).exists(); return _fileInfo.exists();
} }
bool writeable() { bool writeable() {
return readable() || return readable() ||
(!_file.fileName().isEmpty() && (!_file.fileName().isEmpty() &&
QFileInfo(_file).absoluteDir().exists()); _fileInfo.absoluteDir().exists());
} }
QStringList read() { QStringList read() {
TRC; TRC;
@ -99,18 +98,17 @@ class FileStorage: public Storage {
return res; return res;
} }
private Q_SLOTS: private Q_SLOTS:
void setupWatcher() { void check() {
TRC; TRC;
bool watching(_watcher.files().size()); if (_modified!=_fileInfo.lastModified()) {
if (watching) // remove watchlist if already existent LOG<<"file has been modified";
_watcher.removePaths(_watcher.files()); _modified = _fileInfo.lastModified();
if (readable()) { // add file to watchlist emitChanged();
_watcher.addPath(_file.fileName());
if (!watching) // send change event if file is initially created
emitChanged();
} }
} }
private: private:
QFile _file; QFile _file;
QFileSystemWatcher _watcher; QFileInfo _fileInfo;
QDateTime _modified;
QTimer _timer;
}; };

Loading…
Cancel
Save