From 8945f641f468e373b4d8d907bcc2f5be2922962e Mon Sep 17 00:00:00 2001 From: Arno Date: Sun, 4 Sep 2016 03:32:56 +0200 Subject: Display duration and num. of selected Files When selecting files in FileWidget, calculate the total duration and display it in the status bar. Also count the selected Files and show them. Update status bar on changing tabs. --- filewidget.cpp | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (limited to 'filewidget.cpp') diff --git a/filewidget.cpp b/filewidget.cpp index aab6fe1..0a2bbbb 100644 --- a/filewidget.cpp +++ b/filewidget.cpp @@ -19,6 +19,9 @@ #include #include #include +#include +#include +#include #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 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(); -- cgit v1.2.3-70-g09d2