diff options
author | Arno <arno@disconnect.de> | 2020-07-25 07:28:26 +0200 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2020-07-25 07:28:26 +0200 |
commit | ca5f4d90b5080cecf7ba467405296ef1e24bce64 (patch) | |
tree | 694b260216b2237ccd48e22c80f9155f521818b9 | |
parent | 87bc6db7e6102b6af5d2d1f0115ea434f251f25a (diff) | |
download | SheMov-ca5f4d90b5080cecf7ba467405296ef1e24bce64.tar.gz SheMov-ca5f4d90b5080cecf7ba467405296ef1e24bce64.tar.bz2 SheMov-ca5f4d90b5080cecf7ba467405296ef1e24bce64.zip |
Get series and files for actor when searching
-rw-r--r-- | searchdialog.cpp | 63 | ||||
-rw-r--r-- | searchdialog.h | 2 |
2 files changed, 65 insertions, 0 deletions
diff --git a/searchdialog.cpp b/searchdialog.cpp index 8266622..79a9c37 100644 --- a/searchdialog.cpp +++ b/searchdialog.cpp @@ -155,6 +155,7 @@ ActorsAndMore::ActorsAndMore(QWidget *parent, Qt::WindowFlags flags) : QWidget(p resultProxy->setSourceModel(mResultModel); mResultView = new QTreeView; mResultView->setModel(resultProxy); + connect(mResultView->selectionModel(), &QItemSelectionModel::currentChanged, this, &ActorsAndMore::doData); mDataModel = new QStandardItemModel; QSortFilterProxyModel *dataProxy = new QSortFilterProxyModel; dataProxy->setSourceModel(mDataModel); @@ -228,6 +229,68 @@ void ActorsAndMore::getGenresForActor(QStandardItem *actorItem){ } } +void ActorsAndMore::doData(const QModelIndex &cur, const QModelIndex &prev){ + Q_UNUSED(prev) + int searchType = mTypeSel->currentData().toInt(); + if(searchType == Actor){ + getDataForActor(cur); + } +} + +void ActorsAndMore::getDataForActor(QModelIndex cur){ + mDataModel->clear(); + mDataModel->setColumnCount(1); + mDataModel->setHeaderData(0, Qt::Horizontal, tr("Series")); + QIcon icon = SmGlobals::instance()->iconFor("series"); + QVector<int> seriesParts; + QStandardItem *root = mDataModel->invisibleRootItem(); + QSqlDatabase db = QSqlDatabase::database("treedb"); + QSqlQuery seriesPartIdQ(db); + seriesPartIdQ.prepare("SELECT DISTINCT(seriesparts.iseriesparts_id) FROM seriesparts_actormap, seriesparts WHERE seriesparts_actormap.iactors_id = :id AND seriesparts_actormap.iseriesparts_id = seriesparts.iseriesparts_id"); + seriesPartIdQ.bindValue(":id", cur.data(IdRole)); + seriesPartIdQ.exec(); + while(seriesPartIdQ.next()){ + seriesParts << seriesPartIdQ.value(0).toInt(); + } + QSqlQuery displayQ(db); + displayQ.prepare("SELECT series.tseries_name, seriesparts.iseriespart, seriesparts.iseriesparts_id, seriesparts.tsubtitle FROM series, seriesparts WHERE seriesparts.iseriesparts_id = :id AND seriesparts.iseries_id = series.iseries_id"); + for(int part : seriesParts){ + displayQ.bindValue(":id", part); + displayQ.exec(); + while(displayQ.next()){ + int sPart = displayQ.value(1).toInt(); + QString curDisp; + if(sPart > 0){ + curDisp = QString("%1 %2").arg(displayQ.value(0).toString()).arg(sPart, 3, 10, QChar('0')); + }else{ + QString sub = displayQ.value(3).toString(); + if(sub.isEmpty()){ + curDisp = QString("%1 - <no sub/part>").arg(displayQ.value(0).toString()); + }else{ + curDisp = QString("%1 - %2").arg(displayQ.value(0).toString()).arg(sub); + } + } + QStandardItem *cur = new QStandardItem(curDisp); + cur->setIcon(icon); + cur->setData(displayQ.value(2), IdRole); + cur->setEditable(false); + QSqlQuery filenameQ(db); + filenameQ.prepare("SELECT tfilename FROM files WHERE iseriespart_id = :fid"); + filenameQ.bindValue(":fid", displayQ.value(2)); + filenameQ.exec(); + while(filenameQ.next()){ + QStandardItem *curFile = new QStandardItem(filenameQ.value(0).toString()); + curFile->setIcon(icon); + curFile->setEditable(false); + cur->appendRow(curFile); + } + root->appendRow(cur); + } + mDataView->setSortingEnabled(true); + mDataView->sortByColumn(0, Qt::AscendingOrder); + } +} + SearchDialog::SearchDialog(QWidget *parent, Qt::WindowFlags flags) : QDialog(parent, flags) { QHBoxLayout *gbLayout = new QHBoxLayout; QGroupBox *metaFnGb = new QGroupBox(tr("Metadata and Filenames")); diff --git a/searchdialog.h b/searchdialog.h index 9e2f869..ca7d859 100644 --- a/searchdialog.h +++ b/searchdialog.h @@ -51,10 +51,12 @@ class ActorsAndMore : public QWidget { public slots: void doSearch(); + void doData(const QModelIndex &cur, const QModelIndex &prev); private: void searchActor(const QString &actor); void getGenresForActor(QStandardItem *actorItem); + void getDataForActor(QModelIndex cur); QComboBox *mTypeSel; QLineEdit *mSearch; QStandardItemModel *mResultModel; |