From ab8c38e0c2d5370d2ef5c54bd2f8c414d49deb92 Mon Sep 17 00:00:00 2001 From: Arno Date: Sat, 31 Mar 2018 20:23:56 +0200 Subject: Implement unpack for FSWidget Unconditionally try to extract all selected files with 7z to the current directory. Don't try to figure out if 7z is available or if the file is an archive. --- fswidget.cpp | 24 +++++++++++++++++++++++- fswidget.h | 1 + 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/fswidget.cpp b/fswidget.cpp index c096090..ce65574 100644 --- a/fswidget.cpp +++ b/fswidget.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -56,6 +57,9 @@ void FSWidget::setupWidget(){ connect(archiveMovieA, &QAction::triggered, this, &FSWidget::archiveMovie); connect(mMovieWizard, &NewMovieWizard::accepted, this, &FSWidget::refresh); toolbar->addAction(archiveMovieA); + QAction *unpackA = new QAction(QIcon(":/clitoris.png"), tr("Unpack"), this); + connect(unpackA, &QAction::triggered, this, &FSWidget::unpack); + toolbar->addAction(unpackA); QIcon plusIcon = Helper::icon(QColor(255,85,255), '+'); QIcon minusIcon = Helper::icon(QColor(255,85,255), '-'); @@ -119,7 +123,7 @@ void FSWidget::setupWidget(){ mFileView->setModel(mProxy); mFileView->sortByColumn(0, Qt::AscendingOrder); - addActions(QList() << backA << forwardA << Helper::createSeparator(this) << refreshA << deleteFilesA << Helper::createSeparator(this) << archiveMovieA); + addActions(QList() << backA << forwardA << Helper::createSeparator(this) << refreshA << deleteFilesA << Helper::createSeparator(this) << archiveMovieA << unpackA); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addLayout(topWL); @@ -395,3 +399,21 @@ void FSWidget::filterMime(const QString &mime){ mProxy->setFilterRegExp(filter); mProxy->setFilterCaseSensitivity(Qt::CaseInsensitive); } + +void FSWidget::unpack(){ + QModelIndexList selected = mFileView->selectionModel()->selectedRows(); + if(selected.isEmpty()){ + return; + } + for(const QModelIndex &idx : selected){ + QString file = idx.data(FullPathRole).toString(); + QFileInfo fi(file); + QString outDir = QString("-o%1").arg(fi.absolutePath()); + QStringList args = QStringList() << "x" << outDir << file; + int retval = QProcess::execute("7z", args); + if(retval == 0){ + QFile::remove(file); + refresh(); + } + } +} diff --git a/fswidget.h b/fswidget.h index 8becd7a..e0a59c5 100644 --- a/fswidget.h +++ b/fswidget.h @@ -36,6 +36,7 @@ class FSWidget : public QWidget { void advanceDir(int by); int queryCount(QSqlQuery &q, const QString &arg); void filterMime(const QString &mime); + void unpack(); signals: void message(QString msg); -- cgit v1.2.3-70-g09d2