diff options
Diffstat (limited to 'filedisplay.cpp')
-rw-r--r-- | filedisplay.cpp | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/filedisplay.cpp b/filedisplay.cpp index bce77d9..fe832b1 100644 --- a/filedisplay.cpp +++ b/filedisplay.cpp @@ -11,13 +11,23 @@ #include <QPushButton> #include <QGroupBox> #include <QDir> +#include <QTreeView> +#include <QStandardItemModel> +#include <QJsonDocument> +#include <QJsonObject> +#include <QJsonArray> +#include <QSettings> +#include <QHeaderView> #include "filedisplay.h" +#include "helper.h" FileDisplay::FileDisplay(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f) { mTab = new QTabWidget; mDBData = new DBData; + mFileData = new FileData; mTab->addTab(mDBData, tr("Database")); + mTab->addTab(mFileData, tr("File")); //button layout QHBoxLayout *buttonL = new QHBoxLayout; @@ -39,6 +49,7 @@ void FileDisplay::setFileData(const QString &fullPath, const QString &md5Sum) { mFullPath = fullPath; mMd5 = md5Sum; mDBData->setFileData(fullPath, md5Sum); + mFileData->setFileData(fullPath); } DBData::DBData(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f) { @@ -153,3 +164,90 @@ void DBData::gatherData(){ QString genresText = genres.join("\n"); mGenres->setText(genresText); } + +FileData::FileData(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f){ + mView = new QTreeView; + mModel = new QStandardItemModel; + mView->setModel(mModel); + QGroupBox *gb = new QGroupBox(tr("ffprobe Output")); + QHBoxLayout *gbLayout = new QHBoxLayout; + gbLayout->addWidget(mView); + gb->setLayout(gbLayout); + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addWidget(gb); + setLayout(mainLayout); +} + +FileData::~FileData(){ + writeHeaderData(); +} + +void FileData::setFileData(const QString &fullPath){ + mModel->clear(); + mModel->setHorizontalHeaderLabels(QStringList() << tr("Key") << tr("Value")); + readHeaderData(); + QJsonDocument jDoc = Helper::ffpmegData(fullPath); + QStandardItem *rootItem = mModel->invisibleRootItem(); + rootItem->setColumnCount(2); + QStandardItem *streamItem = new QStandardItem(tr("Stream")); + streamItem->setEditable(false); + rootItem->appendRow(streamItem); + QStandardItem *formatItem = new QStandardItem(tr("Format")); + formatItem->setEditable(false); + rootItem->appendRow(formatItem); + + QJsonObject jObject = jDoc.object(); + FileDataRecursive(jObject.value("format"), formatItem); + QJsonArray streams = jObject.value("streams").toArray(); + for(int i = 0; i < streams.size(); ++i){ + QString itemName = QString(tr("Stream %1 [%2]")).arg(QString::number(i + 1)).arg(streams.at(i).toObject().value("codec_type").toString()); + QStandardItem *item = new QStandardItem(itemName); + item->setEditable(false); + QStandardItem *item2 = new QStandardItem; + item2->setEditable(false); + streamItem->appendRow(QList<QStandardItem*>() << item << item2); + QStandardItem *next = streamItem->child(i, 0); + FileDataRecursive(streams.at(i), next); + } + QModelIndex i1 = mModel->indexFromItem(streamItem); + mView->expand(i1); + QModelIndex i2 = mModel->indexFromItem(formatItem); + mView->expand(i2); +} + +void FileData::FileDataRecursive(QJsonValue start, QStandardItem *appendTo){ + QJsonObject startObject = start.toObject(); + QJsonObject::const_iterator it; + for(it = startObject.constBegin(); it != startObject.constEnd(); ++it){ + QVariantList data = QVariantList() << it.key() << it.value().toVariant(); + if(it.key() == "duration"){ + qint64 seconds = it.value().toString().toDouble(); + Helper::Duration dur(seconds); + data[1] = dur.toString(); + } + if(it.key() == "bit_rate"){ + qint64 br = it.value().toString().toInt() / 1000; + data[1] = QString("%1 kb/s").arg(QString::number(br)); + } + QStandardItem *key = new QStandardItem(data.at(0).toString()); + key->setEditable(false); + QStandardItem *value = new QStandardItem(data.at(1).toString()); + value->setEditable(false); + appendTo->appendRow(QList<QStandardItem*>() << key << value); + QStandardItem *newItem = appendTo->child(0, 0); + FileDataRecursive(*it, newItem); + } +} + +void FileData::writeHeaderData(){ + QSettings s; + s.setValue("fd/fileheaders", mView->header()->saveState()); +} + +void FileData::readHeaderData(){ + QSettings s; + QByteArray headers = s.value("fd/fileheaders").toByteArray(); + if(!headers.isEmpty()){ + mView->header()->restoreState(headers); + } +} |