Skip to content

Commit db0e345

Browse files
committed
implement multifilter export
Fix bug related to non existing folder for output #363 Signed-off-by: Viktor Kopp <vifactor@gmail.com>
1 parent 913c847 commit db0e345

File tree

1 file changed

+30
-9
lines changed

1 file changed

+30
-9
lines changed

commander/dltfileexporter.cpp

+30-9
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <QFile>
77
#include <QDebug>
88
#include <QFileInfo>
9+
#include <QDir>
910

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

@@ -23,22 +24,40 @@ void DltFileExporter::setMaxOutputSize(std::size_t sz)
2324
void DltFileExporter::exportMessages(const QString& outputName)
2425
{
2526
if (m_splitByFilter) {
27+
const QFileInfo outputInfo(outputName);
28+
const auto outputDir = outputInfo.absolutePath() + "/" + outputInfo.baseName();
29+
if (!QDir(outputDir).exists() && !QDir().mkpath(outputDir)) {
30+
qDebug() << "Couldn't create output directory: " << outputDir;
31+
return;
32+
}
2633
for (const auto& filterFilepath : m_filters) {
27-
QFileInfo info(filterFilepath);
2834
QDltFilterList filterList;
2935
if(!filterList.LoadFilter(filterFilepath, true)) {
3036
qDebug() << "Export: Open filter file " << filterFilepath << " failed!";
3137
continue;
3238
}
3339

34-
QFile file(outputName + "/" + info.baseName() + ".dlt");
35-
if (!file.open(QIODevice::WriteOnly))
36-
{
37-
qDebug() << "ERROR: Couldn't open output file: " << outputName;
38-
continue;
39-
}
40+
const QFileInfo filterInfo(filterFilepath);
41+
42+
std::size_t fileCounter = 1;
43+
std::size_t bytesCount = m_maxOutputSize.value_or(0);
4044

45+
QFile output;
4146
for (int i = 0; i < m_input.size(); ++i) {
47+
if (m_maxOutputSize && (bytesCount >= *m_maxOutputSize)) {
48+
output.close();
49+
50+
const auto outputName = outputDir + "/" + filterInfo.baseName() + "_" + QString::number(fileCounter) + ".dlt";
51+
output.setFileName(outputName);
52+
if (!output.open(QIODevice::WriteOnly))
53+
{
54+
qDebug() << "ERROR: Couldn't open output file: " << outputName;
55+
return;
56+
}
57+
bytesCount = 0;
58+
++fileCounter;
59+
}
60+
4261
QByteArray buf = m_input.getMsg(i);
4362
if(buf.isEmpty())
4463
{
@@ -51,8 +70,10 @@ void DltFileExporter::exportMessages(const QString& outputName)
5170
bool isApplied = m_input.applyRegExStringMsg(msg);
5271
if(isApplied) msg.getMsg(buf,true);
5372

54-
if (filterList.isEmpty() || filterList.checkFilter(msg))
55-
file.write(buf);
73+
if (filterList.isEmpty() || filterList.checkFilter(msg)) {
74+
bytesCount += buf.size();
75+
output.write(buf);
76+
}
5677
}
5778
}
5879
} else {

0 commit comments

Comments
 (0)