summaryrefslogtreecommitdiffstats
path: root/origindialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'origindialog.cpp')
-rw-r--r--origindialog.cpp166
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();
+}