#include "mainwindow.h" #include "ui_mainwindow.h" #include "downloadfile.h" #include "tools.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; // Initialization de la class downloadFile::downloadFile() { } //Slot activated when download is cancelled void MainWindow::cancelled(QProcess * process) { process->terminate(); } // launch a rsync processus downloading a file void MainWindow::download() { QString cmd; QStringList param; // Populating array with command and parameters for popen2 cmd = "rsync"; if (this->connexion.bandwidthLimit != 0) { param << "--bwlimit=" + QString::number(this->connexion.bandwidthLimit) + bwUnitChar[this->connexion.bandwidthLimitUnit]; } param << "--port=" + QString::number(this->connexion.port); param << "-aXP"; param << this->downloading.server + "::" + this->downloading.service + "/" + this->downloading.path << this->downloading.savePath + "/"; this->downloading.process = new QProcess(this); connect(this->downloading.process, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(downloadFinished(int, QProcess::ExitStatus))); //connect(this->downloading.process, SIGNAL(errorOccurred(QProcess::ProcessError error)), this, SLOT(downloadProcessError(QProcess::ProcessError error))); //connect(this->downloading.process, SIGNAL(readyReadStandardError()), this, SLOT(downloadProcessStderr())); connect(this->downloading.process, SIGNAL(readyReadStandardOutput()), this, SLOT(readRsyncOutput())); this->downloading.process->start(cmd, param); } void MainWindow::readRsyncOutput() { QString line; bool flag = false; int value; int pos; while(!flag) { line = QString::fromUtf8(this->downloading.process->readLine()); if (line.isEmpty()) { flag = true; break; } pos = line.indexOf("%"); if (pos != -1) { line.resize(pos); pos = line.lastIndexOf(' '); if (pos != -1) { line.remove(0, pos); value = line.toInt(); // sending progress to Main window emit progressSignal(value); } } } } /*void MainWindow::downloadProcessError(QProcess::ProcessError error) { QMessageBox::warning( this, "RsyncUI", downloadProcessErrorString[error].toStdString().c_str() ); }*/ void MainWindow::downloadProcessStderr() { QByteArray errorLine; errorLine = this->downloading.process->readAllStandardError(); QMessageBox::warning( this, "RsyncUI", errorLine ); }