From f76b42f192a82f777cf77f3eecfab9ca7e31e396 Mon Sep 17 00:00:00 2001 From: Arno Date: Tue, 8 Jul 2014 08:13:30 +0200 Subject: Display unpack output in Dialog This was a difficult one. Got lost in the Semantics of QThread once again, but just 2 days later it works :) --- unpacker.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 unpacker.cpp (limited to 'unpacker.cpp') 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 + +#include "unpacker.h" + +Unpacker::Unpacker(QObject *parent) : QThread(parent) { + mProgram = "/usr/bin/7z"; +} + +void Unpacker::setCommands(const QList &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("Extracting %1")).arg(archiveN); + emit unpackStarted(extractMsg); + QByteArray output = unpackProc.readAllStandardOutput(); + emit outputRead(output); + unpackProc.waitForFinished(); +} -- cgit v1.2.3-70-g09d2