diff options
-rw-r--r-- | archivecontroller.cpp | 26 | ||||
-rw-r--r-- | archivecontroller.h | 5 | ||||
-rw-r--r-- | archivemodel.cpp | 2 | ||||
-rw-r--r-- | archiveview.cpp | 65 | ||||
-rw-r--r-- | archiveview.h | 37 | ||||
-rw-r--r-- | delegates.cpp | 86 | ||||
-rw-r--r-- | delegates.h | 59 | ||||
-rw-r--r-- | filesystemwidget.cpp | 3 | ||||
-rw-r--r-- | fileview.cpp | 28 | ||||
-rw-r--r-- | fileview.h | 8 | ||||
-rw-r--r-- | helper.cpp | 36 | ||||
-rw-r--r-- | helper.h | 3 | ||||
-rw-r--r-- | newmoviewizard.cpp | 8 | ||||
-rw-r--r-- | shemov.cpp | 24 | ||||
-rw-r--r-- | shemov.h | 2 | ||||
-rw-r--r-- | shemov.pro | 6 | ||||
-rw-r--r-- | smdirmodel.cpp | 17 | ||||
-rw-r--r-- | smdirwatcher.cpp | 4 |
18 files changed, 237 insertions, 182 deletions
diff --git a/archivecontroller.cpp b/archivecontroller.cpp index 30d94f3..bda54c2 100644 --- a/archivecontroller.cpp +++ b/archivecontroller.cpp @@ -61,6 +61,7 @@ void ArchiveController::setMetadata(QTextEdit *metadata){ void ArchiveController::init(){ connect(mArchiveSelection, SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(treeSelectionChanged(QItemSelection,QItemSelection))); connect(mArchiveFiles, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(fileDoubleClicked(QModelIndex))); + connect(mFileSelection, SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(fileSelectionChanged(QItemSelection,QItemSelection))); } void ArchiveController::playSelectedFiles(){ @@ -211,6 +212,31 @@ void ArchiveController::treeSelectionChanged(const QItemSelection &selected, con } } +void ArchiveController::fileSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected){ + Q_UNUSED(selected); + Q_UNUSED(deselected); + QModelIndexList sel = mapToSource(mArchiveFilesProxy, mFileSelection->selectedRows()); + if(sel.isEmpty()){ + return; + } + qint64 size = 0; + qint64 duration = 0; + bool maybeMore = false; + foreach(QModelIndex i, sel){ + size += i.data(ArchiveFilesModel::SizeRole).toInt(); + int type = i.data(ArchiveFilesModel::FileTypeRole).toInt(); + if(type == ArchiveFilesModel::Movie){ + int dur = i.data(ArchiveFilesModel::SizeDurRole).toInt(); + duration += dur; + if(dur == 0){ + maybeMore = true; + } + } + } + emit sizeChanged(size); + emit durationChanged(duration, maybeMore); +} + void ArchiveController::fileDoubleClicked(const QModelIndex &idx){ if(!idx.isValid()){ return; diff --git a/archivecontroller.h b/archivecontroller.h index 750b017..4f24973 100644 --- a/archivecontroller.h +++ b/archivecontroller.h @@ -45,6 +45,7 @@ class ArchiveController : public QObject { public slots: void treeSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); + void fileSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected); void playSelectedFiles(); void editQuality(); void editDvdNo(); @@ -56,6 +57,10 @@ class ArchiveController : public QObject { private slots: void fileDoubleClicked(const QModelIndex &idx); + signals: + void sizeChanged(qint64 newSize); + void durationChanged(qint64 newDuration, bool maybeMore); + private: QModelIndexList mapToSource(const QSortFilterProxyModel *proxy, const QModelIndexList idxs) const; ArchiveView *mArchiveView; diff --git a/archivemodel.cpp b/archivemodel.cpp index 255910f..2c3dd7c 100644 --- a/archivemodel.cpp +++ b/archivemodel.cpp @@ -833,7 +833,7 @@ void ArchiveFilesModel::populate(const QSet<int> &seriesPartIds){ while(q.next()){ QList<QVariant> data; data << QVariant(); //expansion (empty) - data << q.value(0) << q.value(1) << q.value(2) << q.value(3) << q.value(4) << q.value(5) << q.value(6) << q.value(7) << q.value(8); // << q.value(9); + data << q.value(0) << q.value(1) << q.value(2) << q.value(3) << q.value(4) << q.value(5) << q.value(6) << q.value(7) << q.value(8); if(!q.value(9).isNull()){ data << q.value(9); }else if(!q.value(10).isNull()){ diff --git a/archiveview.cpp b/archiveview.cpp index 3031815..18effbd 100644 --- a/archiveview.cpp +++ b/archiveview.cpp @@ -27,6 +27,7 @@ #include "archiveview.h" #include "archivecontroller.h" #include "mappingtablewidget.h" +#include "delegates.h" #include "smglobals.h" #include "helper.h" @@ -674,67 +675,3 @@ QString PartEditor::subtitle() const { return mSubtitle->text(); } -/* Delegate for File no. */ - -QString FileNoDelegate::displayText(const QVariant &value, const QLocale &locale) const{ - Q_UNUSED(locale); - int no = value.toInt(); - if(no){ - return QString::number(no); - } - return QString(); -} - -QWidget *FileNoDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const{ - Q_UNUSED(option); - QSpinBox *retval = new QSpinBox(parent); - int no = index.data().toInt(); - retval->setValue(no); - return retval; -} - -/* Delegate for Dvd no. */ - -QString DvdNoDelegate::displayText(const QVariant &value, const QLocale &locale) const{ - Q_UNUSED(locale); - int no = value.toInt(); - if(no < 0){ - return tr("(local)"); - } - QString retval = QString(tr("#%1")).arg(QString::number(no)); - return retval; -} - -/* Delegate for size */ - -QString SizeDelegate::displayText(const QVariant &value, const QLocale &locale) const{ - // locale.toString() doesn't work, maybe b/c it's const - Q_UNUSED(locale); - QLocale l; - return l.toString(value.toLongLong()); -} - -/* Delegate for duration */ - -QString DurationDelegate::displayText(const QVariant &value, const QLocale &locale) const{ - Q_UNUSED(locale); - if(value.toString().contains("x")){ - return value.toString(); - } - qint64 secs = value.toInt(); - if(secs == 0){ - return tr("n/a"); - } - Helper::Duration dur(secs); - return dur.toString(); -} - -/* Empty delegate */ - -QString EmptyDelegate::displayText(const QVariant &value, const QLocale &locale) const{ - int i = value.toInt(); - if(i < 1){ - return QString(); - } - return QStyledItemDelegate::displayText(value, locale); -} diff --git a/archiveview.h b/archiveview.h index 6627508..48517da 100644 --- a/archiveview.h +++ b/archiveview.h @@ -236,41 +236,4 @@ class PartEditor : public QDialog { QPushButton *mAccept; }; -class FileNoDelegate : public QStyledItemDelegate { - Q_OBJECT - public: - explicit FileNoDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) {} - virtual QString displayText(const QVariant &value, const QLocale &locale) const; - virtual QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; -}; - -class DvdNoDelegate : public QStyledItemDelegate { - Q_OBJECT - public: - explicit DvdNoDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) {} - virtual QString displayText(const QVariant &value, const QLocale &locale) const; -}; - -class SizeDelegate : public QStyledItemDelegate { - Q_OBJECT - public: - explicit SizeDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) {} - virtual QString displayText(const QVariant &value, const QLocale &locale) const; -}; - -class DurationDelegate : public QStyledItemDelegate { - Q_OBJECT - public: - explicit DurationDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) {} - virtual QString displayText(const QVariant &value, const QLocale &locale) const; -}; - -class EmptyDelegate : public QStyledItemDelegate { - Q_OBJECT - public: - explicit EmptyDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) {} - virtual QString displayText(const QVariant &value, const QLocale &locale) const; -}; - - #endif // ARCHIVEVIEW_H diff --git a/delegates.cpp b/delegates.cpp new file mode 100644 index 0000000..ec1fe54 --- /dev/null +++ b/delegates.cpp @@ -0,0 +1,86 @@ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version + 2 of the License, or (at your option) any later version. +*/ + +#include <QVariant> +#include <QSpinBox> + +#include "delegates.h" +#include "helper.h" + +/* Delegate for File no. */ + +QString FileNoDelegate::displayText(const QVariant &value, const QLocale &locale) const{ + Q_UNUSED(locale); + int no = value.toInt(); + if(no){ + return QString::number(no); + } + return QString(); +} + +QWidget *FileNoDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const{ + Q_UNUSED(option); + QSpinBox *retval = new QSpinBox(parent); + int no = index.data().toInt(); + retval->setValue(no); + return retval; +} + +/* Delegate for Dvd no. */ + +QString DvdNoDelegate::displayText(const QVariant &value, const QLocale &locale) const{ + Q_UNUSED(locale); + int no = value.toInt(); + if(no < 0){ + return tr("(local)"); + } + QString retval = QString(tr("#%1")).arg(QString::number(no)); + return retval; +} + +/* Delegate for size */ + +QString SizeDelegate::displayText(const QVariant &value, const QLocale &locale) const{ + // locale.toString() doesn't work, maybe b/c it's const + Q_UNUSED(locale); + QLocale l; + return l.toString(value.toLongLong()); +} + +/* Delegate for duration */ + +QString DurationDelegate::displayText(const QVariant &value, const QLocale &locale) const{ + Q_UNUSED(locale); + if(value.toString().contains("x")){ + return value.toString(); + } + qint64 secs = value.toInt(); + if(secs == 0){ + return tr("n/a"); + } + Helper::Duration dur(secs); + return dur.toString(); +} + +/* Delegate for bitrate */ + +QString BitrateDelegate::displayText(const QVariant &value, const QLocale &locale) const{ + Q_UNUSED(locale); + int br = value.toInt() / 1000; + QString retval = QString("%1 kb/s").arg(QString::number(br)); + return retval; +} + +/* Empty delegate */ + +QString EmptyDelegate::displayText(const QVariant &value, const QLocale &locale) const{ + int i = value.toInt(); + if(i < 1){ + return QString(); + } + return QStyledItemDelegate::displayText(value, locale); +} diff --git a/delegates.h b/delegates.h new file mode 100644 index 0000000..86ee94e --- /dev/null +++ b/delegates.h @@ -0,0 +1,59 @@ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version + 2 of the License, or (at your option) any later version. +*/ + +#ifndef DELEGATES_H +#define DELEGATES_H + +#include <QString> +#include <QWidget> +#include <QStyleOptionViewItem> +#include <QStyledItemDelegate> + +class FileNoDelegate : public QStyledItemDelegate { + Q_OBJECT + public: + explicit FileNoDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) {} + virtual QString displayText(const QVariant &value, const QLocale &locale) const; + virtual QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; +}; + +class DvdNoDelegate : public QStyledItemDelegate { + Q_OBJECT + public: + explicit DvdNoDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) {} + virtual QString displayText(const QVariant &value, const QLocale &locale) const; +}; + +class SizeDelegate : public QStyledItemDelegate { + Q_OBJECT + public: + explicit SizeDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) {} + virtual QString displayText(const QVariant &value, const QLocale &locale) const; +}; + +class DurationDelegate : public QStyledItemDelegate { + Q_OBJECT + public: + explicit DurationDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) {} + virtual QString displayText(const QVariant &value, const QLocale &locale) const; +}; + +class BitrateDelegate : public QStyledItemDelegate { + Q_OBJECT + public: + explicit BitrateDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) {} + virtual QString displayText(const QVariant &value, const QLocale &locale) const; +}; + +class EmptyDelegate : public QStyledItemDelegate { + Q_OBJECT + public: + explicit EmptyDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) {} + virtual QString displayText(const QVariant &value, const QLocale &locale) const; +}; + +#endif // DELEGATES_H diff --git a/filesystemwidget.cpp b/filesystemwidget.cpp index 7ded048..9a4efa0 100644 --- a/filesystemwidget.cpp +++ b/filesystemwidget.cpp @@ -27,6 +27,7 @@ #include "filesystemfileproxy.h" #include "pictureviewer2.h" #include "smglobals.h" +#include "delegates.h" #include "smdirmodel.h" FilesystemWidget::FilesystemWidget(QWidget *parent) : QWidget(parent), mClipboardMode(None) { @@ -65,6 +66,8 @@ FilesystemWidget::FilesystemWidget(QWidget *parent) : QWidget(parent), mClipboar mFileView->setItemsExpandable(false); mFileView->setSelectionMode(QAbstractItemView::ExtendedSelection); mFileView->setSelectionBehavior(QAbstractItemView::SelectRows); + mFileView->setItemDelegateForColumn(SmDirModel::DurSize, new DurationDelegate(this)); + mFileView->setItemDelegateForColumn(SmDirModel::Bitrate, new BitrateDelegate(this)); mFileProxy->setDynamicSortFilter(true); connect(mFileView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), mFileView, SLOT(selectedFilesChanged())); diff --git a/fileview.cpp b/fileview.cpp index 1720552..336d179 100644 --- a/fileview.cpp +++ b/fileview.cpp @@ -6,15 +6,15 @@ */ #include <QContextMenuEvent> -#include <QtWidgets/QMenu> -#include <QtWidgets/QAction> +#include <QMenu> +#include <QAction> #include <QKeyEvent> #include <QModelIndex> #include <QRegExp> -#include <QtWidgets/QFileSystemModel> +#include <QFileSystemModel> #include <QSortFilterProxyModel> -#include <QtWidgets/QAction> -#include <QtWidgets/QApplication> +#include <QAction> +#include <QApplication> #include <QEvent> #include <QSettings> #include <QModelIndex> @@ -23,7 +23,7 @@ #include <QList> #include <QDir> #include <QSortFilterProxyModel> -#include <QtWidgets/QInputDialog> +#include <QInputDialog> #include <QPalette> #include <QTimer> #include <QHeaderView> @@ -50,12 +50,6 @@ void FileView::setModel(QAbstractItemModel *model){ SmTreeView::setModel(model); } -const QVariant FileView::duration() const { - QVariant retval; - retval.setValue(mDuration); - return retval;; -} - void FileView::markFiles(){ bool ok; QString title = QString(tr("%1 - %2")).arg(qApp->applicationName()).arg(tr("Mark files")); @@ -228,17 +222,13 @@ void FileView::selectedFilesChanged(){ QModelIndexList selected = selectionModel()->selectedRows(); emit numSelected(selected.size()); qint64 selSize = 0; - Helper::Duration dur; + qint64 dur = 0; foreach(QModelIndex i, selected){ selSize += i.data(SmDirModel::SizeRole).toLongLong(); - Helper::Duration curDur = i.data(SmDirModel::DurSizeRole).value<Helper::Duration>(); - dur = dur + curDur; + dur += i.data(SmDirModel::DurSizeRole).toInt(); } emit selectedSize(selSize); - mDuration = dur; - QVariant duration; - duration.setValue(dur); - emit selectedDuration(duration); + emit selectedDuration(dur, false); } void FileView::saveSelection(){ @@ -29,7 +29,6 @@ class FileView : public SmTreeView { FileView(QWidget *parent = 0); ~FileView() {} virtual void setModel(QAbstractItemModel *model); - const QVariant duration() const; signals: void upDir(); @@ -39,7 +38,7 @@ class FileView : public SmTreeView { void editorClosed(const QModelIndex &idx); void numSelected(int); void selectedSize(qint64); - void selectedDuration(QVariant); + void selectedDuration(qint64,bool); public slots: void markFiles(); @@ -49,6 +48,7 @@ class FileView : public SmTreeView { void writeConfig(); void saveSelection(); void restoreSelection(); + void selectedFilesChanged(); protected slots: virtual void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint); @@ -59,9 +59,6 @@ class FileView : public SmTreeView { virtual void resizeEvent(QResizeEvent *e); virtual bool event(QEvent *event); - private slots: - void selectedFilesChanged(); - private: enum HoverFileType { Dir, Movie, Image, None }; bool exitHover(bool exitVal = true); @@ -77,7 +74,6 @@ class FileView : public SmTreeView { QList<QString> mMd5Sums; FilesystemFileProxy *mProxy; SmDirModel *mModel; - Helper::Duration mDuration; }; #endif @@ -19,9 +19,11 @@ #include <QProcess> #include <QRect> #include <QTime> -#include <QtWidgets/QWidget> -#include <QtWidgets/QDesktopWidget> -#include <QtWidgets/QApplication> +#include <QWidget> +#include <QDesktopWidget> +#include <QApplication> +#include <QJsonDocument> +#include <QJsonObject> #include <stdio.h> @@ -216,32 +218,22 @@ namespace Helper { widget->move(widgetRect.topLeft()); } - QList<QVariant> duration(const QString &path){ + + QVariantMap ffmpegData(const QString &path){ QSettings s; QString ffProbe = s.value("paths/ffprobe").toString(); QStringList args; - QList<QVariant> retval = QList<QVariant>() << QVariant() << QVariant(); - args << "-show_streams" << path; + QVariantMap retval; + args << "-v" << "quiet" << "-print_format" << "json" << "-show_format" << path; QProcess ffproc; ffproc.start(ffProbe, args); if(!ffproc.waitForStarted()){ - return retval; + return QVariantMap(); } ffproc.waitForFinished(); - QByteArray ffData = ffproc.readAllStandardError(); - QList<QByteArray> lines = ffData.split('\n'); - - foreach(QString l, lines){ - QString llc = l.toLower(); - if(llc.contains("duration")){ - int idx = llc.indexOf("duration:"); - retval[0].setValue(Duration(llc.mid(idx + 10, 8))); - idx = llc.indexOf("bitrate:"); - retval[1] = llc.mid(idx + 9); - break; - } - } - return retval; + QByteArray ffData = ffproc.readAllStandardOutput(); + QJsonDocument jsDoc = QJsonDocument::fromJson(ffData); + return jsDoc.object().value("format").toObject().toVariantMap(); } Duration::Duration() : mHours(0), mMinutes(0), mSeconds(0) {} @@ -249,7 +241,7 @@ namespace Helper { Duration::Duration(qint64 seconds){ int sec(0), min(0), h(0); // get hours - h = (seconds / 60 / 60) % 24; + h = (seconds / 60 / 60); // remaining minutes min = (seconds / 60) % 60; // seconds @@ -32,7 +32,7 @@ namespace Helper { const QStringList toStringList(const QList<QVariant> &list); const QString colorToHtml(const QColor &color); void centerWidget(QWidget *widget); - QList<QVariant> duration(const QString &path); + QVariantMap ffmpegData(const QString &path); class Duration { public: Duration(); @@ -50,7 +50,6 @@ namespace Helper { }; } - Q_DECLARE_METATYPE(Helper::Duration) #endif diff --git a/newmoviewizard.cpp b/newmoviewizard.cpp index 9447a6c..a5df22a 100644 --- a/newmoviewizard.cpp +++ b/newmoviewizard.cpp @@ -31,6 +31,7 @@ #include "mappingtablemodel.h" #include "seriesmetadatamodel.h" #include "filestreemodel.h" +#include "delegates.h" #include "helper.h" #include "pictureviewer2.h" #include "archivemodel.h" @@ -124,13 +125,12 @@ void NewMovieWizard::accept(){ qint64 size = fi.size(); QString md5 = Helper::md5Sum(fullPath); md5Sums.insert(fullPath, md5); - int secs = 0; + qint64 secs = 0; QString picSize; int type = fData.value(WizardTreeModel::FileType).toInt(); if(type == ArchiveFilesModel::Movie){ - QVariant v = Helper::duration(fullPath).value(0); - Helper::Duration dur = v.value<Helper::Duration>(); - secs = dur.toSeconds(); + QVariantMap m = Helper::ffmpegData(fullPath); + secs = m.value("duration").toInt(); }else{ QPixmap pix(fullPath); picSize = QString("%1x%2").arg(QString::number(pix.width())).arg(QString::number(pix.height())); @@ -102,6 +102,10 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla connect(mNewMovieWizard, SIGNAL(accepted()), c->archiveTreeModel(), SLOT(refresh())); mNewPicsDialog = new NewPicsDialog(this); + //experimental archive + connect(c, SIGNAL(sizeChanged(qint64)), this, SLOT(setSize(qint64))); + connect(c, SIGNAL(durationChanged(qint64,bool)), this, SLOT(setDuration(qint64,bool))); + QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(mTab); @@ -116,7 +120,7 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla splash.showMessage(tr("Finishing..."), Qt::AlignHCenter, Qt::yellow); qApp->processEvents(); connect(mFSWidget->fileView(), SIGNAL(selectedSize(qint64)), this, SLOT(setSize(qint64))); - connect(mFSWidget->fileView(), SIGNAL(selectedDuration(QVariant)), this, SLOT(setDuration(QVariant))); + connect(mFSWidget->fileView(), SIGNAL(selectedDuration(qint64,bool)), this, SLOT(setDuration(qint64,bool))); connect(mFSWidget->fileView(), SIGNAL(numSelected(int)), this, SLOT(updateSelectedCount(int))); connect(mFSWidget, SIGNAL(windowTitle(QString)), this, SLOT(setWindowTitle(QString))); connect(mFSWidget->fileView(), SIGNAL(statusbarMessage(const QString &)), this, SLOT(statusbarMessage(const QString &))); @@ -197,15 +201,19 @@ void SheMov::tabChanged(int newTab){ mPVShowNPDialogA->setEnabled(newTab == FileManager); mPVAddToNPA->setEnabled(newTab == FileManager); statusbarMessage(QString()); + ArchiveController *c = SmGlobals::instance()->archiveController(); switch(newTab){ case FileManager: connect(mPVSelectAllA, SIGNAL(triggered()), mFSWidget, SLOT(selectAllPV())); - setDuration(mFSWidget->fileView()->duration()); + mFSWidget->fileView()->selectedFilesChanged(); + break; + case Experimental: + c->fileSelectionChanged(QItemSelection(), QItemSelection()); break; case Pictures: connect(mPVSelectAllA, SIGNAL(triggered()), mPicWidget->picView(), SLOT(setPVAll())); default: - setDuration(QVariant()); + setDuration(0x0, false); ;; } } @@ -322,9 +330,13 @@ void SheMov::setSize(qint64 size){ mSelectedSize->setText(val); } -void SheMov::setDuration(const QVariant dur){ - Helper::Duration d = dur.value<Helper::Duration>(); - mSelectedDuration->setText(d.toString()); +void SheMov::setDuration(qint64 dur, bool maybeMore){ + Helper::Duration d(dur); + QString t = d.toString(); + if(maybeMore){ + t.append("+"); + } + mSelectedDuration->setText(t); } QAction *SheMov::createSeparator(){ @@ -45,7 +45,7 @@ class SheMov : public QMainWindow { void newMovieWizard(); void newMovieWizardWithFiles(); void setSize(qint64 size); - void setDuration(const QVariant dur); + void setDuration(qint64 dur, bool maybeMore); void checkConsistency(); void toggleHover(QObject *object); void checkMount(bool mounted); @@ -46,7 +46,8 @@ SOURCES = main.cpp \ smtreeview.cpp \ archivemodel.cpp \ archiveview.cpp \ - archivecontroller.cpp + archivecontroller.cpp \ + delegates.cpp HEADERS = \ filesystemdirproxy.h \ filesystemwidget.h \ @@ -88,6 +89,7 @@ HEADERS = \ smtreeview.h \ archivemodel.h \ archiveview.h \ - archivecontroller.h + archivecontroller.h \ + delegates.h LIBS += -lmagic -lXfixes -lX11 RESOURCES = shemov.qrc diff --git a/smdirmodel.cpp b/smdirmodel.cpp index f967cf1..16caf02 100644 --- a/smdirmodel.cpp +++ b/smdirmodel.cpp @@ -71,23 +71,6 @@ QVariant SmDirModel::data(const QModelIndex &index, int role) const{ return QVariant(QColor(Qt::darkGreen)); } return SmTreeModel::data(index, role); - case Qt::DisplayRole: { - if(index.column() == DurSize){ - QVariant d = i->data(DurSize); - if(d.canConvert<Helper::Duration>()){ - Helper::Duration dur = d.value<Helper::Duration>(); - return dur.toString(); - } - if(d.canConvert<QSize>()){ - QSize size = d.value<QSize>(); - QString retval = QString(tr("%1x%2 px").arg(QString::number(size.width())).arg(QString::number(size.height()))); - return retval; - } - return QVariant(); - } - } - - default: return SmTreeModel::data(index, role); } diff --git a/smdirwatcher.cpp b/smdirwatcher.cpp index 2421b1e..a6163c2 100644 --- a/smdirwatcher.cpp +++ b/smdirwatcher.cpp @@ -147,7 +147,9 @@ const QList<QVariant> SmDataColletor::fileData(const QFileInfo &fi){ data << fi.lastModified(); QList<QVariant> si = QList<QVariant>() << QVariant() << QVariant(); if(mime.startsWith("video")){ - si = Helper::duration(fi.absoluteFilePath()); + QVariantMap ffData = Helper::ffmpegData(fi.absoluteFilePath()); + si[0] = ffData.value("duration").toDouble(); + si[1] = ffData.value("bit_rate").toInt(); }else if(mime.startsWith("image")){ QImage img(fi.absoluteFilePath()); si[0] = img.size(); |