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_text" = "You can now download the data you requested. Start exporting data?";
"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

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();
// Processing step.
void startExport(const Settings &settings);
void startExport(
const Settings &settings,
const Environment &environment);
void cancelExportFast();
private:
@ -51,6 +53,7 @@ private:
void fillSubstepsInSteps(const ApiWrap::StartInfo &info);
void exportNext();
void initialize();
void initialized(const ApiWrap::StartInfo &info);
void collectLeftChannels();
void collectDialogsList();
void exportPersonalInfo();
@ -92,6 +95,7 @@ private:
ApiWrap _api;
Settings _settings;
Environment _environment;
Data::DialogsInfo _leftChannelsInfo;
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()) {
return;
}
_settings = base::duplicate(settings);
_environment = environment;
_settings.path = Output::NormalizePath(_settings.path);
_writer = Output::CreateWriter(_settings.format);
@ -339,14 +346,18 @@ void Controller::exportNext() {
void Controller::initialize() {
setState(stateInitializing());
_api.startExport(_settings, &_stats, [=](ApiWrap::StartInfo info) {
if (ioCatchError(_writer->start(_settings, &_stats))) {
return;
}
fillSubstepsInSteps(info);
exportNext();
initialized(info);
});
}
void Controller::initialized(const ApiWrap::StartInfo &info) {
if (ioCatchError(_writer->start(_settings, _environment, &_stats))) {
return;
}
fillSubstepsInSteps(info);
exportNext();
}
void Controller::collectLeftChannels() {
setState(stateLeftChannelsList(0));
_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));
_wrapped.with([=](Controller &controller) {
controller.startExport(settings);
controller.startExport(settings, environment);
});
}
@ -727,6 +740,8 @@ rpl::lifetime &ControllerWrap::lifetime() {
return _lifetime;
}
ControllerWrap::~ControllerWrap() = default;
ControllerWrap::~ControllerWrap() {
LOG(("Export Info: Controller destroyed."));
}
} // namespace Export

View File

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

View File

@ -70,7 +70,6 @@ struct Settings {
friend inline constexpr auto is_flag_type(Type) { return true; };
QString path;
QString internalLinksDomain;
Output::Format format = Output::Format();
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

View File

@ -59,11 +59,20 @@ std::unique_ptr<AbstractWriter> CreateWriter(Format format) {
Stats AbstractWriter::produceTestExample(const QString &path) {
auto result = Stats();
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();
settings.format = format();
settings.path = (folder.endsWith('/') ? folder : (folder + '/'))
+ "ExportExample/";
settings.internalLinksDomain = "https://t.me/";
settings.types = Settings::Type::AllMask;
settings.fullChats = Settings::Type::AllMask
& ~(Settings::Type::PublicChannels | Settings::Type::PublicGroups);
@ -74,7 +83,7 @@ Stats AbstractWriter::produceTestExample(const QString &path) {
Assert(result.isSuccess());
};
check(start(settings, &result));
check(start(settings, environment, &result));
const auto counter = [&] {
static auto GlobalCounter = 0;

View File

@ -23,6 +23,7 @@ struct File;
} // namespace Data
struct Settings;
struct Environment;
namespace Output {
@ -44,6 +45,7 @@ public:
[[nodiscard]] virtual Result start(
const Settings &settings,
const Environment &environment,
Stats *stats) = 0;
[[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/data/export_data_types.h"
#include "export/data/export_data_about.h"
#include "core/utils.h"
#include <QtCore/QFile>
@ -681,10 +680,14 @@ HtmlWriter::Wrap::~Wrap() {
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('/'));
_settings = base::duplicate(settings);
_environment = environment;
_stats = stats;
_summary = fileWithRelativePath(mainFileRelativePath());
@ -699,7 +702,7 @@ Result HtmlWriter::start(const Settings &settings, Stats *stats) {
return result;
}
return _summary->writeBlock(
MakeLinks(SerializeString(Data::AboutTelegram()))
MakeLinks(SerializeString(_environment.aboutTelegram))
+ 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
+ JoinList(kLineBreak, list);
@ -922,7 +925,7 @@ Result HtmlWriter::writeFrequentContacts(const Data::ContactsList &data) {
writeList(data.correspondents, "People");
writeList(data.inlineBots, "Inline bots");
writeList(data.phoneCalls, "Calls");
const auto full = MakeLinks(SerializeString(Data::AboutFrequent()))
const auto full = MakeLinks(SerializeString(_environment.aboutFrequent))
+ kLineBreak
+ kLineBreak
+ JoinList(kLineBreak, list);
@ -988,7 +991,7 @@ Result HtmlWriter::writeSessions(const Data::SessionsList &data) {
{ "Created", Data::FormatDateTime(session.created) },
}));
}
const auto full = MakeLinks(SerializeString(Data::AboutSessions()))
const auto full = MakeLinks(SerializeString(_environment.aboutSessions))
+ kLineBreak
+ kLineBreak
+ 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
+ JoinList(kLineBreak, list);
@ -1080,7 +1084,7 @@ Result HtmlWriter::writeDialogsStart(const Data::DialogsInfo &data) {
return writeChatsStart(
data,
"Chats",
Data::AboutChats(),
_environment.aboutChats,
"lists/chats.html");
}
@ -1104,7 +1108,7 @@ Result HtmlWriter::writeLeftChannelsStart(const Data::DialogsInfo &data) {
return writeChatsStart(
data,
"Left chats",
Data::AboutLeftChats(),
_environment.aboutLeftChats,
"lists/left_chats.html");
}
@ -1178,7 +1182,7 @@ Result HtmlWriter::writeChatSlice(const Data::MessagesSlice &data) {
[&](QString path) { return _chat->relativePath(path); },
message,
data.peers,
_settings.internalLinksDomain));
_environment.internalLinksDomain));
}
const auto full = _chat->empty()
? JoinList(kLineBreak, list)

View File

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

View File

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

View File

@ -21,7 +21,10 @@ public:
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;
@ -73,6 +76,7 @@ private:
Result writeChatsEnd();
Settings _settings;
Environment _environment;
Stats *_stats = nullptr;
std::unique_ptr<File> _summary;

View File

@ -83,6 +83,22 @@ void SuggestBox::prepare() {
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
void SuggestStart() {
@ -104,7 +120,6 @@ PanelController::PanelController(not_null<ControllerWrap*> process)
if (_settings->path.isEmpty()) {
_settings->path = psDownloadPath();
}
_settings->internalLinksDomain = Global::InternalLinksDomain();
_process->state(
) | rpl::start_with_next([=](State &&state) {
@ -137,7 +152,7 @@ void PanelController::showSettings() {
settings->startClicks(
) | rpl::start_with_next([=]() {
showProgress();
_process->startExport(*_settings);
_process->startExport(*_settings, PrepareEnvironment());
}, settings->lifetime());
settings->cancelClicks(

View File

@ -56,7 +56,6 @@
'<(src_loc)/export/export_controller.h',
'<(src_loc)/export/export_settings.cpp',
'<(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.h',
'<(src_loc)/export/output/export_output_abstract.cpp',