#include #include #include #include #include #include #include #include #include #include #include #include #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, &QPushButton::clicked, this, &OriginDialog::accept); QPushButton *cancelB = new QPushButton(tr("Cancel")); connect(cancelB, &QPushButton::clicked, this, &OriginDialog::reject); QHBoxLayout *btnLayout = new QHBoxLayout; btnLayout->addStretch(); btnLayout->addWidget(mOk); btnLayout->addWidget(cancelB); 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 LIKE :fnb"); QString fn = fi.completeBaseName(); fn.append('%'); dstQ.bindValue(":fnb", fn); 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(){ for(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(); }