diff options
Diffstat (limited to 'filestreemodel.cpp')
-rw-r--r-- | filestreemodel.cpp | 76 |
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(); |