/* 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 #include #include #include #include #include #include #include #include #include #include #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("Monospace")); QIntValidator *validator = new QIntValidator; mFileNo = new QLineEdit; mFileNo->setValidator(validator); QFormLayout *lineEditL = new QFormLayout; lineEditL->addRow(tr("Filename"), mFileName); lineEditL->addRow(tr("MD5"), mMd5Sum); lineEditL->addRow(tr("File No."), mFileNo); QGroupBox *dvdNoGB = new QGroupBox(tr("DVD No.")); mDvdNo= new QLineEdit; 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, sifileno 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()); mFileNo->setText(QString::number(dataQ.value(4).toInt())); } 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, sifileno = :fno WHERE cmd5sum = :md5"); updateQ.bindValue(":md5", mMd5Sum->text()); updateQ.bindValue(":fno", mFileNo->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(); }