/* 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 #include #include class SmTreeItem; class QSemaphore; class SmDataColletor; class AsyncTask; class Md5Summer; class SmDirWatcher : public QThread { Q_OBJECT public: enum DWEvent { None, Added, Deleted, Modified, Populate, CloseWrite }; explicit SmDirWatcher(int numFields, QObject *parent = 0); signals: void dwEvent(const QString& file, int event); void setMd5Sum(QString path, QString md5); void setFfmpeg(QString path, QVariantMap data); void setPicSize(QString path, QVariant size); void needRefresh(); void population(SmTreeItem*); void newData(const QList,int); public slots: void run(); void stop(); void setDir(const QString &dir); void startAsyncJobs(); void gatherAsync(const QString &path); void setExpensiveOps(bool expensiveOps); private: QList generalData(const QString &path); int mFd; int mDescr; QString mCurrent; char *mINdata; int mBufLen; QThreadPool *mAsyncPool; int mNumFields; QList mAsyncTasks; bool mExpensiveOps; }; class AsyncTask : public QObject, public QRunnable { Q_OBJECT public: explicit AsyncTask(const QString &path = QString()); bool skipMe(); protected: virtual void run() = 0; bool mSkip; QMutex mStatusMx; const QString mPath; }; class Md5Summer : public AsyncTask { Q_OBJECT public: explicit Md5Summer(const QString &path); signals: void md5sumDone(QString, QString); protected: virtual void run(); }; class FfmpegGatherer : public AsyncTask { Q_OBJECT public: explicit FfmpegGatherer(const QString &path); signals: void ffmpegDone(QString, QVariantMap); protected: virtual void run(); }; class PicSizeGatherer : public AsyncTask { Q_OBJECT public: explicit PicSizeGatherer(const QString &path); signals: void picSizeDone(QString, QVariant); protected: virtual void run(); }; #endif // SMDIRWATCHER_H