summaryrefslogtreecommitdiffstats
path: root/editfiledialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'editfiledialog.cpp')
-rw-r--r--editfiledialog.cpp124
1 files changed, 124 insertions, 0 deletions
diff --git a/editfiledialog.cpp b/editfiledialog.cpp
new file mode 100644
index 0000000..15d4836
--- /dev/null
+++ b/editfiledialog.cpp
@@ -0,0 +1,124 @@
+/*
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version
+ 2 of the License, or (at your option) any later version.
+*/
+
+#include <QLineEdit>
+#include <QComboBox>
+#include <QFormLayout>
+#include <QGroupBox>
+#include <QIntValidator>
+#include <QHBoxLayout>
+#include <QGridLayout>
+#include <QPushButton>
+#include <QVBoxLayout>
+#include <QSqlDatabase>
+#include <QSqlQuery>
+
+#include "editfiledialog.h"
+#include "smglobals.h"
+#include "helper.h"
+
+EditFileDialog::EditFileDialog(QWidget *parent) : QDialog(parent){
+ mFiletypeMap = SmGlobals::instance()->filetypeMap();
+ setupGui();
+ setWindowTitle(tr("Edit file..."));
+}
+
+void EditFileDialog::setupGui(){
+ mFileName = new QLineEdit;
+ mFileName->setReadOnly(true);
+ mMd5Sum = new QLineEdit;
+ mMd5Sum->setReadOnly(true);
+ mMd5Sum->setFont(QFont("courier"));
+ QFormLayout *lineEditL = new QFormLayout;
+ lineEditL->addRow(tr("Filename"), mFileName);
+ lineEditL->addRow(tr("MD5"), mMd5Sum);
+ QGroupBox *dvdNoGB = new QGroupBox(tr("DVD No."));
+ mDvdNo= new QLineEdit;
+ QIntValidator *validator = new QIntValidator;
+ mDvdNo->setValidator(validator);
+ QHBoxLayout *dvdNoGBL = new QHBoxLayout;
+ dvdNoGBL->addWidget(mDvdNo);
+ dvdNoGB->setLayout(dvdNoGBL);
+ QGroupBox *qualityGB = new QGroupBox(tr("Quality"));
+ mQuality = new QLineEdit;
+ mQuality->setValidator(validator);
+ QHBoxLayout *qualityGBL = new QHBoxLayout;
+ qualityGBL->addWidget(mQuality);
+ qualityGB->setLayout(qualityGBL);
+ QGroupBox *durationGB = new QGroupBox(tr("Duration"));
+ mDuration = new QLineEdit;
+ QHBoxLayout *durationGBL = new QHBoxLayout;
+ durationGBL->addWidget(mDuration);
+ durationGB->setLayout(durationGBL);
+ QGroupBox *fileTypeGB = new QGroupBox(tr("Filetype"));
+ mFileType = new QComboBox;
+ QStringList fileTypes = mFiletypeMap.values();
+ std::sort(fileTypes.begin(), fileTypes.end());
+ mFileType->addItems(fileTypes);
+ QHBoxLayout *fileTypeGBL = new QHBoxLayout;
+ fileTypeGBL->addWidget(mFileType);
+ fileTypeGB->setLayout(fileTypeGBL);
+ QGridLayout *propertyGrid = new QGridLayout;
+ propertyGrid->addWidget(dvdNoGB, 0, 0);
+ propertyGrid->addWidget(qualityGB, 0, 1);
+ propertyGrid->addWidget(durationGB, 1, 0);
+ propertyGrid->addWidget(fileTypeGB, 1, 1);
+ QPushButton *updateB = new QPushButton(tr("Update!"));
+ connect(updateB, &QPushButton::clicked, this, &EditFileDialog::accept);
+ QPushButton *cancelB = new QPushButton(tr("Cancel"));
+ connect(cancelB, &QPushButton::clicked, this, &EditFileDialog::reject);
+ QHBoxLayout *buttonLayout = new QHBoxLayout;
+ buttonLayout->addStretch();
+ buttonLayout->addWidget(updateB);
+ buttonLayout->addWidget(cancelB);
+ buttonLayout->addStretch();
+ QVBoxLayout *mainLayout = new QVBoxLayout;
+ mainLayout->addLayout(lineEditL);
+ mainLayout->addLayout(propertyGrid);
+ mainLayout->addLayout(buttonLayout);
+ setLayout(mainLayout);
+ setMinimumWidth(640);
+}
+
+void EditFileDialog::initDlg(QString md5sum, QString fullPath){
+ QSqlDatabase db = QSqlDatabase::database("treedb");
+ QSqlQuery dataQ(db);
+ dataQ.prepare("SELECT idvd, sifiletype, siquality, tfilename FROM files WHERE cmd5sum = :md5");
+ dataQ.bindValue(":md5", md5sum);
+ dataQ.exec();
+ while(dataQ.next()){
+ int dvdNo = dataQ.value(0).toInt();
+ if(dvdNo == 0){
+ dvdNo = -1;
+ }
+ mDvdNo->setText(QString::number(dvdNo));
+ mQuality->setText(QString::number(dataQ.value(2).toInt()));
+ int fileType = dataQ.value(1).toInt();
+ mFileType->setCurrentText(mFiletypeMap.value(fileType));
+ mFileName->setText(dataQ.value(3).toString());
+ }
+ mMd5Sum->setText(md5sum);
+ QVariantMap ffmpegMap = Helper::ffmpegData(fullPath);
+ mDurationSecs = ffmpegMap.value("duration").toDouble();
+ QString durString = Helper::durationFromSecs(mDurationSecs);
+ mDuration->setText(durString);
+}
+
+void EditFileDialog::accept(){
+ QSqlDatabase db = QSqlDatabase::database("treedb");
+ QSqlQuery updateQ(db);
+ updateQ.prepare("UPDATE files SET sifiletype = :ft, siquality = :fq, idvd = :dvd, iduration = :dur WHERE cmd5sum = :md5");
+ updateQ.bindValue(":md5", mMd5Sum->text());
+ updateQ.bindValue(":fq", mQuality->text().toInt());
+ updateQ.bindValue(":dvd", mDvdNo->text().toInt());
+ updateQ.bindValue(":dur", mDurationSecs);
+ QString fileType = mFileType->currentText();
+ int ft = mFiletypeMap.key(fileType);
+ updateQ.bindValue(":ft", ft);
+ updateQ.exec();
+ QDialog::accept();
+}