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