blob: 2e8fde4472917bb21aea419a98004ddb723ad618 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
/*
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);
while(!output.isEmpty()){
output = unpackProc.readAllStandardOutput();
emit outputRead(output);
}
unpackProc.waitForFinished();
output = unpackProc.readAllStandardOutput();
emit outputRead(output);
}
|