/* 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 CONSISTENCYCHECK_H #define CONSISTENCYCHECK_H #include #include #include #include #include #include "smdialog.h" class QPushButton; class QPlainTextEdit; class QLabel; class QString; class QSqlQuery; class QFileInfo; class ConsistencyChecker; class QProgressBar; class ConsistencyCheck : public SmDialog { Q_OBJECT public: enum Mode { DbCheck, FsCheck }; explicit ConsistencyCheck(QWidget *parent = 0, Qt::WindowFlags f = 0); ~ConsistencyCheck(); public slots: void setProgressBarMax(int max); void setProgress(int value); private slots: void startChecker(int checkerType); void addMessage(const QString &message); void checkerStarted(); void checkerFinished(); void cancelChecker(); void cleanup(); private: void moveFiles(const QStringList &files); QPushButton *mCancelExit; QPushButton *mCheckDb; QPushButton *mCheckFs; QPushButton *mCleanup; QPlainTextEdit *mOkDisplay; QPlainTextEdit *mErrorDisplay; QLabel *mActivity; QProgressBar *mProgress; ConsistencyChecker *mChecker; }; class ConsistencyChecker : public QThread { Q_OBJECT public: enum Status { Ok, Fail }; explicit ConsistencyChecker(QObject *parent = 0); ~ConsistencyChecker(); int mode() const { return mMode; } int count() const { return mCurCount; } void setMode(int mode) { mMode = mode; } int status() const { return mStatus; } void setStatus(int status) { mStatus = status; } void check(); const QStringList strayFiles(); const QList strayFileIds(); const QList strayPicIds(); public slots: void setCancel(bool cancel); void deleteFileIds(const QList &ids); void deletePicIds(const QList &ids); private slots: void dbCheck(); void fsCheck(); signals: void consistencyMsg(const QString &msg); void approxTotal(int); void progress(int); protected: void run(); private: QString archivePath(const QString &fileName, const QString &md5sum) const; void doFsCheck(const QFileInfo &start, const QVector &md5sums); void doDbCheckFiles(); void doDbCheckPics(); bool mCanceled; int mMode; int mStatus; QSqlDatabase mDb; QSqlQuery *mFileQuery; QMutex mCancelMutex; QMutex mStrayFilesMutex; QMutex mStrayFileIdMutex; QMutex mStrayPicsIdMutex; QStringList mStrayFiles; QList mStrayFileIds; QList mStrayPicIds; int mCurCount; }; #endif // CONSISTENCYCHECK_H