summaryrefslogtreecommitdiffstats
path: root/filewidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'filewidget.cpp')
-rw-r--r--filewidget.cpp34
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();