summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2020-07-25 07:28:26 +0200
committerArno <arno@disconnect.de>2020-07-25 07:28:26 +0200
commitca5f4d90b5080cecf7ba467405296ef1e24bce64 (patch)
tree694b260216b2237ccd48e22c80f9155f521818b9
parent87bc6db7e6102b6af5d2d1f0115ea434f251f25a (diff)
downloadSheMov-ca5f4d90b5080cecf7ba467405296ef1e24bce64.tar.gz
SheMov-ca5f4d90b5080cecf7ba467405296ef1e24bce64.tar.bz2
SheMov-ca5f4d90b5080cecf7ba467405296ef1e24bce64.zip
Get series and files for actor when searching
-rw-r--r--searchdialog.cpp63
-rw-r--r--searchdialog.h2
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;