summaryrefslogtreecommitdiffstats
path: root/dbanalyzer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dbanalyzer.cpp')
-rw-r--r--dbanalyzer.cpp100
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"));
}