diff options
Diffstat (limited to 'filewidget.cpp')
-rw-r--r-- | filewidget.cpp | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/filewidget.cpp b/filewidget.cpp index aab6fe1..0a2bbbb 100644 --- a/filewidget.cpp +++ b/filewidget.cpp @@ -19,6 +19,9 @@ #include <QHeaderView> #include <QApplication> #include <QCursor> +#include <QJsonObject> +#include <QJsonDocument> +#include <QItemSelectionModel> #include "filewidget.h" #include "filesorter.h" @@ -90,6 +93,8 @@ void FileWidget::setupGui(){ mainLayout->addLayout(topL); mainLayout->addWidget(mFileView); setLayout(mainLayout); + + connect(mFileView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(fileSelectionChanged(QItemSelection,QItemSelection))); } void FileWidget::selectDir(){ @@ -103,7 +108,7 @@ void FileWidget::gatherData(){ QFileInfoList fl = d.entryInfoList(QStringList() << "*", QDir::Files | QDir::Dirs | QDir::NoDot, QDir::Name | QDir::DirsFirst); mModel->clear(); QStandardItem *root = mModel->invisibleRootItem(); - mModel->setHorizontalHeaderLabels(QStringList() << QChar(0x26A7) << tr("Name") << tr("MIME") << tr("MD5")); + mModel->setHorizontalHeaderLabels(QStringList() << QChar(0x26A7) << tr("Name") << tr("MIME") << tr("Duration") << tr("MD5")); QBrush redBrush(Qt::red); QBrush greenBrush(Qt::darkGreen); @@ -114,6 +119,7 @@ void FileWidget::gatherData(){ QMimeType mime = db.mimeTypeForFile(fi); QList<QStandardItem*> fData; FileAttrs attr = NotPresent; + Helper::Duration dur; for(int i = 0; i < ColumnCount; ++i){ QStandardItem *item = new QStandardItem; item->setEditable(false); @@ -124,6 +130,8 @@ void FileWidget::gatherData(){ } fData[NameColumn]->setText(fi.fileName()); QString md5(tr("n/a")); + QString duration(tr("n/a")); + qint64 seconds = 0; if(mime.name().startsWith("video")){ md5 = Helper::md5Sum(fi.absoluteFilePath()); fData[Md5Column]->setText(md5); @@ -137,6 +145,12 @@ void FileWidget::gatherData(){ fData[NameColumn]->setForeground(redBrush); attr = NotPresent; } + QJsonDocument jDoc = Helper::ffpmegData(fi.absoluteFilePath()); + QJsonObject jObj = jDoc.object(); + QJsonValue durationV = jObj["format"].toObject()["duration"]; + seconds = durationV.toVariant().toDouble(); + dur = Helper::Duration(seconds); + duration = dur.toString(); }else if(fi.isDir()){ if(fi.fileName() == ".."){ fData[IconColumn]->setIcon(QIcon(":/up_dick.png")); @@ -149,6 +163,8 @@ void FileWidget::gatherData(){ fData[IconColumn]->setIcon(QIcon(":/gaping_ass.png")); attr = NoVideo; } + fData[DurationColumn]->setText(duration); + fData[DurationColumn]->setData(seconds, SecondsRole); fData[Md5Column]->setText(md5); fData[MimeColumn]->setText(mime.name()); if(mime.name() == "inode/directory"){ @@ -227,6 +243,22 @@ void FileWidget::searchFile(){ } } +void FileWidget::fileSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected){ + Q_UNUSED(selected); + Q_UNUSED(deselected); + int count = mFileView->selectionModel()->selectedRows().count(); + int total = mModel->rowCount(); + QString msg = QString("%1/%2").arg(QString::number(count)).arg(QString::number(total)); + emit selectionCountChanged(msg); + QModelIndexList idxl = mFileView->selectionModel()->selectedRows(DurationColumn); + qint64 seconds = 0; + foreach(QModelIndex idx, idxl){ + seconds += idx.data(SecondsRole).toLongLong(); + } + Helper::Duration dur(seconds); + emit durationChanged(dur.toString()); +} + void FileWidget::itemDoubleClicked(const QModelIndex &idx){ if(idx.column() == NameColumn){ int attr = idx.data(AttrsRole).toInt(); |