Move export descriptions to lang.

This commit is contained in:
John Preston 2018-06-24 03:06:11 +01:00
parent b9250edb33
commit 2522e66969
15 changed files with 130 additions and 132 deletions

View File

@ -1715,6 +1715,13 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_export_suggest_title" = "Data export ready"; "lng_export_suggest_title" = "Data export ready";
"lng_export_suggest_text" = "You can now download the data you requested. Start exporting data?"; "lng_export_suggest_text" = "You can now download the data you requested. Start exporting data?";
"lng_export_suggest_cancel" = "Not now"; "lng_export_suggest_cancel" = "Not now";
"lng_export_about_telegram" = "Here is all the data you requested. Remember: we dont use your data for ad targeting, we dont sell it to others, and were not part of any “family of companies.”\n\nTelegram only keeps the information it needs to function as a feature-rich cloud service for example, your cloud chats so that you can access them from any devices without using third-party backups, or your contacts so that you can rely on your existing social graph when messaging people on Telegram.\n\nCheck out Settings > Privacy & Security on Telegram's mobile apps for relevant settings.";
"lng_export_about_contacts" = "If you allow access, your contacts are continuously synced with Telegram. Thanks to this, you can easily switch to Telegram without losing your existing social graph and connect with friends across all your devices. We use data about your contacts to let you know when they join Telegram. We also use it to make sure that you see the names you have in your phone book instead of the screen names people choose for themselves.\n\nYou can disable contacts syncing or delete your stored contacts in Settings > Privacy & Security on Telegram's mobile apps.";
"lng_export_about_frequent" = "This rating shows which people you are likelier to message frequently. Telegram uses this data to populate the 'People' box at the top of the Search section. The rating is also calculated for inline bots so that the app can suggest you the bots you are most likely to use in the attachment menu (or when you start a new message with \"@\").\n\nTo delete this data, go to Settings > Privacy & Security and disable 'Suggest Frequent Contacts' (requires Telegram for iOS v.4.8.3 or Telegram for Android v.4.8.10 or higher). See this page for more information: https://telegram.org/faq_export";
"lng_export_about_sessions" = "We store this to display your connected devices in Settings > Privacy & Security > Active Sessions. Terminating a session removes this data from Telegram servers.";
"lng_export_about_web_sessions" = "We store this to display you the websites where you used Telegram to log in in Settings > Privacy & Security > Active Sessions. Disconnecting a website removes this data from Telegram servers.";
"lng_export_about_chats" = "This page lists all chats from this export and where to look for their data.";
"lng_export_about_left_chats" = "This page lists all supergroups and channels from this export that you've left and where to look for their data.";
// Wnd specific // Wnd specific

View File

