00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef _QRELIABLE_FILE_WATCH_H_
00017 #define _QRELIABLE_FILE_WATCH_H_
00018
00019 #include "qce-config.h"
00020
00026 #include <QHash>
00027 #include <QTimer>
00028 #include <QPointer>
00029 #include <QFileSystemWatcher>
00030
00031 class QCE_EXPORT QReliableFileWatch : protected QFileSystemWatcher
00032 {
00033 friend class QPointer<QReliableFileWatch>;
00034
00035 Q_OBJECT
00036
00037 public:
00038 QReliableFileWatch(QObject *p = 0);
00039 virtual ~QReliableFileWatch();
00040
00041 public slots:
00042 void addWatch(const QString& file, QObject *recipient);
00043 void removeWatch(const QString& file, QObject *recipient);
00044
00045 protected:
00046 virtual void timerEvent(QTimerEvent *e);
00047
00048 private slots:
00049 void sourceChanged(const QString& filepath);
00050
00051 private:
00052 enum State
00053 {
00054 Clean = 0,
00055 Recent = 1,
00056 Duplicate = 2
00057 };
00058
00059 struct Watch
00060 {
00061 char state;
00062 quint64 size;
00063 quint16 checksum;
00064 QList< QPointer<QObject> > recipients;
00065 };
00066
00067 QBasicTimer m_timer;
00068
00069 QHash<QString, Watch> m_targets;
00070 };
00071
00072 #endif // !_QRELIABLE_FILE_WATCH_H_