diff options
Diffstat (limited to 'searchdialog.cpp')
-rw-r--r-- | searchdialog.cpp | 58 |
1 files changed, 50 insertions, 8 deletions
diff --git a/searchdialog.cpp b/searchdialog.cpp index dfefd79..cd329c9 100644 --- a/searchdialog.cpp +++ b/searchdialog.cpp @@ -36,7 +36,7 @@ SearchDialog::SearchDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, resMProxy->setSourceModel(mResM); mResV = new QTreeView; mResV->setModel(resMProxy); - connect(mResV->selectionModel(), &QItemSelectionModel::currentChanged, this, &SearchDialog::doResultTitle); + connect(mResV->selectionModel(), &QItemSelectionModel::currentChanged, this, &SearchDialog::doResult); QHBoxLayout *resGBL = new QHBoxLayout; resGBL->addWidget(mResV); resGB->setLayout(resGBL); @@ -74,14 +74,16 @@ void SearchDialog::doSearch(){ int type = mTypeSel->currentData().toInt(); if(type == Title){ doSearchTitle(); + }else if(type == Filename){ + doSearchFilename(); } } void SearchDialog::doResult(const QModelIndex &cur, const QModelIndex &prev){ Q_UNUSED(prev) int type = mTypeSel->currentData().toInt(); - if(type == Title){ - doResultTitle(cur); + if(type == Title || type == Filename){ + doResultName(cur, type); } } @@ -102,20 +104,60 @@ void SearchDialog::doSearchTitle(){ while(tQ.next()){ QStandardItem *cur = new QStandardItem(tQ.value(1).toString()); cur->setIcon(QIcon(":/huge_bra.png")); - cur->setData(tQ.value(0), SeriesIdRole); + cur->setData(tQ.value(0), IdRole); cur->setEditable(false); root->appendRow(cur); } mResV->setSortingEnabled(true); } -void SearchDialog::doResultTitle(const QModelIndex &sel){ - int seriesId = sel.data(SeriesIdRole).toInt(); +void SearchDialog::doSearchFilename(){ + if(mSearch->text().isEmpty()){ + return; + } + mResV->setSortingEnabled(false); + mResM->clear(); + mResM->setColumnCount(1); + mResM->setHeaderData(0, Qt::Horizontal, tr("Filename")); + QStandardItem *root = mResM->invisibleRootItem(); + QSqlDatabase db = QSqlDatabase::database("shemovdb"); + QSqlQuery fnQ(db); + fnQ.prepare("SELECT tfilename, iseriespart_id FROM files WHERE tfilename ~ :fn ORDER BY tfilename"); + fnQ.bindValue(":fn", mSearch->text()); + fnQ.exec(); + while(fnQ.next()){ + QStandardItem *cur = new QStandardItem(fnQ.value(0).toString()); + cur->setIcon(QIcon(":/gaping_ass.png")); + cur->setData(fnQ.value(1), IdRole); + cur->setEditable(false); + root->appendRow(cur); + } + QSqlQuery oQ(db); + oQ.prepare("SELECT tname, iseriespart_id FROM files, files_origin WHERE tname ~ :fn AND files_origin.ifiles_id = files.ifiles_id ORDER BY tname"); + oQ.bindValue(":fn", mSearch->text()); + oQ.exec(); + while(oQ.next()){ + QStandardItem *cur = new QStandardItem(oQ.value(0).toString()); + cur->setIcon(QIcon(":/french_maid_dress.png")); + cur->setData(oQ.value(1), IdRole); + cur->setEditable(false); + root->appendRow(cur); + } + mResV->setSortingEnabled(true); + mResV->sortByColumn(0); +} + +void SearchDialog::doResultName(const QModelIndex &sel, int resType){ + int seriesId = sel.data(IdRole).toInt(); QSqlDatabase db = QSqlDatabase::database("shemovdb"); QSqlQuery rQ(db); QStringList items; - rQ.prepare("SELECT series.tseries_name, seriesparts.iseriespart, seriesparts.tsubtitle FROM series, seriesparts WHERE series.iseries_id = :sid AND seriesparts.iseries_id = series.iseries_id"); - rQ.bindValue(":sid", seriesId); + if(resType == Title){ + rQ.prepare("SELECT series.tseries_name, seriesparts.iseriespart, seriesparts.tsubtitle FROM series, seriesparts WHERE series.iseries_id = :id AND seriesparts.iseries_id = series.iseries_id"); + }else if(resType == Filename){ + rQ.prepare("SELECT series.tseries_name, seriesparts.iseriespart, seriesparts.tsubtitle FROM series, seriesparts WHERE seriesparts.iseriesparts_id = :id AND seriesparts.iseries_id = series.iseries_id"); + } + rQ.bindValue(":id", seriesId); rQ.exec(); while(rQ.next()){ int sPart = rQ.value(1).toInt(); |