@ -1,85 +0,0 @@
/*
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/data/export_data_types.h"
namespace Export {
namespace Data {
inline Utf8String AboutTelegram() {
return "Here is all the data you requested. "
"Remember: we don\xE2\x80\x99""t use your data for ad targeting, "
"we don\xE2\x80\x99""t sell it to others, "
"and we\xE2\x80\x99""re not part of any "
"\xE2\x80\x9C""family of companies.\xE2\x80\x9D\n\n"
"Telegram only keeps the information it needs to function "
"as a feature-rich cloud service \xE2\x80\x93 for example, "
"your cloud chats so that you can access them "
"from any devices without using third-party backups, "
"or your contacts so that you can rely "
"on your existing social graph "
"when messaging people on Telegram.\n\n"
"Check out Settings > Privacy & Security "
"on Telegram's mobile apps for relevant settings.";
}
inline Utf8String AboutContacts() {
return "If you allow access, your contacts are continuously synced "
"with Telegram. Thanks to this, you can easily switch to Telegram "
"without losing your existing social graph "
"\xE2\x80\x93 and connect with friends across all your devices. "
"We use data about your contacts to let you know "
"when they join Telegram. We also use it to make sure "
"that you see the names you have in your phone book "
"instead of the screen names people choose for themselves.\n\n"
"You can disable contacts syncing or delete your stored contacts "
"in Settings > Privacy & Security on Telegram's mobile apps.";
}
inline Utf8String AboutFrequent() {
return "This rating shows which people "
"you are likelier to message frequently. "
"Telegram uses this data to populate the 'People' box at the top "
"of the Search section. The rating is also calculated "
"for inline bots so that the app can suggest you "
"the bots you are most likely to use in the attachment menu "
"(or when you start a new message with \"@\").\n\n"
"To delete this data, go to Settings > Privacy & Security and "
"disable 'Suggest Frequent Contacts' "
"(requires Telegram for iOS v.4.8.3 "
"or Telegram for Android v.4.8.10 or higher). "
"See this page for more information: "
"https://telegram.org/faq_export";
}
inline Utf8String AboutSessions() {
return "We store this to display your connected devices "
"in Settings > Privacy & Security > Active Sessions. "
"Terminating a session removes this data from Telegram servers.";
}
inline Utf8String AboutWebSessions() {
return "We store this to display you the websites "
"where you used Telegram to log in "
"in Settings > Privacy & Security > Active Sessions. "
"Disconnecting a website removes this data from Telegram servers.";
}
inline Utf8String AboutChats() {
return "This page lists all chats from this export "
"and where to look for their data.";
}
inline Utf8String AboutLeftChats() {
return "This page lists all supergroups and channels from this export "
"that you've left and where to look for their data.";
}
} // namespace Data
} // namespace Export

View File

@ -32,7 +32,9 @@ public:
//void cancelUnconfirmedPassword(); //void cancelUnconfirmedPassword();
// Processing step. // Processing step.
void startExport(const Settings &settings); void startExport(
const Settings &settings,
const Environment &environment);
void cancelExportFast(); void cancelExportFast();
private: private:
@ -51,6 +53,7 @@ private:
void fillSubstepsInSteps(const ApiWrap::StartInfo &info); void fillSubstepsInSteps(const ApiWrap::StartInfo &info);
void exportNext(); void exportNext();
void initialize(); void initialize();
void initialized(const ApiWrap::StartInfo &info);
void collectLeftChannels(); void collectLeftChannels();
void collectDialogsList(); void collectDialogsList();
void exportPersonalInfo(); void exportPersonalInfo();
@ -92,6 +95,7 @@ private:
ApiWrap _api; ApiWrap _api;
Settings _settings; Settings _settings;
Environment _environment;
Data::DialogsInfo _leftChannelsInfo; Data::DialogsInfo _leftChannelsInfo;
int _leftChannelIndex = -1; int _leftChannelIndex = -1;
@ -219,11 +223,14 @@ bool Controller::ioCatchError(Output::Result result) {
// //
//} //}
void Controller::startExport(const Settings &settings) { void Controller::startExport(
const Settings &settings,
const Environment &environment) {
if (!_settings.path.isEmpty()) { if (!_settings.path.isEmpty()) {
return; return;
} }
_settings = base::duplicate(settings); _settings = base::duplicate(settings);
_environment = environment;
_settings.path = Output::NormalizePath(_settings.path); _settings.path = Output::NormalizePath(_settings.path);
_writer = Output::CreateWriter(_settings.format); _writer = Output::CreateWriter(_settings.format);
@ -339,14 +346,18 @@ void Controller::exportNext() {
void Controller::initialize() { void Controller::initialize() {
setState(stateInitializing()); setState(stateInitializing());
_api.startExport(_settings, &_stats, [=](ApiWrap::StartInfo info) { _api.startExport(_settings, &_stats, [=](ApiWrap::StartInfo info) {
if (ioCatchError(_writer->start(_settings, &_stats))) { initialized(info);
return;
}
fillSubstepsInSteps(info);
exportNext();
}); });
} }
void Controller::initialized(const ApiWrap::StartInfo &info) {
if (ioCatchError(_writer->start(_settings, _environment, &_stats))) {
return;
}
fillSubstepsInSteps(info);
exportNext();
}
void Controller::collectLeftChannels() { void Controller::collectLeftChannels() {
setState(stateLeftChannelsList(0)); setState(stateLeftChannelsList(0));
_api.requestLeftChannelsList([=](int count) { _api.requestLeftChannelsList([=](int count) {
@ -707,11 +718,13 @@ rpl::producer<State> ControllerWrap::state() const {
// }); // });
//} //}
void ControllerWrap::startExport(const Settings &settings) { void ControllerWrap::startExport(
const Settings &settings,
const Environment &environment) {
LOG(("Export Info: Started export to '%1'.").arg(settings.path)); LOG(("Export Info: Started export to '%1'.").arg(settings.path));
_wrapped.with([=](Controller &controller) { _wrapped.with([=](Controller &controller) {
controller.startExport(settings); controller.startExport(settings, environment);
}); });
} }
@ -727,6 +740,8 @@ rpl::lifetime &ControllerWrap::lifetime() {
return _lifetime; return _lifetime;
} }
ControllerWrap::~ControllerWrap() = default; ControllerWrap::~ControllerWrap() {
LOG(("Export Info: Controller destroyed."));
}
} // namespace Export } // namespace Export

View File

@ -15,6 +15,7 @@ namespace Export {
class Controller; class Controller;
struct Settings; struct Settings;
struct Environment;
struct PasswordCheckState { struct PasswordCheckState {
QString hint; QString hint;
@ -117,7 +118,9 @@ public:
//void cancelUnconfirmedPassword(); //void cancelUnconfirmedPassword();
// Processing step. // Processing step.
void startExport(const Settings &settings); void startExport(
const Settings &settings,
const Environment &environment);
void cancelExportFast(); void cancelExportFast();
rpl::lifetime &lifetime(); rpl::lifetime &lifetime();

View File

@ -70,7 +70,6 @@ struct Settings {
friend inline constexpr auto is_flag_type(Type) { return true; }; friend inline constexpr auto is_flag_type(Type) { return true; };
QString path; QString path;
QString internalLinksDomain;
Output::Format format = Output::Format(); Output::Format format = Output::Format();
Types types = DefaultTypes(); Types types = DefaultTypes();
@ -95,4 +94,15 @@ struct Settings {
}; };
struct Environment {
QString internalLinksDomain;
QByteArray aboutTelegram;
QByteArray aboutContacts;
QByteArray aboutFrequent;
QByteArray aboutSessions;
QByteArray aboutWebSessions;
QByteArray aboutChats;
QByteArray aboutLeftChats;
};
} // namespace Export } // namespace Export

View File

@ -59,11 +59,20 @@ std::unique_ptr<AbstractWriter> CreateWriter(Format format) {
Stats AbstractWriter::produceTestExample(const QString &path) { Stats AbstractWriter::produceTestExample(const QString &path) {
auto result = Stats(); auto result = Stats();
const auto folder = QDir(path).absolutePath(); const auto folder = QDir(path).absolutePath();
auto environment = Environment();
environment.internalLinksDomain = "https://t.me/";
environment.aboutTelegram = "About Telegram";
environment.aboutContacts = "About contacts";
environment.aboutFrequent = "About frequent";
environment.aboutSessions = "About sessions";
environment.aboutWebSessions = "About web sessions";
environment.aboutChats = "About chats";
environment.aboutLeftChats = "About left chats";
auto settings = Settings(); auto settings = Settings();
settings.format = format(); settings.format = format();
settings.path = (folder.endsWith('/') ? folder : (folder + '/')) settings.path = (folder.endsWith('/') ? folder : (folder + '/'))
+ "ExportExample/"; + "ExportExample/";
settings.internalLinksDomain = "https://t.me/";
settings.types = Settings::Type::AllMask; settings.types = Settings::Type::AllMask;
settings.fullChats = Settings::Type::AllMask settings.fullChats = Settings::Type::AllMask
& ~(Settings::Type::PublicChannels | Settings::Type::PublicGroups); & ~(Settings::Type::PublicChannels | Settings::Type::PublicGroups);
@ -74,7 +83,7 @@ Stats AbstractWriter::produceTestExample(const QString &path) {
Assert(result.isSuccess()); Assert(result.isSuccess());
}; };
check(start(settings, &result)); check(start(settings, environment, &result));
const auto counter = [&] { const auto counter = [&] {
static auto GlobalCounter = 0; static auto GlobalCounter = 0;

View File

@ -23,6 +23,7 @@ struct File;
} // namespace Data } // namespace Data
struct Settings; struct Settings;
struct Environment;
namespace Output { namespace Output {
@ -44,6 +45,7 @@ public:
[[nodiscard]] virtual Result start( [[nodiscard]] virtual Result start(
const Settings &settings, const Settings &settings,
const Environment &environment,
Stats *stats) = 0; Stats *stats) = 0;
[[nodiscard]] virtual Result writePersonal( [[nodiscard]] virtual Result writePersonal(

View File

@ -9,7 +9,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "export/output/export_output_result.h" #include "export/output/export_output_result.h"
#include "export/data/export_data_types.h" #include "export/data/export_data_types.h"
#include "export/data/export_data_about.h"
#include "core/utils.h" #include "core/utils.h"
#include <QtCore/QFile> #include <QtCore/QFile>
@ -681,10 +680,14 @@ HtmlWriter::Wrap::~Wrap() {
HtmlWriter::HtmlWriter() = default; HtmlWriter::HtmlWriter() = default;
Result HtmlWriter::start(const Settings &settings, Stats *stats) { Result HtmlWriter::start(
const Settings &settings,
const Environment &environment,
Stats *stats) {
Expects(settings.path.endsWith('/')); Expects(settings.path.endsWith('/'));
_settings = base::duplicate(settings); _settings = base::duplicate(settings);
_environment = environment;
_stats = stats; _stats = stats;
_summary = fileWithRelativePath(mainFileRelativePath()); _summary = fileWithRelativePath(mainFileRelativePath());
@ -699,7 +702,7 @@ Result HtmlWriter::start(const Settings &settings, Stats *stats) {
return result; return result;
} }
return _summary->writeBlock( return _summary->writeBlock(
MakeLinks(SerializeString(Data::AboutTelegram())) MakeLinks(SerializeString(_environment.aboutTelegram))
+ kLineBreak + kLineBreak
+ kLineBreak); + kLineBreak);
} }
@ -833,7 +836,7 @@ Result HtmlWriter::writeSavedContacts(const Data::ContactsList &data) {
})); }));
} }
} }
const auto full = MakeLinks(SerializeString(Data::AboutContacts())) const auto full = MakeLinks(SerializeString(_environment.aboutContacts))
+ kLineBreak + kLineBreak
+ kLineBreak + kLineBreak
+ JoinList(kLineBreak, list); + JoinList(kLineBreak, list);
@ -922,7 +925,7 @@ Result HtmlWriter::writeFrequentContacts(const Data::ContactsList &data) {
writeList(data.correspondents, "People"); writeList(data.correspondents, "People");
writeList(data.inlineBots, "Inline bots"); writeList(data.inlineBots, "Inline bots");
writeList(data.phoneCalls, "Calls"); writeList(data.phoneCalls, "Calls");
const auto full = MakeLinks(SerializeString(Data::AboutFrequent())) const auto full = MakeLinks(SerializeString(_environment.aboutFrequent))
+ kLineBreak + kLineBreak
+ kLineBreak + kLineBreak
+ JoinList(kLineBreak, list); + JoinList(kLineBreak, list);
@ -988,7 +991,7 @@ Result HtmlWriter::writeSessions(const Data::SessionsList &data) {
{ "Created", Data::FormatDateTime(session.created) }, { "Created", Data::FormatDateTime(session.created) },
})); }));
} }
const auto full = MakeLinks(SerializeString(Data::AboutSessions())) const auto full = MakeLinks(SerializeString(_environment.aboutSessions))
+ kLineBreak + kLineBreak
+ kLineBreak + kLineBreak
+ JoinList(kLineBreak, list); + JoinList(kLineBreak, list);
@ -1046,7 +1049,8 @@ Result HtmlWriter::writeWebSessions(const Data::SessionsList &data) {
}, },
})); }));
} }
const auto full = MakeLinks(SerializeString(Data::AboutWebSessions())) const auto full = MakeLinks(
SerializeString(_environment.aboutWebSessions))
+ kLineBreak + kLineBreak
+ kLineBreak + kLineBreak
+ JoinList(kLineBreak, list); + JoinList(kLineBreak, list);
@ -1080,7 +1084,7 @@ Result HtmlWriter::writeDialogsStart(const Data::DialogsInfo &data) {
return writeChatsStart( return writeChatsStart(
data, data,
"Chats", "Chats",
Data::AboutChats(), _environment.aboutChats,
"lists/chats.html"); "lists/chats.html");
} }
@ -1104,7 +1108,7 @@ Result HtmlWriter::writeLeftChannelsStart(const Data::DialogsInfo &data) {
return writeChatsStart( return writeChatsStart(
data, data,
"Left chats", "Left chats",
Data::AboutLeftChats(), _environment.aboutLeftChats,
"lists/left_chats.html"); "lists/left_chats.html");
} }
@ -1178,7 +1182,7 @@ Result HtmlWriter::writeChatSlice(const Data::MessagesSlice &data) {
[&](QString path) { return _chat->relativePath(path); }, [&](QString path) { return _chat->relativePath(path); },
message, message,
data.peers, data.peers,
_settings.internalLinksDomain)); _environment.internalLinksDomain));
} }
const auto full = _chat->empty() const auto full = _chat->empty()
? JoinList(kLineBreak, list) ? JoinList(kLineBreak, list)

View File

@ -23,7 +23,10 @@ public:
return Format::Html; return Format::Html;
} }
Result start(const Settings &settings, Stats *stats) override; Result start(
const Settings &settings,
const Environment &environment,
Stats *stats) override;
Result writePersonal(const Data::PersonalInfo &data) override; Result writePersonal(const Data::PersonalInfo &data) override;
@ -83,6 +86,7 @@ private:
Result writeChatsEnd(); Result writeChatsEnd();
Settings _settings; Settings _settings;
Environment _environment;
Stats *_stats = nullptr; Stats *_stats = nullptr;
std::unique_ptr<Wrap> _summary; std::unique_ptr<Wrap> _summary;

View File

@ -9,7 +9,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "export/output/export_output_result.h" #include "export/output/export_output_result.h"
#include "export/data/export_data_types.h" #include "export/data/export_data_types.h"
#include "export/data/export_data_about.h"
#include "core/utils.h" #include "core/utils.h"
#include <QtCore/QDateTime> #include <QtCore/QDateTime>
@ -572,11 +571,15 @@ QByteArray SerializeMessage(
} // namespace } // namespace
Result JsonWriter::start(const Settings &settings, Stats *stats) { Result JsonWriter::start(
const Settings &settings,
const Environment &environment,
Stats *stats) {
Expects(_output == nullptr); Expects(_output == nullptr);
Expects(settings.path.endsWith('/')); Expects(settings.path.endsWith('/'));
_settings = base::duplicate(settings); _settings = base::duplicate(settings);
_environment = environment;
_stats = stats; _stats = stats;
_output = fileWithRelativePath(mainFileRelativePath()); _output = fileWithRelativePath(mainFileRelativePath());
@ -713,7 +716,7 @@ Result JsonWriter::writeSavedContacts(const Data::ContactsList &data) {
auto block = prepareObjectItemStart("contacts"); auto block = prepareObjectItemStart("contacts");
block.append(pushNesting(Context::kObject)); block.append(pushNesting(Context::kObject));
block.append(prepareObjectItemStart("about")); block.append(prepareObjectItemStart("about"));
block.append(SerializeString(Data::AboutContacts())); block.append(SerializeString(_environment.aboutContacts));
block.append(prepareObjectItemStart("list")); block.append(prepareObjectItemStart("list"));
block.append(pushNesting(Context::kArray)); block.append(pushNesting(Context::kArray));
for (const auto index : Data::SortedContactsIndices(data)) { for (const auto index : Data::SortedContactsIndices(data)) {
@ -749,7 +752,7 @@ Result JsonWriter::writeFrequentContacts(const Data::ContactsList &data) {
auto block = prepareObjectItemStart("frequent_contacts"); auto block = prepareObjectItemStart("frequent_contacts");
block.append(pushNesting(Context::kObject)); block.append(pushNesting(Context::kObject));
block.append(prepareObjectItemStart("about")); block.append(prepareObjectItemStart("about"));
block.append(SerializeString(Data::AboutFrequent())); block.append(SerializeString(_environment.aboutFrequent));
block.append(prepareObjectItemStart("list")); block.append(prepareObjectItemStart("list"));
block.append(pushNesting(Context::kArray)); block.append(pushNesting(Context::kArray));
const auto writeList = [&]( const auto writeList = [&](
@ -874,7 +877,7 @@ Result JsonWriter::writeSessions(const Data::SessionsList &data) {
auto block = prepareObjectItemStart("sessions"); auto block = prepareObjectItemStart("sessions");
block.append(pushNesting(Context::kObject)); block.append(pushNesting(Context::kObject));
block.append(prepareObjectItemStart("about")); block.append(prepareObjectItemStart("about"));
block.append(SerializeString(Data::AboutSessions())); block.append(SerializeString(_environment.aboutSessions));
block.append(prepareObjectItemStart("list")); block.append(prepareObjectItemStart("list"));
block.append(pushNesting(Context::kArray)); block.append(pushNesting(Context::kArray));
for (const auto &session : data.list) { for (const auto &session : data.list) {
@ -908,7 +911,7 @@ Result JsonWriter::writeWebSessions(const Data::SessionsList &data) {
auto block = prepareObjectItemStart("web_sessions"); auto block = prepareObjectItemStart("web_sessions");
block.append(pushNesting(Context::kObject)); block.append(pushNesting(Context::kObject));
block.append(prepareObjectItemStart("about")); block.append(prepareObjectItemStart("about"));
block.append(SerializeString(Data::AboutWebSessions())); block.append(SerializeString(_environment.aboutWebSessions));
block.append(prepareObjectItemStart("list")); block.append(prepareObjectItemStart("list"));
block.append(pushNesting(Context::kArray)); block.append(pushNesting(Context::kArray));
for (const auto &session : data.webList) { for (const auto &session : data.webList) {
@ -1018,7 +1021,7 @@ Result JsonWriter::writeChatSlice(const Data::MessagesSlice &data) {
_context, _context,
message, message,
data.peers, data.peers,
_settings.internalLinksDomain)); _environment.internalLinksDomain));
} }
return _output->writeBlock(block); return _output->writeBlock(block);
} }

View File

@ -33,7 +33,10 @@ public:
return Format::Json; return Format::Json;
} }
Result start(const Settings &settings, Stats *stats) override; Result start(
const Settings &settings,
const Environment &environment,
Stats *stats) override;
Result writePersonal(const Data::PersonalInfo &data) override; Result writePersonal(const Data::PersonalInfo &data) override;
@ -90,7 +93,9 @@ private:
Result writeChatsEnd(); Result writeChatsEnd();
Settings _settings; Settings _settings;
Environment _environment;
Stats *_stats = nullptr; Stats *_stats = nullptr;
Context _context; Context _context;
bool _currentNestingHadItem = false; bool _currentNestingHadItem = false;

View File

@ -9,7 +9,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "export/output/export_output_result.h" #include "export/output/export_output_result.h"
#include "export/data/export_data_types.h" #include "export/data/export_data_types.h"
#include "export/data/export_data_about.h"
#include "core/utils.h" #include "core/utils.h"
#include <QtCore/QFile> #include <QtCore/QFile>
@ -442,13 +441,17 @@ QByteArray SerializeMessage(
} // namespace } // namespace
Result TextWriter::start(const Settings &settings, Stats *stats) { Result TextWriter::start(
const Settings &settings,
const Environment &environment,
Stats *stats) {
Expects(settings.path.endsWith('/')); Expects(settings.path.endsWith('/'));
_settings = base::duplicate(settings); _settings = base::duplicate(settings);
_environment = environment;
_stats = stats; _stats = stats;
_summary = fileWithRelativePath(mainFileRelativePath()); _summary = fileWithRelativePath(mainFileRelativePath());
return _summary->writeBlock(Data::AboutTelegram() return _summary->writeBlock(_environment.aboutTelegram
+ kLineBreak + kLineBreak
+ kLineBreak); + kLineBreak);
} }
@ -566,7 +569,7 @@ Result TextWriter::writeSavedContacts(const Data::ContactsList &data) {
})); }));
} }
} }
const auto full = Data::AboutContacts() const auto full = _environment.aboutContacts
+ kLineBreak + kLineBreak
+ kLineBreak + kLineBreak
+ JoinList(kLineBreak, list); + JoinList(kLineBreak, list);
@ -645,7 +648,7 @@ Result TextWriter::writeFrequentContacts(const Data::ContactsList &data) {
writeList(data.correspondents, "People"); writeList(data.correspondents, "People");
writeList(data.inlineBots, "Inline bots"); writeList(data.inlineBots, "Inline bots");
writeList(data.phoneCalls, "Calls"); writeList(data.phoneCalls, "Calls");
const auto full = Data::AboutFrequent() const auto full = _environment.aboutFrequent
+ kLineBreak + kLineBreak
+ kLineBreak + kLineBreak
+ JoinList(kLineBreak, list); + JoinList(kLineBreak, list);
@ -701,7 +704,7 @@ Result TextWriter::writeSessions(const Data::SessionsList &data) {
{ "Created", Data::FormatDateTime(session.created) }, { "Created", Data::FormatDateTime(session.created) },
})); }));
} }
const auto full = Data::AboutSessions() const auto full = _environment.aboutSessions
+ kLineBreak + kLineBreak
+ kLineBreak + kLineBreak
+ JoinList(kLineBreak, list); + JoinList(kLineBreak, list);
@ -749,7 +752,7 @@ Result TextWriter::writeWebSessions(const Data::SessionsList &data) {
{ "Created", Data::FormatDateTime(session.created) }, { "Created", Data::FormatDateTime(session.created) },
})); }));
} }
const auto full = Data::AboutWebSessions() const auto full = _environment.aboutWebSessions
+ kLineBreak + kLineBreak
+ kLineBreak + kLineBreak
+ JoinList(kLineBreak, list); + JoinList(kLineBreak, list);
@ -777,7 +780,7 @@ Result TextWriter::writeDialogsStart(const Data::DialogsInfo &data) {
return writeChatsStart( return writeChatsStart(
data, data,
"Chats", "Chats",
Data::AboutChats(), _environment.aboutChats,
"lists/chats.txt"); "lists/chats.txt");
} }
@ -801,7 +804,7 @@ Result TextWriter::writeLeftChannelsStart(const Data::DialogsInfo &data) {
return writeChatsStart( return writeChatsStart(
data, data,
"Left chats", "Left chats",
Data::AboutLeftChats(), _environment.aboutLeftChats,
"lists/left_chats.txt"); "lists/left_chats.txt");
} }
@ -873,7 +876,7 @@ Result TextWriter::writeChatSlice(const Data::MessagesSlice &data) {
list.push_back(SerializeMessage( list.push_back(SerializeMessage(
message, message,
data.peers, data.peers,
_settings.internalLinksDomain)); _environment.internalLinksDomain));
} }
const auto full = _chat->empty() const auto full = _chat->empty()
? JoinList(kLineBreak, list) ? JoinList(kLineBreak, list)

View File

@ -21,7 +21,10 @@ public:
return Format::Text; return Format::Text;
} }
Result start(const Settings &settings, Stats *stats) override; Result start(
const Settings &settings,
const Environment &environment,
Stats *stats) override;
Result writePersonal(const Data::PersonalInfo &data) override; Result writePersonal(const Data::PersonalInfo &data) override;
@ -73,6 +76,7 @@ private:
Result writeChatsEnd(); Result writeChatsEnd();
Settings _settings; Settings _settings;
Environment _environment;
Stats *_stats = nullptr; Stats *_stats = nullptr;
std::unique_ptr<File> _summary; std::unique_ptr<File> _summary;

View File

@ -83,6 +83,22 @@ void SuggestBox::prepare() {
boxClosing() | rpl::start_with_next(clear, lifetime()); boxClosing() | rpl::start_with_next(clear, lifetime());
} }
Environment PrepareEnvironment() {
auto result = Environment();
const auto utfLang = [](LangKey key) {
return lang(key).toUtf8();
};
result.internalLinksDomain = Global::InternalLinksDomain();
result.aboutTelegram = utfLang(lng_export_about_telegram);
result.aboutContacts = utfLang(lng_export_about_contacts);
result.aboutFrequent = utfLang(lng_export_about_frequent);
result.aboutSessions = utfLang(lng_export_about_sessions);
result.aboutWebSessions = utfLang(lng_export_about_web_sessions);
result.aboutChats = utfLang(lng_export_about_chats);
result.aboutLeftChats = utfLang(lng_export_about_left_chats);
return result;
}
} // namespace } // namespace
void SuggestStart() { void SuggestStart() {
@ -104,7 +120,6 @@ PanelController::PanelController(not_null<ControllerWrap*> process)
if (_settings->path.isEmpty()) { if (_settings->path.isEmpty()) {
_settings->path = psDownloadPath(); _settings->path = psDownloadPath();
} }
_settings->internalLinksDomain = Global::InternalLinksDomain();
_process->state( _process->state(
) | rpl::start_with_next([=](State &&state) { ) | rpl::start_with_next([=](State &&state) {
@ -137,7 +152,7 @@ void PanelController::showSettings() {
settings->startClicks( settings->startClicks(
) | rpl::start_with_next([=]() { ) | rpl::start_with_next([=]() {
showProgress(); showProgress();
_process->startExport(*_settings); _process->startExport(*_settings, PrepareEnvironment());
}, settings->lifetime()); }, settings->lifetime());
settings->cancelClicks( settings->cancelClicks(

View File

@ -56,7 +56,6 @@
'<(src_loc)/export/export_controller.h', '<(src_loc)/export/export_controller.h',
'<(src_loc)/export/export_settings.cpp', '<(src_loc)/export/export_settings.cpp',
'<(src_loc)/export/export_settings.h', '<(src_loc)/export/export_settings.h',
'<(src_loc)/export/data/export_data_about.h',
'<(src_loc)/export/data/export_data_types.cpp', '<(src_loc)/export/data/export_data_types.cpp',
'<(src_loc)/export/data/export_data_types.h', '<(src_loc)/export/data/export_data_types.h',
'<(src_loc)/export/output/export_output_abstract.cpp', '<(src_loc)/export/output/export_output_abstract.cpp',