summaryrefslogtreecommitdiffstats
path: root/searchdialog.cpp
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2018-02-02 07:19:29 +0100
committerArno <arno@disconnect.de>2018-02-02 07:19:29 +0100
commit0207d7361db6d35c1179f01f437dfe12c44706c9 (patch)
treea636b34bd766d95a450587260dddc6174aea5a08 /searchdialog.cpp
parentab60609d669c30191341f9476a4fa1b1b36d35d2 (diff)
downloadShemovCleaner-0207d7361db6d35c1179f01f437dfe12c44706c9.tar.gz
ShemovCleaner-0207d7361db6d35c1179f01f437dfe12c44706c9.tar.bz2
ShemovCleaner-0207d7361db6d35c1179f01f437dfe12c44706c9.zip
Implement actor search in SearchDialog
Diffstat (limited to 'searchdialog.cpp')
-rw-r--r--searchdialog.cpp103
1 files changed, 101 insertions, 2 deletions
diff --git a/searchdialog.cpp b/searchdialog.cpp
index 64da754..ff469ee 100644
--- a/searchdialog.cpp
+++ b/searchdialog.cpp
@@ -21,6 +21,7 @@ SearchDialog::SearchDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent,
mTypeSel = new QComboBox;
mTypeSel->addItem(tr("Title"), Title);
mTypeSel->addItem(tr("Filename"), Filename);
+ mTypeSel->addItem(tr("Actor"), Actors);
connect(mTypeSel, QOverload<int>::of(&QComboBox::activated), this, &SearchDialog::doSearch);
mSearch = new QLineEdit;
QPushButton *goB = new QPushButton(tr("Go!"));
@@ -84,6 +85,8 @@ void SearchDialog::doSearch(){
doSearchTitle();
}else if(type == Filename){
doSearchFilename();
+ }else if(type == Actors){
+ doSearchActor();
}
}
@@ -92,6 +95,8 @@ void SearchDialog::doResult(const QModelIndex &cur, const QModelIndex &prev){
int type = mTypeSel->currentData().toInt();
if(type == Title || type == Filename){
doResultName(cur, type);
+ }else if(type == Actors){
+ doResultActor(cur);
}
}
@@ -158,6 +163,33 @@ void SearchDialog::doSearchFilename(){
mResV->sortByColumn(0);
}
+void SearchDialog::doSearchActor(){
+ if(mSearch->text().isEmpty()){
+ return;
+ }
+ mResV->setSortingEnabled(false);
+ mResM->clear();
+ mResM->setColumnCount(1);
+ mResM->setHeaderData(0, Qt::Horizontal, tr("Title"));
+ QIcon icon = Helper::icon(QColor(255,85,255), QChar(0x26A8), false);
+ QStandardItem *root = mResM->invisibleRootItem();
+ QSqlDatabase db = QSqlDatabase::database("shemovdb");
+ QSqlQuery aQ(db);
+ aQ.prepare("SELECT tactorname, iactors_id FROM actors WHERE tactorname ~ :name ORDER BY tactorname");
+ aQ.bindValue(":name", mSearch->text());
+ aQ.exec();
+ while(aQ.next()){
+ QStandardItem *cur = new QStandardItem(aQ.value(0).toString());
+ cur->setIcon(icon);
+ cur->setData(aQ.value(1), IdRole);
+ cur->setEditable(false);
+ doActorGenres(cur);
+ 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");
@@ -200,6 +232,50 @@ void SearchDialog::doResultName(const QModelIndex &sel, int resType){
mDataV->sortByColumn(0);
}
+void SearchDialog::doResultActor(const QModelIndex &sel){
+ mDataM->clear();
+ mDataM->setColumnCount(1);
+ mDataM->setHeaderData(0, Qt::Horizontal, tr("Series"));
+ QIcon icon = Helper::icon(QColor(255,85,255), QChar(0x26A8), false);
+ QVector<int> seriesParts;
+ QStandardItem *root = mDataM->invisibleRootItem();
+ QSqlDatabase db = QSqlDatabase::database("shemovdb");
+ QSqlQuery r1Q(db);
+ r1Q.prepare("SELECT DISTINCT(seriesparts.iseriesparts_id) FROM seriesparts_actormap, seriesparts WHERE seriesparts_actormap.iactors_id = :id AND seriesparts_actormap.iseriesparts_id = seriesparts.iseriesparts_id");
+ r1Q.bindValue(":id", sel.data(IdRole));
+ r1Q.exec();
+ while(r1Q.next()){
+ seriesParts << r1Q.value(0).toInt();
+ }
+ QSqlQuery r2Q(db);
+ r2Q.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 sp : seriesParts){
+ r2Q.bindValue(":id", sp);
+ r2Q.exec();
+ while(r2Q.next()){
+ int sPart = r2Q.value(1).toInt();
+ QString curDisp;
+ if(sPart > 0){
+ curDisp = QString("%1 %2").arg(r2Q.value(0).toString()).arg(sPart, 3, 10, QChar('0'));
+ }else{
+ QString sub = r2Q.value(3).toString();
+ if(sub.isEmpty()){
+ curDisp = QString("%1 - <no sub/part>").arg(r2Q.value(0).toString());
+ }else{
+ curDisp = QString("%1 - %2").arg(r2Q.value(0).toString()).arg(sub);
+ }
+ }
+ QStandardItem *cur = new QStandardItem(curDisp);
+ cur->setIcon(icon);
+ cur->setData(r2Q.value(2), IdRole);
+ cur->setEditable(false);
+ root->appendRow(cur);
+ }
+ mDataV->setSortingEnabled(true);
+ mDataV->sortByColumn(0);
+ }
+}
+
void SearchDialog::writeSettings(){
QSettings s;
s.setValue("searchby", mTypeSel->currentText());
@@ -219,7 +295,7 @@ void SearchDialog::readSettings(){
void SearchDialog::doChild(QStandardItem *item, int childMode){
QStringList res;
- QIcon aIcon; // =
+ QIcon aIcon;
QString parentName;
QSqlDatabase db = QSqlDatabase::database("shemovdb");
QSqlQuery rQ(db);
@@ -244,9 +320,32 @@ void SearchDialog::doChild(QStandardItem *item, int childMode){
for(QString a : res){
QStandardItem *curItem = new QStandardItem(a);
curItem->setIcon(aIcon);
- aItem->appendRow(curItem);
curItem->setEditable(false);
+ aItem->appendRow(curItem);
}
item->appendRow(aItem);
}
}
+
+void SearchDialog::doActorGenres(QStandardItem *item){
+ QStringList res;
+ QIcon aIcon = Helper::icon(QColor(255,85,255), QChar(0x26A6));
+ QSqlDatabase db = QSqlDatabase::database("shemovdb");
+ QSqlQuery aQ(db);
+ aQ.prepare("SELECT DISTINCT(genres.tgenrename) FROM genres, seriesparts, seriesparts_actormap, seriesparts_genremap WHERE seriesparts_actormap.iseriesparts_id = seriesparts.iseriesparts_id AND seriesparts.iseriesparts_id = seriesparts_genremap.iseriesparts_id AND seriesparts_genremap.igenres_id = genres.igenres_id AND seriesparts_actormap.iactors_id = :id ORDER BY genres.tgenrename");
+ aQ.bindValue(":id", item->data(IdRole));
+ aQ.exec();
+ while(aQ.next()){
+ res << aQ.value(0).toString();
+ }
+ if(!res.isEmpty()){
+ std::sort(res.begin(), res.end());
+ for(QString s : res){
+ QStandardItem *cur = new QStandardItem(s);
+ cur->setIcon(aIcon);
+ cur->setEditable(false);
+ cur->setData(item->data(IdRole), IdRole);
+ item->appendRow(cur);
+ }
+ }
+}