summaryrefslogtreecommitdiffstats
path: root/fswidget.cpp
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2018-03-30 22:25:08 +0200
committerArno <arno@disconnect.de>2018-03-30 22:25:08 +0200
commit0b4639bd7267cc0c2641b0b75a3b72e9ae765e5f (patch)
tree5cf0138dbe1211b589ff116f445bfcaf5109dc88 /fswidget.cpp
parentc0f459c0afdca4fc4c5327cda63796b3c84db961 (diff)
downloadSheMov-0b4639bd7267cc0c2641b0b75a3b72e9ae765e5f.tar.gz
SheMov-0b4639bd7267cc0c2641b0b75a3b72e9ae765e5f.tar.bz2
SheMov-0b4639bd7267cc0c2641b0b75a3b72e9ae765e5f.zip
Actually make FSWidget show some data
Not pretty, but we're getting there.
Diffstat (limited to 'fswidget.cpp')
-rw-r--r--fswidget.cpp64
1 files changed, 63 insertions, 1 deletions
diff --git a/fswidget.cpp b/fswidget.cpp
index deefddf..8423450 100644
--- a/fswidget.cpp
+++ b/fswidget.cpp
@@ -4,13 +4,21 @@
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QTreeView>
+#include <QStandardItemModel>
+#include <QSortFilterProxyModel>
#include <QFileDialog>
#include <QInputDialog>
+#include <QMimeDatabase>
+#include <QDirIterator>
+#include <QJsonObject>
#include <QSettings>
+#include <QApplication>
#include "fswidget.h"
+#include "helper.h"
FSWidget::FSWidget(QWidget *parent) : QWidget(parent) {
+ setPalette(qApp->palette());
setupWidget();
}
@@ -29,8 +37,8 @@ void FSWidget::setupWidget(){
QLabel *dirL = new QLabel(tr("Dir"));
mDirCB = new QComboBox;
- mDirCB->setInsertPolicy(QComboBox::InsertAlphabetically);
mDirCB->setSizeAdjustPolicy(QComboBox::AdjustToContents);
+ connect(mDirCB, &QComboBox::currentTextChanged, this, &FSWidget::gatherData);
QAction *addDirA = new QAction(QIcon(":/gaping_ass.png"), tr("Add dir..."), this);
connect(addDirA, &QAction::triggered, [=] {
QString newDir = QFileDialog::getExistingDirectory(this, tr("Select directory"), QDir::homePath());
@@ -68,10 +76,15 @@ void FSWidget::setupWidget(){
topWL->addStretch();
mFileView = new QTreeView;
+ mFileView->setAlternatingRowColors(true);
mFileView->setSortingEnabled(true);
mFileView->setUniformRowHeights(true);
mFileView->setSelectionBehavior(QAbstractItemView::SelectRows);
mFileView->setSelectionMode(QAbstractItemView::ExtendedSelection);
+ mModel = new QStandardItemModel;
+ mProxy = new QSortFilterProxyModel;
+ mProxy->setSourceModel(mModel);
+ mFileView->setModel(mProxy);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addLayout(topWL);
@@ -140,3 +153,52 @@ void FSWidget::removeItem(QComboBox *cb){
}
}
+void FSWidget::gatherData(const QString &curDir){
+ mFileView->setSortingEnabled(false);
+ mModel->clear();
+ QStandardItem *root = mModel->invisibleRootItem();
+ QMimeDatabase mimedb;
+ mModel->setHorizontalHeaderLabels(QStringList() << tr("Name") << tr("MIME") << tr("Size") << tr("Duration") << tr("MD5"));
+
+ QDirIterator it(curDir, QDir::Files);
+ mFileView->setUpdatesEnabled(false);
+ while(it.hasNext()){
+ QFileInfo fi = it.next();
+ QMimeType mimeType = mimedb.mimeTypeForFile(fi);
+ qint64 seconds = 0;
+ Helper::Duration dur;
+ QString durStr(tr("n/a"));
+ QLocale l;
+ QString size = l.toString(fi.size());
+ QString md5 = Helper::md5Sum(fi.absoluteFilePath());
+ QIcon i(":/huge_bra.png");
+ if(mimeType.name().startsWith("video")){
+ QJsonDocument jDoc = Helper::streamData(fi.absoluteFilePath());
+ QJsonObject jObj = jDoc.object();
+ QJsonValue durationV = jObj["format"].toObject()["duration"];
+ seconds = durationV.toVariant().toDouble();
+ dur = Helper::Duration(seconds);
+ durStr = dur.toString();
+ }
+ QList<QStandardItem*> items;
+ QFont f("courier new");
+ for(int i = 0; i < 5; ++i){
+ QStandardItem *item = new QStandardItem;
+ item->setFont(f);
+ item->setEditable(false);
+ items << item;
+ }
+ items[0]->setText(fi.fileName());
+ items[1]->setText(mimeType.name());
+ items[2]->setText(size);
+ items[2]->setTextAlignment(Qt::AlignRight);
+ items[3]->setText(durStr);
+ items[4]->setText(md5);
+ root->appendRow(items);
+ for(int i = 0; i < 5; ++i){
+ mFileView->resizeColumnToContents(i);
+ }
+ }
+ mFileView->setUpdatesEnabled(true);
+ mFileView->setSortingEnabled(true);
+}