summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dbanalyzer.cpp89
-rw-r--r--dbanalyzer.h9
2 files changed, 58 insertions, 40 deletions
diff --git a/dbanalyzer.cpp b/dbanalyzer.cpp
index 82ef4e7..52fb71f 100644
--- a/dbanalyzer.cpp
+++ b/dbanalyzer.cpp
@@ -27,7 +27,7 @@ DbAnalyzerDialog::DbAnalyzerDialog(QWidget *parent, Qt::WindowFlags f) : QDialog
//setup analyzer
mAnalyzer = new DbAnalyzer(this);
- // no actors
+ //no actors
QWidget *noActorsT = new QWidget;
QStringList noActorsHeaders = QStringList() << tr("Series") << tr("Part/Subtitle") << tr("Series Part") << tr("Seriespart Id") << tr("Series Id") << tr("Seriespart");
mNoActorsV = new QTreeView;
@@ -43,9 +43,28 @@ DbAnalyzerDialog::DbAnalyzerDialog(QWidget *parent, Qt::WindowFlags f) : QDialog
mNoActorsV->setSelectionBehavior(QAbstractItemView::SelectRows);
mNoActorsV->setSelectionMode(QAbstractItemView::SingleSelection);
mNoActorsV->setAlternatingRowColors(true);
- connect(mNoActorsV, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(noActorsDoubleClicked(QModelIndex)));
+ connect(mNoActorsV, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(noDataDoubleClicked(QModelIndex)));
noActorsT->setLayout(noActorsL);
+ //no covers
+ QWidget *noCoversT = new QWidget;
+ QStringList noCoversHeaders = QStringList() << tr("Series") << tr("Part/Subtitle") << tr("Series Part") << tr("Seriespart Id") << tr("Series Id") << tr("Seriespart");
+ mNoCoversV = new QTreeView;
+ mNoCoversM = new SmTreeModel(noCoversHeaders, this);
+ mNoCoversV->setModel(mNoCoversM);
+ QVBoxLayout *noCoversL = new QVBoxLayout;
+ noCoversL->addWidget(mNoCoversV);
+ mNoCoversV->setColumnHidden(2, true);
+ mNoCoversV->setColumnHidden(3, true);
+ mNoCoversV->setColumnHidden(4, true);
+ mNoCoversV->setColumnHidden(5, true);
+ mNoCoversV->setEditTriggers(QTreeView::NoEditTriggers);
+ mNoCoversV->setSelectionBehavior(QAbstractItemView::SelectRows);
+ mNoCoversV->setSelectionMode(QAbstractItemView::SingleSelection);
+ mNoCoversV->setAlternatingRowColors(true);
+ connect(mNoCoversV, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(noDataDoubleClicked(QModelIndex)));
+ noCoversT->setLayout(noCoversL);
+
//stray actors
QWidget *strayActorsT = new QWidget;
QStringList strayActorsHeaders = QStringList() << tr("Actor") << tr("Actor Id") << tr("Count");
@@ -89,6 +108,7 @@ DbAnalyzerDialog::DbAnalyzerDialog(QWidget *parent, Qt::WindowFlags f) : QDialog
//setup dialog
mTab->addTab(noActorsT, tr("No Actors"));
+ mTab->addTab(noCoversT, tr("No Covers"));
mTab->addTab(strayActorsT, tr("Stray actors"));
mTab->addTab(strayGenresT, tr("Stray genres"));
@@ -146,21 +166,27 @@ void DbAnalyzerDialog::analyzerFinished(){
mRefresh->setEnabled(true);
mClose->setEnabled(true);
populate(mNoActorsV, mNoActorsM, mAnalyzer->noActors());
+ populate(mNoCoversV, mNoCoversM, mAnalyzer->noCovers());
populate(mStrayActorsV, mStrayActorsM, mAnalyzer->strayActors());
populate(mStrayGenresV, mStrayGenresM, mAnalyzer->strayGenres());
QString totalString = QString(tr("<b>Total items: %1</b>"));
mTotals[0] = totalString.arg(QString::number(mAnalyzer->noActors().count()));
- mTotals[1] = totalString.arg(QString::number(mAnalyzer->strayActors().count()));
- mTotals[2] = totalString.arg(QString::number(mAnalyzer->strayGenres().count()));
+ mTotals[1] = totalString.arg(QString::number(mAnalyzer->noCovers().count()));
+ mTotals[2] = totalString.arg(QString::number(mAnalyzer->strayActors().count()));
+ mTotals[3] = totalString.arg(QString::number(mAnalyzer->strayGenres().count()));
mTotal->setText(mTotals.at(mTab->currentIndex()));
}
-void DbAnalyzerDialog::noActorsDoubleClicked(const QModelIndex &idx){
+void DbAnalyzerDialog::noDataDoubleClicked(const QModelIndex &idx){
+ if(mTab->currentIndex() > 1){
+ return;
+ }
if(!idx.isValid()){
return;
}
- QModelIndex seriesPartIdx = mNoActorsM->index(idx.row(), 5, idx.parent());
- QModelIndex seriesIdx = mNoActorsM->index(idx.row(), 4, idx.parent());
+ const QAbstractItemModel *model = idx.model();
+ QModelIndex seriesPartIdx = model->index(idx.row(), 5, idx.parent());
+ QModelIndex seriesIdx = model->index(idx.row(), 4, idx.parent());
emit partClicked(seriesPartIdx.data().toInt(), seriesIdx.data().toInt());
}
@@ -221,10 +247,13 @@ DbAnalyzer::DbAnalyzer(QObject *parent) : QThread(parent), mCanceled(false), mSt
mStrayActorsQuery->prepare("SELECT actors.tactorname, actors.iactors_id, COUNT(seriesparts_actormap.iactors_id) FROM actors LEFT JOIN seriesparts_actormap ON actors.iactors_id = seriesparts_actormap.iactors_id WHERE seriesparts_actormap.iactors_id IS NULL GROUP BY actors.iactors_id, actors.tactorname ORDER BY actors.tactorname");
mStrayGenresQuery = new QSqlQuery(mDb);
mStrayGenresQuery->prepare("SELECT genres.tgenrename, genres.igenres_id, COUNT(seriesparts_genremap.igenres_id) FROM genres LEFT JOIN seriesparts_genremap ON genres.igenres_id = seriesparts_genremap.igenres_id WHERE seriesparts_genremap.igenres_id IS NULL GROUP BY genres.igenres_id, genres.tgenrename ORDER BY genres.tgenrename");
+ mNoCoverQuery = new QSqlQuery(mDb);
+ mNoCoverQuery->prepare("SELECT series.tseries_name, seriesparts.iseriespart, seriesparts.tsubtitle, series.iseries_id, seriesparts.iseriesparts_id FROM files, series, seriesparts WHERE files.iseriespart_id = seriesparts.iseriesparts_id AND seriesparts.iseries_id = series.iseries_id GROUP BY files.iseriespart_id, series.tseries_name,seriesparts.iseriespart, seriesparts.tsubtitle, seriesparts.iseriesparts_id, series.iseries_id HAVING COUNT(iseriespart_id) = 1 ORDER BY series.tseries_name");
}
DbAnalyzer::~DbAnalyzer(){
delete mNoActorQuery;
+ delete mNoCoverQuery;
delete mStrayActorsQuery;
delete mStrayGenresQuery;
mDb.close();
@@ -238,32 +267,34 @@ void DbAnalyzer::setCancel(bool canceled){
}
void DbAnalyzer::run(){
- noActorsCheck();
+ mNoActorR = noDataCheck(mNoActorQuery);
+ mNoCoverR = noDataCheck(mNoCoverQuery);
mStrayActorR = strayCheck(mStrayActorsQuery);
mStrayGenresR = strayCheck(mStrayGenresQuery);
}
-void DbAnalyzer::noActorsCheck(){
- if(!mNoActorQuery->exec()){
+const QList<QList<QVariant> > DbAnalyzer::noDataCheck(QSqlQuery *query){
+ if(!query->exec()){
+ QMutexLocker m(&mStatusMutex);
mStatus = Fail;
- return;
+ return QList<QList<QVariant> >();
}
- emit message(tr("Fetching movies without actors"));
- while(mNoActorQuery->next()){
+ QList<QList<QVariant> > retval;
+ while(query->next()){
if(mCanceled){
break;
}
QList<QVariant> res;
- res << mNoActorQuery->value(0);
- if(!mNoActorQuery->value(2).isNull()){
- res << mNoActorQuery->value(2);
+ res << query->value(0);
+ if(!query->value(2).isNull()){
+ res << query->value(2);
}else{
- res << mNoActorQuery->value(1);
+ res << query->value(1);
}
- res << mNoActorQuery->value(1) << mNoActorQuery->value(2) << mNoActorQuery->value(3) << mNoActorQuery->value(4);
- mNoActorR << res;
+ res << query->value(1) << query->value(2) << query->value(3) << query->value(4);
+ retval << res;
}
- emit message(tr("Done fetching movies"));
+ return retval;
}
const QList<QList<QVariant> > DbAnalyzer::strayCheck(QSqlQuery *query){
@@ -283,21 +314,3 @@ const QList<QList<QVariant> > DbAnalyzer::strayCheck(QSqlQuery *query){
}
return retval;
}
-
-/*void DbAnalyzer::strayActorsCheck(){
- if(!mStrayActorsQuery->exec()){
- QMutexLocker m(&mStatusMutex);
- mStatus = Fail;
- return;
- }
- emit message(tr("Fetching stray actors"));
- while(mStrayActorsQuery->next()){
- if(mCanceled){
- break;
- }
- QList<QVariant> res;
- res << mStrayActorsQuery->value(0) << mStrayActorsQuery->value(1) << mStrayActorsQuery->value(2);
- mStrayActorR << res;
- }
- emit message(tr("Done fetching stray actors"));
-}*/
diff --git a/dbanalyzer.h b/dbanalyzer.h
index fd19b11..653aa70 100644
--- a/dbanalyzer.h
+++ b/dbanalyzer.h
@@ -41,7 +41,7 @@ class DbAnalyzerDialog : public QDialog {
void cancelAnalyzer();
void analyzerStarted();
void analyzerFinished();
- void noActorsDoubleClicked(const QModelIndex &);
+ void noDataDoubleClicked(const QModelIndex &);
void deleteItems();
void tabChanged(int index);
@@ -49,9 +49,11 @@ class DbAnalyzerDialog : public QDialog {
void populate(QTreeView *view ,SmTreeModel *model, const QList<QList<QVariant> > &data);
QTabWidget *mTab;
QTreeView *mNoActorsV;
+ QTreeView *mNoCoversV;
QTreeView *mStrayActorsV;
QTreeView *mStrayGenresV;
SmTreeModel *mNoActorsM;
+ SmTreeModel *mNoCoversM;
SmTreeModel *mStrayActorsM;
SmTreeModel *mStrayGenresM;
QPushButton *mClose;
@@ -71,6 +73,7 @@ class DbAnalyzer : public QThread {
~DbAnalyzer();
int status() { return mStatus; }
const QList<QList<QVariant> > noActors() { return mNoActorR; }
+ const QList<QList<QVariant> > noCovers() { return mNoCoverR; }
const QList<QList<QVariant> > strayActors() { return mStrayActorR; }
const QList<QList<QVariant> > strayGenres() { return mStrayGenresR; }
@@ -84,13 +87,15 @@ class DbAnalyzer : public QThread {
void run();
private:
- void noActorsCheck();
+ const QList<QList<QVariant> > noDataCheck(QSqlQuery *query);
const QList<QList<QVariant> > strayCheck(QSqlQuery *query);
QSqlDatabase mDb;
QSqlQuery *mNoActorQuery;
+ QSqlQuery *mNoCoverQuery;
QSqlQuery *mStrayActorsQuery;
QSqlQuery *mStrayGenresQuery;
QList<QList<QVariant> > mNoActorR;
+ QList<QList<QVariant> > mNoCoverR;
QList<QList<QVariant> > mStrayActorR;
QList<QList<QVariant> > mStrayGenresR;
QMutex mCancelMutex;