| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- #include "numbermoveproxy.h"
- NumberMoveProxy::NumberMoveProxy(NumberListModel *oldSourceModel, NumberListModel *oldDestModel)
- {
- this->progress = 0;
- this->stop = false;
- this->oldSourceModel = oldSourceModel;
- this->oldDestModel = oldDestModel;
- this->batchSize = 100;
- this->step1Progress = 2;
- this->step2Progress = 98;
- this->threadCreated = false;
- }
- NumberMoveProxy::~NumberMoveProxy()
- {
- qDebug()<<QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")\
- <<"NumberMoveProxy Destroyed.";
- }
- void NumberMoveProxy::setMoveType(NumberMoveType moveType)
- {
- this->moveType = moveType;
- }
- void NumberMoveProxy::setRegexpList(QList<QRegExp> regexpList)
- {
- this->regexpList = regexpList;
- }
- void NumberMoveProxy::setBatchSize(int batchSize)
- {
- this->batchSize = batchSize;
- }
- void NumberMoveProxy::setRange(QString range1, QString range2)
- {
- this->range1 = range1;
- this->range2 = range2;
- }
- void NumberMoveProxy::abort()
- {
- this->stop = true;
- }
- void NumberMoveProxy::onChildTaskFinished(QStringList sourceSegments, QList<QStringList> sourceNumbers,
- QStringList destSegments, QList<QStringList> destNumbers)
- {
- QMutexLocker locker(&mutex);
- this->counter--;
- this->progress++;
- this->sourceSegments.append(sourceSegments);
- this->sourceNumbers.append(sourceNumbers);
- this->destSegments.append(destSegments);
- this->destNumbers.append(destNumbers);
- double s1 = this->progress;
- double s2 = this->groups;
- if(threadCreated)
- emit progressUpdated(step1Progress+step2Progress*s1/s2);
- }
- void NumberMoveProxy::updateProgress()
- {
- QMutexLocker locker(&mutex);
- this->progress++;
- if(counter>0)
- emit progressUpdated(this->progress);
- }
- void NumberMoveProxy::run()
- {
- //oldSourceModel->optimize();
- emit progressMaxUpdated(100);
- if(this->oldSourceModel->getSegments().size()<=20)
- this->batchSize = 1;
- else
- this->batchSize = this->oldSourceModel->getSegments().size()/20;
- int pers = this->batchSize;
- int size = oldSourceModel->getSegments().size();
- groups = SNCCore::getBatchGroups(size,pers);
- if(moveType==MoveByAll){
- groups = 1;
- pers = this->oldSourceModel->getSegments().size() ;
- }
- QList<NumberMove*> movers;
- this->counter = groups;
- for(int j=0;j<groups;j++)
- {
- double s1 = j+1;
- double s2 = groups;
- emit progressUpdated(step1Progress*s1/s2);
- int remainder = size - j * pers;
- int itemsToBatch = qMin(pers, remainder);
- QStringList childSegments = oldSourceModel->getSegments().mid(j * pers,itemsToBatch);
- QList<QStringList> childNumbers;
- for(int k = j * pers; k < j * pers + itemsToBatch; k++ )
- {
- childNumbers.append(oldSourceModel->getNumbers().at(k));
- }
- NumberMove* move = new NumberMove(childSegments,childNumbers,moveType);
- move->setRange(this->range1,this->range2);
- move->setRegex(this->regexpList);
- QObject::connect(move,SIGNAL(childTaskFinished(QStringList,QList<QStringList>,QStringList,QList<QStringList>)),
- this,SLOT(onChildTaskFinished(QStringList,QList<QStringList>,QStringList,QList<QStringList>)));
- movers.append(move);
- move->start();
- }
- threadCreated = true;
- while(!stop)
- {
- msleep(100);
- QMutexLocker locker(&mutex);
- if(counter==0)
- {
- for(int i=0;i<movers.size();i++)
- {
- movers[i]->abort();
- movers[i]->wait();
- delete movers[i];
- }
- movers.clear();
- appendModel();
- emit progressUpdated(100);
- emit numberMoved(this->newSourceModel,this->newDestModel);
- break;
- }
- }
- }
- void NumberMoveProxy::appendModel()
- {
- newSourceModel = new NumberListModel();
- newDestModel = new NumberListModel();
- this->newSourceModel->setNumberList(this->sourceSegments,this->sourceNumbers);
- this->destSegments.append(this->oldDestModel->getSegments());
- this->destNumbers.append(this->oldDestModel->getNumbers());
- this->newDestModel->setNumberList(this->destSegments,this->destNumbers);
- if(moveType==MoveByAll&&oldDestModel->getCount()==0)
- {
- QList<int> orderindex = oldSourceModel->getOrderIndex();
- newDestModel->setOrderIndex(orderindex);
- }
- }
|