Skip to content

Commit

Permalink
implement multifilter export
Browse files Browse the repository at this point in the history
Fix bug related to non existing folder
for output

#363

Signed-off-by: Viktor Kopp <[email protected]>
  • Loading branch information
vifactor committed Feb 10, 2025
1 parent d9d8f87 commit 9896c7d
Showing 1 changed file with 30 additions and 9 deletions.
39 changes: 30 additions & 9 deletions commander/dltfileexporter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include <QFile>
#include <QDebug>
#include <QFileInfo>
#include <QDir>

DltFileExporter::DltFileExporter(const QDltFile& input) : m_input(input) {}

Expand All @@ -23,22 +24,40 @@ void DltFileExporter::setMaxOutputSize(std::size_t sz)
void DltFileExporter::exportMessages(const QString& outputName)
{
if (m_splitByFilter) {
const QFileInfo outputInfo(outputName);
const auto outputDir = outputInfo.absolutePath() + "/" + outputInfo.baseName();
if (!QDir(outputDir).exists() && !QDir().mkpath(outputDir)) {
qDebug() << "Couldn't create output directory: " << outputDir;
return;
}
for (const auto& filterFilepath : m_filters) {
QFileInfo info(filterFilepath);
QDltFilterList filterList;
if(!filterList.LoadFilter(filterFilepath, true)) {
qDebug() << "Export: Open filter file " << filterFilepath << " failed!";
continue;
}

QFile file(outputName + "/" + info.baseName() + ".dlt");
if (!file.open(QIODevice::WriteOnly))
{
qDebug() << "ERROR: Couldn't open output file: " << outputName;
continue;
}
const QFileInfo filterInfo(filterFilepath);

std::size_t fileCounter = 1;
std::size_t bytesCount = m_maxOutputSize.value_or(0);

QFile output;
for (int i = 0; i < m_input.size(); ++i) {
if (m_maxOutputSize && (bytesCount >= *m_maxOutputSize)) {
output.close();

const auto outputName = outputDir + "/" + filterInfo.baseName() + "_" + QString::number(fileCounter) + ".dlt";
output.setFileName(outputName);
if (!output.open(QIODevice::WriteOnly))
{
qDebug() << "ERROR: Couldn't open output file: " << outputName;
return;
}
bytesCount = 0;
++fileCounter;
}

QByteArray buf = m_input.getMsg(i);
if(buf.isEmpty())
{
Expand All @@ -51,8 +70,10 @@ void DltFileExporter::exportMessages(const QString& outputName)
bool isApplied = m_input.applyRegExStringMsg(msg);
if(isApplied) msg.getMsg(buf,true);

if (filterList.isEmpty() || filterList.checkFilter(msg))
file.write(buf);
if (filterList.isEmpty() || filterList.checkFilter(msg)) {
bytesCount += buf.size();
output.write(buf);
}
}
}
} else {
Expand Down

0 comments on commit 9896c7d

Please sign in to comment.