importproducer.cpp 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #include "importproducer.h"
  2. ImportProducer::ImportProducer(QStringList fetchList, QList<QStringList> *buffer,QMutex *mutex)
  3. {
  4. this->buffer = buffer;
  5. this->fetchList = fetchList;
  6. this->mutex = mutex;
  7. }
  8. ImportProducer::~ImportProducer()
  9. {
  10. qDebug()<<QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss")\
  11. <<"ImportProducer Destroyed.";
  12. }
  13. void ImportProducer::run()
  14. {
  15. if(buildType==NumberFromFileImport || buildType==NumberFromFileExtract)
  16. fetchFromFile();
  17. else if(buildType==NumberFromContent)
  18. fetchFromContent();
  19. emit producerFinished();
  20. }
  21. void ImportProducer::fetchFromFile()
  22. {
  23. int pers = 1000;
  24. for(int i=0;i<fetchList.size();i++)
  25. {
  26. QString fileName = fetchList.at(i);
  27. QFile file(fileName);
  28. if(!file.open(QIODevice::ReadOnly))
  29. {
  30. break;
  31. }
  32. QTextStream in(&file);
  33. QStringList readList;
  34. int current_file_size=0;
  35. while (!in.atEnd())
  36. {
  37. QString line = in.readLine();
  38. current_file_size +=line.size();
  39. readList.append(line);
  40. if(readList.size()%pers==0 || in.atEnd() )
  41. {
  42. emit produced(current_file_size);
  43. current_file_size = 0;
  44. mutex->lock();
  45. buffer->append(readList);
  46. emit bufferAppended();
  47. mutex->unlock();
  48. readList.clear();
  49. }
  50. if(buffer->size()>10)
  51. {
  52. msleep(20);
  53. }
  54. }
  55. file.close();
  56. }
  57. }
  58. void ImportProducer::fetchFromContent()
  59. {
  60. int pers = 1000;
  61. for(int i=0;i<this->fetchList.size();i++)
  62. {
  63. QString content = this->fetchList.at(i);
  64. QTextStream in(&content);
  65. QStringList readList;
  66. int current_file_size=0;
  67. while (!in.atEnd())
  68. {
  69. QString line = in.readLine();
  70. current_file_size +=line.size();
  71. readList.append(line);
  72. if( readList.size()%pers==0 || in.atEnd())
  73. {
  74. emit produced(current_file_size);
  75. current_file_size = 0;
  76. mutex->lock();
  77. buffer->append(readList);
  78. emit bufferAppended();
  79. mutex->unlock();
  80. readList.clear();
  81. }
  82. }
  83. }
  84. }
  85. void ImportProducer::setBuildType(NumberBuildType buildType)
  86. {
  87. this->buildType = buildType;
  88. }