OutilZT/sources/DirParserThread.cpp

104 lines
2.4 KiB
C++

#include "DirParserThread.h"
#include "GlobalDefine.h"
void CDirParserThread::ParseDirectories()
{
if(mRootDir.absolutePath().isEmpty() == true)
{
emit ParsingFinished(0);
return;
}
ParseDir(mRootDir,mKeepData);
emit ParsingFinished(1);
qDebug("Worker thread finished");
}
CDirParserThread::CDirParserThread()
{
mExecThread = true;
}
int CDirParserThread::ParseDir(QDir dir, bool KeepData)
{
mMutex.lockForRead();
bool Run = mExecThread;
mMutex.unlock();
if(Run == false)
return 0;
QStringList LogFilters;
QFileInfoList list;
// QString LogDataDir = mProgramHandle->GetLogDataPath();
LogFilters << mFilter;//"*.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++)
{
//ParseNewLog(list.at(i).filePath(),KeepData);
unsigned int ret;
// CLogElement *NewLog = CTrainLogFileMgr::instance()->OpenTrainLog(list.at(i).filePath(),ret);
// if(ret == RET_OK)
if(mFilter == "*.bin")
{
CLogElement *NewLog = CTrainLogFileMgr::instance()->OpenTrainLog(list.at(i).filePath(),ret);
if(ret == RET_OK)
{
emit NewLogParsed(NewLog);
}
}
else
{
emit NewLogParsed(list.at(i).filePath(),KeepData);
}
}
}
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::KillThread()
{
mMutex.lockForWrite();
mExecThread = false;
mMutex.unlock();
}