summaryrefslogtreecommitdiffstats
path: root/unpacker.cpp
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);
}