/* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ #ifndef SMDIRWATCHER_H #define SMDIRWATCHER_H #include #include #include #include #include #include #include #include class SmTreeItem; class QSemaphore; class SmDataColletor; class SmDirWatcher : public QThread { Q_OBJECT public: enum DWEvent { None, Added, Deleted, Modified, Populate }; explicit SmDirWatcher(int numFields, QObject *parent = 0); SmDataColletor *collector() { return mCollector; } signals: void dwEvent(const QString& file, int event); void needRefresh(); public slots: void run(); void stop(); void setDir(const QString &dir); private: int mFd; int mDescr; QString mCurrent; SmDataColletor *mCollector; QSemaphore *mSemFree; QSemaphore *mSemUsed; QQueue > *mDataQueue; QMutex *mQueueMx; char *mINdata; int mBufLen; }; class SmDataColletor : public QThread { Q_OBJECT public: explicit SmDataColletor(const int numFields, QObject *parent = 0); void init(QSemaphore *set, QSemaphore *get, QQueue > *data, QMutex *queueMx); public slots: void setCheckForPresent(bool present); void run(); void stop() { mCancel = true; } signals: void newData(const QList,int); void population(SmTreeItem*); void needRefresh(); private: SmTreeItem *populate(const QString &dir); const QList fileData(const QFileInfo &fi); QString mCurrent; QSemaphore *mSemFree; QSemaphore *mSemUsed; QMutex *mQueueMx; QQueue > *mDataQueue; int mMode; const int mNumFields; bool mCheckForPresent; bool mCancel; QMutex mCheckForPresentMx; QSqlQuery *mPicPresentQ; QSqlQuery *mMovPresentQ; }; #endif // SMDIRWATCHER_H