diff options
Diffstat (limited to 'dbanalyzer.cpp')
-rw-r--r-- | dbanalyzer.cpp | 100 |
1 files changed, 87 insertions, 13 deletions
diff --git a/dbanalyzer.cpp b/dbanalyzer.cpp index 10def75..22478c5 100644 --- a/dbanalyzer.cpp +++ b/dbanalyzer.cpp @@ -15,8 +15,6 @@ #include <QTableWidget> #include <QModelIndex> -#include <QDebug> - #include "dbanalyzer.h" #include "smtreemodel.h" #include "smtreeitem.h" @@ -30,7 +28,7 @@ DbAnalyzerDialog::DbAnalyzerDialog(QWidget *parent, Qt::WindowFlags f) : QDialog // no actors QWidget *noActorsT = new QWidget; - QStringList noActorsHeaders = QStringList() << tr("Series") << tr("Part/Subtitle") << tr("Seriespart Id") << tr("Series Id") << tr("Seriespart"); + QStringList noActorsHeaders = QStringList() << tr("Series") << tr("Part/Subtitle") << tr("Series Part") << tr("Seriespart Id") << tr("Series Id") << tr("Seriespart"); mNoActorsV = new QTreeView; mNoActorsM = new SmTreeModel(noActorsHeaders, this); mNoActorsV->setModel(mNoActorsM); @@ -39,6 +37,7 @@ DbAnalyzerDialog::DbAnalyzerDialog(QWidget *parent, Qt::WindowFlags f) : QDialog mNoActorsV->setColumnHidden(2, true); mNoActorsV->setColumnHidden(3, true); mNoActorsV->setColumnHidden(4, true); + mNoActorsV->setColumnHidden(5, true); mNoActorsV->setEditTriggers(QTreeView::NoEditTriggers); mNoActorsV->setSelectionBehavior(QAbstractItemView::SelectRows); mNoActorsV->setSelectionMode(QAbstractItemView::SingleSelection); @@ -46,25 +45,46 @@ DbAnalyzerDialog::DbAnalyzerDialog(QWidget *parent, Qt::WindowFlags f) : QDialog connect(mNoActorsV, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(noActorsDoubleClicked(QModelIndex))); noActorsT->setLayout(noActorsL); + //stray actors + QWidget *strayActorsT = new QWidget; + QStringList strayActorsHeaders = QStringList() << tr("Actor") << tr("Actor Id") << tr("Count"); + mStrayActorsV = new QTreeView; + mStrayActorsM = new SmTreeModel(strayActorsHeaders, this); + mStrayActorsV->setModel(mStrayActorsM); + QVBoxLayout *strayActorsL = new QVBoxLayout; + strayActorsL->addWidget(mStrayActorsV); + mStrayActorsV->setColumnHidden(1, true); + mStrayActorsV->setEditTriggers(QTreeView::NoEditTriggers); + mStrayActorsV->setSelectionBehavior(QAbstractItemView::SelectRows); + mStrayActorsV->setSelectionMode(QAbstractItemView::ExtendedSelection); + mStrayActorsV->setAlternatingRowColors(true); + strayActorsT->setLayout(strayActorsL); + //buttons mCancel = new QPushButton(tr("Cancel")); connect(mCancel, SIGNAL(clicked()), this, SLOT(cancelAnalyzer())); mClose = new QPushButton(tr("Close")); connect(mClose, SIGNAL(clicked()), this, SLOT(accept())); + mDelete = new QPushButton(tr("Delete...")); + mDelete->setEnabled(false); + connect(mDelete, SIGNAL(clicked()), this, SLOT(deleteItems())); //setup dialog mTab->addTab(noActorsT, tr("No Actors")); + mTab->addTab(strayActorsT, tr("Stray actors")); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(mTab); QHBoxLayout *buttonLayout = new QHBoxLayout; - buttonLayout->addStretch(); buttonLayout->addWidget(mCancel); + buttonLayout->addStretch(); + buttonLayout->addWidget(mDelete); buttonLayout->addWidget(mClose); mainLayout->addLayout(buttonLayout); setLayout(mainLayout); setMinimumWidth(500); //get things going + connect(mTab, SIGNAL(currentChanged(int)), this, SLOT(tabChanged(int))); connect(mAnalyzer, SIGNAL(started()), this, SLOT(analyzerStarted())); connect(mAnalyzer, SIGNAL(finished()), this, SLOT(analyzerFinished())); mAnalyzer->start(); @@ -82,7 +102,8 @@ void DbAnalyzerDialog::analyzerStarted(){ void DbAnalyzerDialog::analyzerFinished(){ mCancel->setEnabled(false); mClose->setEnabled(true); - populateNoActors(); + populate(mNoActorsV, mNoActorsM, mAnalyzer->noActors()); + populate(mStrayActorsV, mStrayActorsM, mAnalyzer->strayActors()); } void DbAnalyzerDialog::noActorsDoubleClicked(const QModelIndex &idx){ @@ -94,29 +115,63 @@ void DbAnalyzerDialog::noActorsDoubleClicked(const QModelIndex &idx){ emit partClicked(seriesPartIdx.data().toInt(), seriesIdx.data().toInt()); } -void DbAnalyzerDialog::populateNoActors(){ - const int columns = 4; - QList<QList<QVariant> > noActors = mAnalyzer->noActors(); +void DbAnalyzerDialog::deleteItems(){ + QTreeView *view = 0; + int deleteMode; + switch(mTab->currentIndex()){ + case 0: + return; + break; + case 1: + view = mStrayActorsV; + deleteMode = Actors; + break; + default: + view = 0; + break; + } + Q_ASSERT(view); + QModelIndexList selected = view->selectionModel()->selectedRows(1); + QList<int> ids; + foreach(QModelIndex i, selected){ + ids << i.data().toInt(); + } + emit delItems(deleteMode, ids); +} + +void DbAnalyzerDialog::tabChanged(int index){ + mDelete->setEnabled(index != 0); +} + +void DbAnalyzerDialog::populate(QTreeView *view, SmTreeModel *model, const QList<QList<QVariant> > &data){ + const int columns = data.first().count(); + if(columns == 0){ + return; + } SmTreeItem *root = new SmTreeItem(columns); - foreach(QList<QVariant> l, noActors){ + foreach(QList<QVariant> l, data){ SmTreeItem *child = new SmTreeItem(l, root); root->appendChild(child); } - mNoActorsM->setRoot(root); - mNoActorsV->resizeColumnToContents(0); + model->setRoot(root); + view->resizeColumnToContents(0); } DbAnalyzer::DbAnalyzer(QObject *parent) : QThread(parent), mCanceled(false), mStatus(Fail) { - mDb = QSqlDatabase::cloneDatabase(QSqlDatabase::database("treedb"), "analyzerDB"); + mDb = QSqlDatabase::cloneDatabase(QSqlDatabase::database("treedb"), "analyzerDb"); mDb.open(); mStatus = mDb.isOpen() ? Ok : Fail; mNoActorQuery = new QSqlQuery(mDb); mNoActorQuery->prepare("SELECT series.tseries_name, seriesparts.iseriespart, seriesparts.tsubtitle, series.iseries_id, seriesparts.iseriesparts_id FROM series, seriesparts LEFT JOIN seriesparts_actormap ON seriesparts.iseriesparts_id = seriesparts_actormap.iseriesparts_id WHERE iactors_id IS NULL AND seriesparts.iseries_id = series.iseries_id ORDER BY tseries_name"); + mStrayActorsQuery = new QSqlQuery(mDb); + 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;"); } DbAnalyzer::~DbAnalyzer(){ delete mNoActorQuery; + delete mStrayActorsQuery; mDb.close(); + mDb = QSqlDatabase(); QSqlDatabase::removeDatabase("analyzerDb"); } @@ -127,6 +182,7 @@ void DbAnalyzer::setCancel(bool canceled){ void DbAnalyzer::run(){ noActorsCheck(); + strayActorsCheck(); } void DbAnalyzer::noActorsCheck(){ @@ -149,5 +205,23 @@ void DbAnalyzer::noActorsCheck(){ res << mNoActorQuery->value(1) << mNoActorQuery->value(2) << mNoActorQuery->value(3) << mNoActorQuery->value(4); mNoActorR << res; } - emit message(tr("Done!")); + emit message(tr("Done fetching movies")); +} + +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")); } |