#include #include #include #include #include #include #include #include #include #include #include #include #include #include "filedisplay.h" FileDisplay::FileDisplay(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f) { mTab = new QTabWidget; mDBData = new DBData; mTab->addTab(mDBData, tr("Database")); //button layout QHBoxLayout *buttonL = new QHBoxLayout; QPushButton *closeBtn = new QPushButton(tr("Close")); connect(closeBtn, SIGNAL(clicked()), this, SLOT(hide())); buttonL->addStretch(); buttonL->addWidget(closeBtn); buttonL->addStretch(); //dialog layout QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(mTab); mainLayout->addLayout(buttonL); setLayout(mainLayout); setWindowTitle(tr("File Info")); } void FileDisplay::setFileData(const QString &fullPath, const QString &md5Sum) { mFullPath = fullPath; mMd5 = md5Sum; mDBData->setFileData(fullPath, md5Sum); } DBData::DBData(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f) { QLabel *seriesNameL = new QLabel(tr("Series")); mSeriesName = new QLineEdit; mSeriesName->setReadOnly(true); QLabel *fullPathL = new QLabel(tr("File")); mFullPath = new QLineEdit; mFullPath->setReadOnly(true); QLabel *md5L = new QLabel(tr("MD5")); mMd5 = new QLineEdit; mMd5->setReadOnly(true); QGridLayout *topL = new QGridLayout; topL->addWidget(seriesNameL, 0, 0); topL->addWidget(mSeriesName, 0, 1); topL->addWidget(fullPathL, 1, 0); topL->addWidget(mFullPath, 1, 1); topL->addWidget(md5L, 2, 0); topL->addWidget(mMd5, 2, 1); QGroupBox *topGB = new QGroupBox(tr("General")); topGB->setLayout(topL); mActors = new QTextEdit; mActors->setReadOnly(true); QGroupBox *actorsGB = new QGroupBox(tr("Actors")); QHBoxLayout *actorsGBL = new QHBoxLayout; actorsGBL->addWidget(mActors); actorsGB->setLayout(actorsGBL); mGenres = new QTextEdit; mGenres->setReadOnly(true); QGroupBox *genresGB = new QGroupBox(tr("Genres")); QHBoxLayout *genresGBL = new QHBoxLayout; genresGBL->addWidget(mGenres); genresGB->setLayout(genresGBL); QHBoxLayout *textL = new QHBoxLayout; textL->addWidget(genresGB); textL->addWidget(actorsGB); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(topGB); mainLayout->addLayout(textL); setLayout(mainLayout); } void DBData::setFileData(const QString &fullPath, const QString &md5Sum){ mFullPath->setText(QDir::toNativeSeparators(fullPath)); mFullPath->home(false); mMd5->setText(md5Sum); gatherData(); } void DBData::gatherData(){ const QString &md5 = mMd5->text(); const QString &fp = mFullPath->text(); QSqlDatabase db = QSqlDatabase::database("shemovdb"); if(!db.isOpen()){ db.open(); } //series name QVariantList seriesRes; QSqlQuery seriesQ1(db); seriesQ1.prepare("SELECT series.tseries_name, seriesparts.tsubtitle, seriesparts.iseriespart, seriesparts.iseriesparts_id FROM files, seriesparts, series WHERE files.iseriespart_id = seriesparts.iseriesparts_id AND seriesparts.iseries_id = series.iseries_id AND files.cmd5sum = :md5"); seriesQ1.bindValue(":md5", md5); seriesQ1.exec(); while(seriesQ1.next()){ seriesRes << seriesQ1.value(0) << seriesQ1.value(1) << seriesQ1.value(2) << seriesQ1.value(3); } if(seriesRes.isEmpty()){ QSqlQuery seriesQ2(db); seriesQ2.prepare("SELECT series.tseries_name, seriesparts.tsubtitle, seriesparts.iseriespart, seriesparts.iseriesparts_id FROM files_origin, files, seriesparts, series WHERE files.iseriespart_id = seriesparts.iseriesparts_id AND seriesparts.iseries_id = series.iseries_id AND files_origin.cmd5sum = :md5 AND files_origin.ifiles_id = files.ifiles_id"); seriesQ2.bindValue(":md5", md5); seriesQ2.exec(); while(seriesQ2.next()){ seriesRes << seriesQ2.value(0) << seriesQ2.value(1) << seriesQ2.value(2) << seriesQ2.value(3); } } QString seriesName(seriesRes.at(0).toString()); if(seriesRes.at(1).isValid()){ seriesName.append(QString(" - %1").arg(seriesRes.at(1).toString())); } if(seriesRes.at(2).toInt()){ seriesName.append(QString(" - %1").arg(seriesRes.at(2).toString())); } mSeriesName->setText(seriesName); //actors int seriesPartId = seriesRes.at(3).toInt(); QSqlQuery actorsQ(db); actorsQ.prepare("SELECT actors.tactorname FROM actors, seriesparts, seriesparts_actormap WHERE actors.iactors_id = seriesparts_actormap.iactors_id AND seriesparts_actormap.iseriesparts_id = seriesparts.iseriesparts_id AND seriesparts.iseriesparts_id = :id ORDER BY actors.tactorname"); QStringList actors; actorsQ.bindValue(":id", seriesPartId); actorsQ.exec(); while(actorsQ.next()){ actors << actorsQ.value(0).toString(); } QString actorsText = actors.join("\n"); mActors->setText(actorsText); //genres QSqlQuery genresQ(db); genresQ.prepare("SELECT genres.tgenrename FROM genres, seriesparts, seriesparts_genremap WHERE genres.igenres_id = seriesparts_genremap.igenres_id AND seriesparts_genremap.iseriesparts_id = seriesparts.iseriesparts_id AND seriesparts.iseriesparts_id = :id ORDER BY genres.tgenrename"); QStringList genres; genresQ.bindValue(":id", seriesPartId); genresQ.exec(); while(genresQ.next()){ genres << genresQ.value(0).toString(); } QString genresText = genres.join("\n"); mGenres->setText(genresText); }