1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
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();
}
|