diff options
author | Arno <arno@disconnect.de> | 2016-09-03 11:06:48 +0200 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2016-09-03 11:06:48 +0200 |
commit | bbf802b7d415bb3dd44020e9ff0c657f44da28ea (patch) | |
tree | 8f5d4f28b3284252b64c7dceed10a8f8604d0434 /filedisplay.cpp | |
parent | 9ccd31690b5d982588bcb9be1988c682233aabb8 (diff) | |
download | ShemovCleaner-bbf802b7d415bb3dd44020e9ff0c657f44da28ea.tar.gz ShemovCleaner-bbf802b7d415bb3dd44020e9ff0c657f44da28ea.tar.bz2 ShemovCleaner-bbf802b7d415bb3dd44020e9ff0c657f44da28ea.zip |
Add FileDisplay
When doubleclicking on a file already present in DB show a dialog with
the series name, actors and genres.
Diffstat (limited to 'filedisplay.cpp')
-rw-r--r-- | filedisplay.cpp | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/filedisplay.cpp b/filedisplay.cpp new file mode 100644 index 0000000..bce77d9 --- /dev/null +++ b/filedisplay.cpp @@ -0,0 +1,155 @@ +#include <QTabWidget> +#include <QVBoxLayout> +#include <QHBoxLayout> +#include <QGridLayout> +#include <QLineEdit> +#include <QLabel> +#include <QTextEdit> +#include <QPushButton> +#include <QSqlDatabase> +#include <QSqlQuery> +#include <QPushButton> +#include <QGroupBox> +#include <QDir> + +#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); +} |