Added initial export writer for both html and json formats.

This commit is contained in:
23rd 2023-09-07 01:36:57 +03:00
parent d4ad5d9f13
commit ca30c35c2b
4 changed files with 216 additions and 0 deletions

View File

@ -37,6 +37,7 @@ class Stats;
enum class Format {
Html,
Json,
HtmlAndJson,
};
class AbstractWriter {

View File

@ -0,0 +1,148 @@
/*
This file is part of Telegram Desktop,
the official desktop application for the Telegram messaging service.
For license and copyright information please follow this link:
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#include "export/output/export_output_html_and_json.h"
#include "export/output/export_output_html.h"
#include "export/output/export_output_json.h"
#include "export/output/export_output_result.h"
namespace Export::Output {
HtmlAndJsonWriter::HtmlAndJsonWriter() {
_writers.push_back(CreateWriter(Format::Html));
_writers.push_back(CreateWriter(Format::Json));
}
Format HtmlAndJsonWriter::format() {
return Format::HtmlAndJson;
}
Result HtmlAndJsonWriter::start(
const Settings &settings,
const Environment &environment,
Stats *stats) {
return invoke([&](WriterPtr w) {
return w->start(settings, environment, stats);
});
}
Result HtmlAndJsonWriter::writePersonal(const Data::PersonalInfo &data) {
return invoke([&](WriterPtr w) {
return w->writePersonal(data);
});
}
Result HtmlAndJsonWriter::writeUserpicsStart(const Data::UserpicsInfo &data) {
return invoke([&](WriterPtr w) {
return w->writeUserpicsStart(data);
});
}
Result HtmlAndJsonWriter::writeUserpicsSlice(const Data::UserpicsSlice &d) {
return invoke([&](WriterPtr w) {
return w->writeUserpicsSlice(d);
});
}
Result HtmlAndJsonWriter::writeUserpicsEnd() {
return invoke([&](WriterPtr w) {
return w->writeUserpicsEnd();
});
}
Result HtmlAndJsonWriter::writeStoriesStart(const Data::StoriesInfo &data) {
return invoke([&](WriterPtr w) {
return w->writeStoriesStart(data);
});
}
Result HtmlAndJsonWriter::writeStoriesSlice(const Data::StoriesSlice &data) {
return invoke([&](WriterPtr w) {
return w->writeStoriesSlice(data);
});
}
Result HtmlAndJsonWriter::writeStoriesEnd() {
return invoke([&](WriterPtr w) {
return w->writeStoriesEnd();
});
}
Result HtmlAndJsonWriter::writeContactsList(const Data::ContactsList &data) {
return invoke([&](WriterPtr w) {
return w->writeContactsList(data);
});
}
Result HtmlAndJsonWriter::writeSessionsList(const Data::SessionsList &data) {
return invoke([&](WriterPtr w) {
return w->writeSessionsList(data);
});
}
Result HtmlAndJsonWriter::writeOtherData(const Data::File &data) {
return invoke([&](WriterPtr w) {
return w->writeOtherData(data);
});
}
Result HtmlAndJsonWriter::writeDialogsStart(const Data::DialogsInfo &data) {
return invoke([&](WriterPtr w) {
return w->writeDialogsStart(data);
});
}
Result HtmlAndJsonWriter::writeDialogStart(const Data::DialogInfo &data) {
return invoke([&](WriterPtr w) {
return w->writeDialogStart(data);
});
}
Result HtmlAndJsonWriter::writeDialogSlice(const Data::MessagesSlice &data) {
return invoke([&](WriterPtr w) {
return w->writeDialogSlice(data);
});
}
Result HtmlAndJsonWriter::writeDialogEnd() {
return invoke([&](WriterPtr w) {
return w->writeDialogEnd();
});
}
Result HtmlAndJsonWriter::writeDialogsEnd() {
return invoke([&](WriterPtr w) {
return w->writeDialogsEnd();
});
}
Result HtmlAndJsonWriter::finish() {
return invoke([&](WriterPtr w) {
return w->finish();
});
}
QString HtmlAndJsonWriter::mainFilePath() {
return _writers.front()->mainFilePath();
}
HtmlAndJsonWriter::~HtmlAndJsonWriter() = default;
Result HtmlAndJsonWriter::invoke(Fn<Result(WriterPtr)> method) const {
auto result = Result(Result::Type::Success, QString());
for (const auto &writer : _writers) {
const auto current = method(writer);
if (!current) {
result = current;
}
}
return result;
}
} // namespace Export::Output

View File

@ -0,0 +1,65 @@
/*
This file is part of Telegram Desktop,
the official desktop application for the Telegram messaging service.
For license and copyright information please follow this link:
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#pragma once
#include "export/output/export_output_abstract.h"
namespace Export::Output {
class HtmlWriter;
class JsonWriter;
struct Result;
class HtmlAndJsonWriter final : public AbstractWriter {
public:
HtmlAndJsonWriter();
Format format() override;
Result start(
const Settings &settings,
const Environment &environment,
Stats *stats) override;
Result writePersonal(const Data::PersonalInfo &data) override;
Result writeUserpicsStart(const Data::UserpicsInfo &data) override;
Result writeUserpicsSlice(const Data::UserpicsSlice &data) override;
Result writeUserpicsEnd() override;
Result writeStoriesStart(const Data::StoriesInfo &data) override;
Result writeStoriesSlice(const Data::StoriesSlice &data) override;
Result writeStoriesEnd() override;
Result writeContactsList(const Data::ContactsList &data) override;
Result writeSessionsList(const Data::SessionsList &data) override;
Result writeOtherData(const Data::File &data) override;
Result writeDialogsStart(const Data::DialogsInfo &data) override;
Result writeDialogStart(const Data::DialogInfo &data) override;
Result writeDialogSlice(const Data::MessagesSlice &data) override;
Result writeDialogEnd() override;
Result writeDialogsEnd() override;
Result finish() override;
QString mainFilePath() override;
~HtmlAndJsonWriter();
private:
using WriterPtr = const std::unique_ptr<AbstractWriter> &;
Result invoke(Fn<Result(WriterPtr)> method) const;
std::vector<std::unique_ptr<AbstractWriter>> _writers;
};
} // namespace Export::Output

View File

@ -26,6 +26,8 @@ PRIVATE
export/output/export_output_file.h
export/output/export_output_html.cpp
export/output/export_output_html.h
export/output/export_output_html_and_json.cpp
export/output/export_output_html_and_json.h
export/output/export_output_json.cpp
export/output/export_output_json.h
export/output/export_output_result.h