diff options
Diffstat (limited to 'origindialog.cpp')
-rw-r--r-- | origindialog.cpp | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/origindialog.cpp b/origindialog.cpp new file mode 100644 index 0000000..3e8bd3a --- /dev/null +++ b/origindialog.cpp @@ -0,0 +1,166 @@ +#include <QLabel> +#include <QGridLayout> +#include <QGroupBox> +#include <QPushButton> +#include <QLineEdit> +#include <QHBoxLayout> +#include <QVBoxLayout> +#include <QFileInfo> +#include <QLocale> +#include <QJsonObject> +#include <QSqlDatabase> +#include <QSqlQuery> + +#include "origindialog.h" +#include "helper.h" + +OriginDialog::OriginDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f) { + setupGui(); +} + +void OriginDialog::setupGui(){ + QGroupBox *origGB = new QGroupBox(tr("Origin data")); + mOrigDur = new QLineEdit; + mOrigDur->setReadOnly(true); + mOrigName = new QLineEdit; + mOrigName->setReadOnly(true); + mOrigSize = new QLineEdit; + mOrigSize->setReadOnly(true); + mOrigBitrate = new QLineEdit; + mOrigBitrate->setReadOnly(true); + mOrigMd5 = new QLineEdit; + mOrigMd5->setReadOnly(true); + mOrigMd5->setFont(QFont("courier new")); + QGridLayout *origLayout = new QGridLayout; + origLayout->addWidget(new QLabel(tr("Origin Name")), 0, 0); + origLayout->addWidget(mOrigName, 0, 1); + origLayout->addWidget(new QLabel(tr("Origin duration")), 1, 0); + origLayout->addWidget(mOrigDur, 1, 1); + origLayout->addWidget(new QLabel(tr("Origin Size")), 2, 0); + origLayout->addWidget(mOrigSize, 2, 1); + origLayout->addWidget(new QLabel(tr("Origin Bitrate")), 3, 0); + origLayout->addWidget(mOrigBitrate, 3, 1); + origLayout->addWidget(new QLabel(tr("MD5")), 4, 0); + origLayout->addWidget(mOrigMd5, 4, 1); + origGB->setLayout(origLayout); + QGroupBox *destGB = new QGroupBox(tr("Destination data")); + mDstDur = new QLineEdit; + mDstDur->setReadOnly(true); + mDstName = new QLineEdit; + mDstName->setReadOnly(true); + mDstSize = new QLineEdit; + mDstSize->setReadOnly(true); + mDstMd5 = new QLineEdit; + mDstMd5->setReadOnly(true); + mDstMd5->setFont(QFont("courier new")); + QGridLayout *dstLayout = new QGridLayout; + dstLayout->addWidget(new QLabel(tr("Destination Name")), 0, 0); + dstLayout->addWidget(mDstName, 0, 1); + dstLayout->addWidget(new QLabel(tr("Destination duration")), 1, 0); + dstLayout->addWidget(mDstDur, 1, 1); + dstLayout->addWidget(new QLabel(tr("Destination Size")), 2, 0); + dstLayout->addWidget(mDstSize, 2, 1); + dstLayout->addWidget(new QLabel(tr("MD5")), 3, 0); + dstLayout->addWidget(mDstMd5, 3, 1); + destGB->setLayout(dstLayout); + mOk = new QPushButton(tr("Add")); + connect(mOk, SIGNAL(clicked()), this, SLOT(accept())); + mCancel = new QPushButton(tr("Cancel")); + connect(mCancel, SIGNAL(clicked()), this, SLOT(reject())); + QHBoxLayout *btnLayout = new QHBoxLayout; + btnLayout->addStretch(); + btnLayout->addWidget(mOk); + btnLayout->addWidget(mCancel); + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addWidget(origGB); + mainLayout->addWidget(destGB); + mainLayout->addLayout(btnLayout); + setLayout(mainLayout); + setMinimumWidth(400); + mLineEdits << mOrigBitrate << mOrigDur << mOrigMd5 << mOrigName << mOrigSize << mDstDur << mDstMd5 << mDstName << mDstSize; +} + +void OriginDialog::setSrctData(const QString &absolutefn){ + QFileInfo fi(absolutefn); + if(fi.exists() && fi.isFile()){ + mOrigName->setText(fi.fileName()); + QLocale l; + mOrigSize->setText(l.toString(fi.size())); + mSize = fi.size(); + QJsonDocument jDoc = Helper::ffpmegData(absolutefn); + QJsonObject jObj = jDoc.object(); + QJsonValue durationV = jObj["format"].toObject()["duration"]; + qint64 seconds = durationV.toVariant().toDouble(); + Helper::Duration dur = Helper::Duration(seconds); + QString duration = dur.toString(); + mOrigDur->setText(duration); + QJsonValue brv = jObj["format"].toObject()["bit_rate"]; + mBitrate = brv.toVariant().toLongLong(); + QString brString = QString("%1 kb/s").arg(l.toString(mBitrate / 1000)); + mOrigBitrate->setText(brString); + mMd5 = Helper::md5Sum(absolutefn); + mOrigMd5->setText(mMd5); + } +} + +void OriginDialog::setDstData(const QString &absolutefn){ + QFileInfo fi(absolutefn); + QSqlDatabase db = QSqlDatabase::database("shemovdb"); + QSqlQuery dstQ(db); + dstQ.prepare("SELECT tfilename, iduration, bisize, cmd5sum, ifiles_id FROM files WHERE tfilename ~ :fnb"); + dstQ.bindValue(":fnb", fi.completeBaseName()); + dstQ.exec(); + while(dstQ.next()){ + mDstName->setText(dstQ.value(0).toString()); + Helper::Duration dur = Helper::Duration(dstQ.value(1).toDouble()); + mDstDur->setText(dur.toString()); + QLocale l; + mDstSize->setText(l.toString(dstQ.value(2).toLongLong())); + mDstMd5->setText(dstQ.value(3).toString()); + mFileId = dstQ.value(4).toInt(); + } + if(mDstName->text().isEmpty()){ + mOk->setEnabled(false); + mDstName->setText(tr("(n/a)")); + return; + } + bool originExists = false; + QSqlQuery origExistsQ(db); + origExistsQ.prepare("SELECT COUNT(*) FROM files_origin where ifiles_id = :fid"); + origExistsQ.bindValue(":fid", mFileId); + origExistsQ.exec(); + while(origExistsQ.next()){ + originExists = origExistsQ.value(0).toInt() == 0 ? false : true; + } + if(originExists){ + mOk->setEnabled(false); + return; + } + mOk->setEnabled(true); +} + +void OriginDialog::clear(){ + foreach(QLineEdit *le, mLineEdits){ + le->clear(); + } +} + +void OriginDialog::accept(){ + QSqlDatabase db = QSqlDatabase::database("shemovdb"); + QSqlQuery insertQ(db); + insertQ.prepare("INSERT INTO files_origin (ifiles_id, tname, cmd5sum, bisize, ibitrate) VALUES(:fid, :name, :md5, :size, :bitrate)"); + insertQ.bindValue(":fid", mFileId); + insertQ.bindValue(":name", mOrigName->text()); + insertQ.bindValue(":md5", mMd5); + insertQ.bindValue(":size", mSize); + insertQ.bindValue(":bitrate", mBitrate); + if(insertQ.exec()){ + QString msg = QString(tr("Inserted %1 as origin to %2")).arg(mOrigName->text()).arg(mFileId); + emit statusMessage(msg); + emit refreshNeeded(); + }else{ + QString msg = QString(tr("Failed to add %1 as origin")).arg(mOrigName->text()); + emit statusMessage(msg); + } + QDialog::accept(); +} |