| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #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<QStringList> 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;j<groups;j++)
- {
- int remainder = size - j * pers;
- int itemsToBatch = qMin(pers, remainder);
- QStringList childs = this->list.mid(j * pers,itemsToBatch);
- NumberBuilder *builder = new NumberBuilder(childs,buildType);
- builder->setRegList(this->regList);
- QObject::connect(builder,SIGNAL(childTaskFinished(QStringList,QList<QStringList>)),
- this,SLOT(onChildTaskFinished(QStringList,QList<QStringList>)));
- 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);
- }
|