summaryrefslogtreecommitdiffstats
path: root/origindialog.cpp
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2016-11-10 05:02:44 +0100
committerArno <arno@disconnect.de>2016-11-10 05:02:44 +0100
commit5cde173217fd8cb1dbc21f3ac54f18e8234e709b (patch)
tree309980ee31734db8ca154694137c54a831f3e01a /origindialog.cpp
parent1d05ace3bdd9cd07012116b48f847b4a118e1af9 (diff)
downloadShemovCleaner-5cde173217fd8cb1dbc21f3ac54f18e8234e709b.tar.gz
ShemovCleaner-5cde173217fd8cb1dbc21f3ac54f18e8234e709b.tar.bz2
ShemovCleaner-5cde173217fd8cb1dbc21f3ac54f18e8234e709b.zip
New feature: Add Origin
Since SheMov now displays origin files (i.e. source files for a reencode), add an option here to add origin files for already archived movies. We guess the archived movie from the filename by cutting off the extension and look it up in the files table. If we find an archived movie with that filename, mark the source blue. Deactive "Add" if we don't find one or if we already have an origin.
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();
+}