|
- #include "DirParserThread.h"
- #include "ZTData.h"
- #include "GlobalDefine.h"
- #include "QString"
- #include "QStringList"
- #include <QDate>
-
-
-
- void CDirParserThread::ParseDirectories()
- {
- // if(mRootDir.absolutePath().isEmpty() == true)
- // {
- // emit ParsingFinished(0);
- // return;
- // }
-
- // ParseDir(mRootDir,mKeepData);
- mMutex.lockForWrite();
- mExecThread = true;
- mMutex.unlock();
- GatherReportData(mReportSettings,mReportFilters);
-
- // emit ParsingFinished(1);
- qDebug("Worker thread finished");
-
-
- }
-
- CDirParserThread::CDirParserThread()
- {
- mExecThread = true;
- //Allocate a directory list for each station.
- for(int i = 0; i < NB_ZT_ID; i++)
- {
- mReportDirectoriesList.append(QStringList());
- }
- }
-
- void CDirParserThread::GatherReportData(CReportProgramSettingsData ReportSettings, CReportConfigData ReportFilters)
- {
- //First, get a list of the filtered directories
- for(int i = 0; i < NB_ZT_ID; i++)
- {
- mReportDirectoriesList[i].clear();
- }
-
- for(int i = 0; i < ReportSettings.mDataSourceDirectoryPaths.size(); i++)
- {
- QString BaseDir(ReportSettings.mDataSourceDirectoryPaths.at(i));
- if(ReportFilters.mReportStationAngrignon == true)
- {
- QDir AngDir(QString("%1/ANG/").arg(BaseDir));
- mReportDirectoriesList[ANGRIGNON_ZT_ID].append(FilterDirectories(AngDir,ReportFilters.mReportStartDate,ReportFilters.mReportEndDate));
- }
- if(ReportFilters.mReportStationBeaugrand == true)
- {
- QDir Dir(QString("%1/HBGR/").arg(BaseDir));
- mReportDirectoriesList[HONORE_BEAUGRAND_ZT_ID].append(FilterDirectories(Dir,ReportFilters.mReportStartDate,ReportFilters.mReportEndDate));
- }
- if(ReportFilters.mReportStationVertu == true)
- {
- QDir Dir(QString("%1/CVRT/").arg(BaseDir));
- mReportDirectoriesList[COTE_VERTU_ZT_ID].append(FilterDirectories(Dir,ReportFilters.mReportStartDate,ReportFilters.mReportEndDate));
- }
- if(ReportFilters.mReportStationBourassa == true)
- {
- QDir Dir(QString("%1/HBOU/").arg(BaseDir));
- mReportDirectoriesList[HENRI_BOURASSA_ZT_ID].append(FilterDirectories(Dir,ReportFilters.mReportStartDate,ReportFilters.mReportEndDate));
- }
- if(ReportFilters.mReportStationMontmorency == true)
- {
- QDir Dir(QString("%1/MMO/").arg(BaseDir));
- mReportDirectoriesList[MONTMORENCY_ZT_ID].append(FilterDirectories(Dir,ReportFilters.mReportStartDate,ReportFilters.mReportEndDate));
- }
- if(ReportFilters.mReportStationBerri == true)
- {
- QDir Dir(QString("%1/BUQ4/").arg(BaseDir));
- mReportDirectoriesList[BERRI_UQAM_ZT_ID].append(FilterDirectories(Dir,ReportFilters.mReportStartDate,ReportFilters.mReportEndDate));
- }
- if(ReportFilters.mReportStationLongueuil == true)
- {
- QDir Dir(QString("%1/LONG/").arg(BaseDir));
- mReportDirectoriesList[LONGUEUIL_ZT_ID].append(FilterDirectories(Dir,ReportFilters.mReportStartDate,ReportFilters.mReportEndDate));
- }
- if(ReportFilters.mReportStationStMichel == true)
- {
- QDir Dir(QString("%1/SMIC/").arg(BaseDir));
- mReportDirectoriesList[SAINT_MICHEL_ZT_ID].append(FilterDirectories(Dir,ReportFilters.mReportStartDate,ReportFilters.mReportEndDate));
- }
- if(ReportFilters.mReportStationSnowdon == true)
- {
- QDir Dir(QString("%1/SNW5/").arg(BaseDir));
- mReportDirectoriesList[SNOWDON_ZT_ID].append(FilterDirectories(Dir,ReportFilters.mReportStartDate,ReportFilters.mReportEndDate));
- }
- }
-
- //Check if we found any directory...
- bool found = false;
- for(int i = 0; i < mReportDirectoriesList.size(); i++)
- {
- if(mReportDirectoriesList.at(i).isEmpty() == false)
- {
- found = true;
- break;
- }
- }
- if(found == false)
- {
- emit ReportProgressStatus("Aucun log correspondant aux filtres n'a été trouvé");
- emit ParsingFinished(0);
- return;
- }
-
- //Now, parse each directory and collect data from ZT files.
- for(int station = 0; station < mReportDirectoriesList.size(); station++)
- {
- if(mReportDirectoriesList[station].isEmpty() == false)
- {
-
- QList<CLogElement*> *Container = mReportDataContainer->at(station);
- for(int dir =0; dir < mReportDirectoriesList[station].size(); dir++)
- {
- mMutex.lockForRead();
- bool Run = mExecThread;
- mMutex.unlock();
-
- if(Run == false)
- {
- emit ThreadAborted();
- return;
- }
- emit ReportProgressStatus(QString("Analyse des fichiers du répertoire %1").arg(mReportDirectoriesList[station].at(dir)));
- ParseDir(QDir(mReportDirectoriesList[station].at(dir)),Container);
- }
- }
- }
-
- emit ParsingFinished(1);
- }
-
- QStringList CDirParserThread::FilterDirectories(QDir BaseDir, QDate StartDate, QDate EndDate)
- {
- QStringList OutputList;
- OutputList.clear();
-
- BaseDir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
- BaseDir.setSorting(QDir::Name);
- //QStringList DirList = BaseDir.entryList();
- QFileInfoList DirList = BaseDir.entryInfoList();
- for(int i = 0; i < DirList.size(); i++)
- {
- QString curDir = DirList.at(i).absoluteFilePath();
- // QStringList DirNameChunks = curDir.split(BaseDir.separator());
- // if(!DirNameChunks.isEmpty())
- {
- //QDate DirDate;
- QString DirDateString = DirList.at(i).baseName().right(8);
- QDate DirDate = QDate::fromString(DirDateString,"yyyyMMdd");
-
- //Check if the directory is in the date range
- if(DirDate <= EndDate && DirDate >= StartDate)
- {
- OutputList.append(curDir);
- }
-
- }
- }
-
- return OutputList;
- }
-
- int CDirParserThread::ParseDir(QDir dir, QList<CLogElement *> *Container)
- {
- mMutex.lockForRead();
- bool Run = mExecThread;
- mMutex.unlock();
- if(Run == false)
- {
- emit ThreadAborted();
- return 0;
- }
-
- QStringList LogFilters;
- QFileInfoList list;
- // QString LogDataDir = mProgramHandle->GetLogDataPath();
- LogFilters << "*.bin";
-
- //Load files in base directory
- QDir LogDir(dir);
- LogDir.setFilter(QDir::Files | QDir::NoDotAndDotDot);
- LogDir.setNameFilters(LogFilters);
- LogDir.setSorting(QDir::Name);
- list = LogDir.entryInfoList();
- if(list.size() != 0)
- {
- //Extract data for each passage
- for(int i = 0; i < list.size(); i++)
- {
- mMutex.lockForRead();
- bool Run = mExecThread;
- mMutex.unlock();
-
- if(Run == false)
- {
- emit ThreadAborted();
- return 0;
- }
- //ParseNewLog(list.at(i).filePath(),KeepData);
- unsigned int ret;
-
- // emit ReportProgressStatus(QString("Analyse du fichiers %1").arg(list.at(i).fileName()));
- CLogElement *NewLog = CTrainLogFileMgr::instance()->OpenTrainLog(list.at(i).filePath(),ret);
- if(ret == RET_OK)
- {
- emit NewLogParsed(NewLog);
- mMutex.lockForWrite();
- Container->append(NewLog);
- mMutex.unlock();
- }
-
- }
- }
- else
- {
- emit EmptyDirParsed();
- }
-
-
- // //Check for subdirectories
- // QDir SubDirectories(dir);
-
- // SubDirectories.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
-
- // QFileInfoList SubDirList = SubDirectories.entryInfoList();
- // for(int i = 0; i < SubDirList.size(); i++)
- // {
- // ParseDir(QDir(SubDirList.at(i).absoluteFilePath()), KeepData);
- // }
-
- return 1;
- }
-
- //void CDirParserThread::SetParsingInfo(QDir dir, QString Filter, bool KeepData)
- //{
- // //qDebug("DirParserThread parsing info: dir: %s, Filter: %s",dir.dirName().toAscii().data(),Filter.toAscii().data());
- // mRootDir = dir;
- // mKeepData = KeepData;
- // mFilter = Filter;
- //}
- void CDirParserThread::SetParsingInfo(CReportProgramSettingsData ReportSettings, CReportConfigData ReportFilters, QList<QList<CLogElement *> *> *ReportDataContainer)
- {
- mMutex.lockForWrite();
- mReportSettings = ReportSettings;
- mReportFilters = ReportFilters;
- mReportDataContainer = ReportDataContainer;
- mMutex.unlock();
- }
- void CDirParserThread::KillThread()
- {
- mMutex.lockForWrite();
- mExecThread = false;
- mMutex.unlock();
- }
|