diff options
Diffstat (limited to 'unpacker.cpp')
-rw-r--r-- | unpacker.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/unpacker.cpp b/unpacker.cpp new file mode 100644 index 0000000..a6d9496 --- /dev/null +++ b/unpacker.cpp @@ -0,0 +1,44 @@ +/* + 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 <QProcess> + +#include "unpacker.h" + +Unpacker::Unpacker(QObject *parent) : QThread(parent) { + mProgram = "/usr/bin/7z"; +} + +void Unpacker::setCommands(const QList<QStringList> &cmds){ + QMutexLocker l(&mCmdMx); + mCommandQueue = cmds; +} + +void Unpacker::run(){ + QMutexLocker l(&mCmdMx); + while(!mCommandQueue.isEmpty()){ + doUnpack(); + } + emit unpackDone(); +} + +void Unpacker::doUnpack(){ + QStringList job = mCommandQueue.first(); + mCommandQueue.removeFirst(); + QProcess unpackProc; + unpackProc.setProgram(mProgram); + unpackProc.setArguments(job); + unpackProc.start(); + unpackProc.waitForReadyRead(); + QString archiveP = job.last(); + QString archiveN = archiveP.split("/").last(); + QString extractMsg = QString(tr("<b>Extracting</b> %1")).arg(archiveN); + emit unpackStarted(extractMsg); + QByteArray output = unpackProc.readAllStandardOutput(); + emit outputRead(output); + unpackProc.waitForFinished(); +} |