#include "numberbuilderproxy.h" #include "importconsumer.h" #include "importproxy.h" NumberBuilderProxy::NumberBuilderProxy(NumberListModel *oldModel) { this->progress = 0; this->stop =false; this->oldModel = oldModel; } NumberBuilderProxy::~NumberBuilderProxy() { qDebug()<<"NumberBuilderProxy dead"; } void NumberBuilderProxy::setBuildType(NumberBuildType buildType) { this->buildType = buildType; } void NumberBuilderProxy::setList(QStringList list) { this->list = list; } void NumberBuilderProxy::setRegList(QStringList regList) { this->regList = regList; } void NumberBuilderProxy::abort() { this->stop = true; } void NumberBuilderProxy::onChildTaskFinished(QStringList segments,QList numbers) { QMutexLocker locker(&mutex); this->counter--; this->progress++; this->segments.append(segments); this->numbers.append(numbers); if(counter>0) emit progressUpdated(this->progress); } void NumberBuilderProxy::run() { if(this->list.size()<=20) this->batchSize = 1; else this->batchSize = this->list.size()/20; int pers = this->batchSize; int size = this->list.size(); int groups = SNCCore::getBatchGroups(size,pers); emit progressMaxUpdated(groups); this->counter = groups; for(int j=0;jlist.mid(j * pers,itemsToBatch); NumberBuilder *builder = new NumberBuilder(childs,buildType); builder->setRegList(this->regList); QObject::connect(builder,SIGNAL(childTaskFinished(QStringList,QList)), this,SLOT(onChildTaskFinished(QStringList,QList))); QObject::connect(this,SIGNAL(threadAborted()),builder,SLOT(abort())); builder->start(); } while(!stop) { if(counter==0) { emit progressUpdated(this->progress); appendModel(); emit numberBuilt(newModel); break; } } if(stop) emit threadAborted(); deleteLater(); } void NumberBuilderProxy::appendModel() { newModel = new NumberListModel(); segments.append(oldModel->getSegments()); numbers.append(oldModel->getNumbers()); newModel->setNumberList(segments,numbers); }