diff options
Diffstat (limited to 'dbanalyzer.cpp')
-rw-r--r-- | dbanalyzer.cpp | 89 |
1 files changed, 51 insertions, 38 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")); -}*/ |