summaryrefslogtreecommitdiffstats
path: root/filestreemodel.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2010-07-31 16:26:10 +0200
committerArno <am@disconnect.de>2010-07-31 16:26:10 +0200
commit8eba6e7f033617f3e7ea3bd9913105df0de74ae2 (patch)
tree8d4b93a4a686e6e57526b77033bb985fa9545036 /filestreemodel.cpp
parent6d3b28f9b12964b161b5a7ac0038435cfdd6e27b (diff)
downloadSheMov-8eba6e7f033617f3e7ea3bd9913105df0de74ae2.tar.gz
SheMov-8eba6e7f033617f3e7ea3bd9913105df0de74ae2.tar.bz2
SheMov-8eba6e7f033617f3e7ea3bd9913105df0de74ae2.zip
Implement FilePropertiesDialog
Implemented a dialog for file properties. When the mime type says it's a video, fork ffprobe to read the properties of all streams and show them in a QTreeView powered by a SmTreeModel. If the mime type is image, use QImage to read some properties and show them in the same dialog. This commit introduces the new class FilePropertiesDialog. I also had to implement a copy constructor for SmTreeItem. It obsoletes classes ActorWidget, ActorModel and MoviePropertiesDialog.
Diffstat (limited to 'filestreemodel.cpp')
-rw-r--r--filestreemodel.cpp76
1 files changed, 76 insertions, 0 deletions
diff --git a/filestreemodel.cpp b/filestreemodel.cpp
index 1f224fd..9c17084 100644
--- a/filestreemodel.cpp
+++ b/filestreemodel.cpp
@@ -10,6 +10,9 @@
#include <QIcon>
#include <QFileInfo>
#include <QFile>
+#include <QSettings>
+#include <QProcess>
+#include <QImage>
#include "filestreemodel.h"
#include "smtreeitem.h"
@@ -235,6 +238,79 @@ QHash<QString, QString> FilesTreeModel::filesBySeriesPartId(int seriesPartId){
return retval;
}
+QList<QMap<QString, QString> > FilesTreeModel::streamInfo(const QModelIndex &idx){
+ QList<QMap<QString, QString> > retval;
+ if(!idx.isValid()){
+ return retval;
+ }
+ QSettings s;
+ QString ffProbe = s.value("paths/ffprobe").toString();
+ QString fullPath = idx.data(FullPathRole).toString();
+ QStringList args;
+ args << "-show_streams" << fullPath;
+ QProcess ffproc;
+ ffproc.start(ffProbe, args);
+ if(!ffproc.waitForStarted()){
+ return retval;
+ }
+ ffproc.waitForFinished();
+ QByteArray ffData = ffproc.readAllStandardOutput();
+ QList<QByteArray> lines = ffData.split('\n');
+ QMap<QString, QString> current;
+ foreach(QString l, lines){
+ if(l.startsWith("[STREAM]")){
+ continue;
+ }
+ if(l.startsWith("[/STREAM]")){
+ retval << current;
+ current.clear();
+ continue;
+ }
+ QStringList parts = l.split('=');
+ if(parts.size() == 2){
+ current.insert(parts.at(0), parts.at(1));
+ }
+ }
+ return retval;
+}
+
+QMap<QString, QString> FilesTreeModel::pictureInfo(const QModelIndex &idx){
+ QMap<QString, QString> retval;
+ if(!idx.isValid()){
+ return retval;
+ }
+ QString fullPath = idx.data(FullPathRole).toString();
+ QImage img(fullPath);
+ if(img.isNull()){
+ return retval;
+ }
+ retval.insert("Width", QString::number(img.width()));
+ retval.insert("Height", QString::number(img.height()));
+ retval.insert("Colors", QString::number(img.colorCount()));
+ retval.insert("Color depth", QString::number(img.depth()));
+ retval.insert("Byte count", QString::number(img.byteCount()));
+ retval.insert("Bytes per line", QString::number(img.bytesPerLine()));
+ retval.insert("Alpha channel", img.hasAlphaChannel() ? tr("yes") : tr("no"));
+ retval.insert("Gray scale", img.isGrayscale() ? tr("yes") : tr("no"));
+ return retval;
+}
+
+QMap<QString, QString> FilesTreeModel::pictureMetaInfo(const QModelIndex &idx){
+ QMap<QString, QString> retval;
+ if(!idx.isValid()){
+ return retval;
+ }
+ QString fullPath = idx.data(FullPathRole).toString();
+ QImage img(fullPath);
+ if(img.isNull()){
+ return retval;
+ }
+ foreach(QString v, img.textKeys()){
+ retval.insert(v, img.text(v));
+ }
+ return retval;
+}
+
bool FilesTreeModel::addFile(const QString &fullPath, int type, int quality, int filePart, int seriesPartId, int dvd){
QFileInfo fi(fullPath);
qint64 size = fi.size();