/* 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 DBANALYZER_H #define DBANALYZER_H #include #include #include #include #include #include #include #include class QSqlQuery; class QTabWidget; class QTreeView; class QPushButton; class SmTreeModel; class DbAnalyzer; class QLabel; class QStackedLayout; class DbAnalyzerDialog : public QDialog { Q_OBJECT public: enum Mode { Actors, Genres }; explicit DbAnalyzerDialog(QWidget *parent = 0, Qt::WindowFlags f = 0); public slots: void refresh(); signals: void partClicked(int seriesPartId, int seriesId); void delItems(int mode, QList &ids); private slots: void cancelAnalyzer(); void analyzerStarted(); void analyzerFinished(); void noDataDoubleClicked(const QModelIndex &); void deleteItems(); void tabChanged(int index); void setMarks(); void deleteMarks(); private: void populate(QTreeView *view ,SmTreeModel *model, const QList > &data, const QHash &marks = QHash()); const QList currentIds() const; QTabWidget *mTab; QTreeView *mNoActorsV; QTreeView *mNoCoversV; QTreeView *mStrayActorsV; QTreeView *mStrayGenresV; SmTreeModel *mNoActorsM; SmTreeModel *mNoCoversM; SmTreeModel *mStrayActorsM; SmTreeModel *mStrayGenresM; QPushButton *mClose; QPushButton *mCancel; QPushButton *mMark; QPushButton *mRefresh; QPushButton *mDelete; QLabel *mTotal; QList mTotals; DbAnalyzer *mAnalyzer; int mMarkMode; QTreeView *mCurrentView; QStackedLayout *mButtonStack; }; class DbAnalyzer : public QThread { Q_OBJECT public: enum Status { Ok, Fail }; enum Marks { NOMARKS = 0, MARKS_ACTORS = 1, MARKS_COVERS = 2 }; explicit DbAnalyzer(QObject *parent = 0); ~DbAnalyzer(); int status() { return mStatus; } const QList > noActors() const { return mNoActorR; } const QHash actorMarks() const { return mActorMarks; } const QList > noCovers() const { return mNoCoverR; } const QHash coverMarks() const { return mCoverMarks; } const QList > strayActors() { return mStrayActorR; } const QList > strayGenres() { return mStrayGenresR; } public slots: void setCancel(bool canceled); void setMarks(const QList &ids, int reason, int mark_id); void deleteMarks(const QList &ids, int reason); signals: void message(const QString &); protected: void run(); private: const QList > noDataCheck(QSqlQuery *query); const QList > strayCheck(QSqlQuery *query); QHash marks(int markType); void setStatus(int status); QSqlDatabase mDb; QSqlQuery *mNoActorQuery; QSqlQuery *mNoCoverQuery; QSqlQuery *mStrayActorsQuery; QSqlQuery *mStrayGenresQuery; QSqlQuery *mMarksQuery; QSqlQuery *mSetMarksQuery; QSqlQuery *mDeleteMarksQuery; QList > mNoActorR; QList > mNoCoverR; QList > mStrayActorR; QList > mStrayGenresR; QHash mActorMarks; QHash mCoverMarks; QMutex mCancelMutex; QMutex mStatusMutex; bool mCanceled; int mStatus; }; #endif // DBANALYZER_H