summaryrefslogtreecommitdiffstats
path: root/editfiledialog.cpp
blob: 15d4836dc2c3806d55328370b021fc3f0a4dbc83 (plain)
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();
}