--- Vago/trunk/Vago/converter.cpp 2013/03/31 19:02:16 771 +++ Vago/trunk/Vago/converter.cpp 2016/09/16 22:51:26 1047 @@ -1,27 +1,55 @@ #include "converter.h" -Converter::Converter(Logger *myLogger, QStringList *myData) +Converter::Converter(QString AppDir, Logger *myLogger, QStringList *myData) { + this->AppDir=AppDir; this->myLogger=myLogger; this->myData=myData; } +#ifdef Q_OS_WIN +Converter::Converter(QString AppDir, Logger *myLogger, QStringList *myData, QWinTaskbarProgress *win7TaskBarProgress) + : Converter(AppDir, myLogger, myData) +{ + this->win7TaskBarProgress = win7TaskBarProgress; +} +#endif + void Converter::run() { - QProcess *myProcess = new QProcess(); + this->processHasKilled=false; + this->myProcess = new QProcess(); QString result = QString(); QString errorMessage = ""; int numErrors=0; + this->myLogger->writeString("Setting working dir to "+this->AppDir+"."); + myProcess->setWorkingDirectory(this->AppDir); // Set working directory (for work with AEI2/Mac OS) + +#ifdef Q_OS_WIN + if(this->win7TaskBarProgress){ + this->win7TaskBarProgress->reset(); + this->win7TaskBarProgress->show(); + } +#endif + if(this->myData->size()!=1){ +#ifdef Q_OS_WIN + if(this->win7TaskBarProgress){ + this->win7TaskBarProgress->setRange(0,this->myData->size()); + } +#endif emit setupPB(this->myData->size()); } else{ +#ifdef Q_OS_WIN + if(this->win7TaskBarProgress){ + this->win7TaskBarProgress->setRange(0,0); + } +#endif emit setupPB(0); //Intermitent bar, we don't have any estimation when the task is done } - //myProcess->setProcessChannelMode(QProcess::MergedChannels); //we want both stdout and stderr - for(int i=0; imyData->size(); i++){ QString commands=this->myData->at(i); @@ -33,9 +61,25 @@ void Converter::run() nextIndex=commands.indexOf(GlobalVars::OniSplitProcSeparator,currentIndex+1); commandToExec=commands.mid(currentIndex,(nextIndex-currentIndex)); - myProcess->start(GlobalVars::OniSplitExeName+" "+commandToExec); - myProcess->waitForFinished(-1); - result=myProcess->readAllStandardError(); + this->myProcess->start(UtilVago::getOniSplitExeAbsolutePath() + " " + commandToExec); + this->myProcess->waitForFinished(-1); + + if(this->processHasKilled){ // If the process has killed there's no need to proceed with reading output or process more commands + +#ifdef Q_OS_WIN + if(this->win7TaskBarProgress){ + this->win7TaskBarProgress->hide(); + } +#endif + + delete this->myProcess; //delete object and make pointer invalid + this->myData->clear(); //clean list + emit conversionAborted(); + + return; + } + + result=this->myProcess->readAllStandardError(); if(!result.isEmpty()){ //if(!result.startsWith("Importing",Qt::CaseSensitive) && !result.startsWith("Importing",Qt::CaseSensitive)){ //case sensitive is faster //catch exception @@ -50,10 +94,22 @@ void Converter::run() currentIndex=nextIndex+1; //update currentIndex +1 for start after the separator } +#ifdef Q_OS_WIN + if(this->win7TaskBarProgress){ + this->win7TaskBarProgress->setValue(win7TaskBarProgress->value()+1); + } +#endif + emit taskDone(); } - delete myProcess; //delete object and make pointer invalid +#ifdef Q_OS_WIN + if(this->win7TaskBarProgress){ + this->win7TaskBarProgress->hide(); + } +#endif + + delete this->myProcess; //delete object and make pointer invalid this->myData->clear(); //clean list //let's cut it a bit, complete error is in log file. @@ -67,3 +123,9 @@ void Converter::run() emit resultConversion(errorMessage,numErrors); } +// Kill the process if requested +void Converter::terminateCurrProcess(){ + this->myProcess->kill(); + this->processHasKilled=true; + this->myLogger->writeString("Received signal to kill current OniSplit operation (user requested)."); +}