Skip to content

Commit

Permalink
Export chat messages text.
Browse files Browse the repository at this point in the history
  • Loading branch information
john-preston committed Jun 13, 2018
1 parent 35ffc03 commit 2b36dd6
Show file tree
Hide file tree
Showing 10 changed files with 418 additions and 72 deletions.
62 changes: 48 additions & 14 deletions Telegram/SourceFiles/export/data/export_data_types.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,19 @@ Utf8String ParseString(const MTPstring &data) {
return data.v;
}

Utf8String FillLeft(const Utf8String &data, int length, char filler) {
if (length <= data.size()) {
return data;
}
auto result = Utf8String();
result.reserve(length);
for (auto i = 0, count = length - data.size(); i != count; ++i) {
result.append(filler);
}
result.append(data);
return result;
}

FileLocation ParseLocation(const MTPFileLocation &data) {
return data.visit([](const MTPDfileLocation &data) {
return FileLocation{
Expand Down Expand Up @@ -158,14 +171,13 @@ User ParseUser(const MTPUser &data) {
if (data.has_username()) {
result.username = ParseString(data.vusername);
}
if (data.has_access_hash()) {
result.input = MTP_inputUser(data.vid, data.vaccess_hash);
} else {
result.input = MTP_inputUserEmpty();
}
const auto access_hash = data.has_access_hash()
? data.vaccess_hash
: MTP_long(0);
result.input = MTP_inputUser(data.vid, access_hash);
}, [&](const MTPDuserEmpty &data) {
result.id = data.vid.v;
result.input = MTP_inputUserEmpty();
result.input = MTP_inputUser(data.vid, MTP_long(0));
});
return result;
}
Expand Down Expand Up @@ -240,7 +252,13 @@ PeerId Peer::id() const {

Utf8String Peer::name() const {
if (const auto user = this->user()) {
return user->firstName + ' ' + user->lastName;
return user->firstName.isEmpty()
? (user->lastName.isEmpty()
? Utf8String()
: user->lastName)
: (user->lastName.isEmpty()
? user->firstName
: user->firstName + ' ' + user->lastName);
} else if (const auto chat = this->chat()) {
return chat->title;
}
Expand Down Expand Up @@ -280,6 +298,7 @@ Message ParseMessage(const MTPMessage &data) {
data.visit([&](const MTPDmessage &data) {
result.id = data.vid.v;
result.date = data.vdate.v;
result.text = ParseString(data.vmessage);
}, [&](const MTPDmessageService &data) {
result.id = data.vid.v;
result.date = data.vdate.v;
Expand Down Expand Up @@ -376,12 +395,12 @@ SessionsList ParseSessionsList(const MTPaccount_Authorizations &data) {
return result;
}

void AppendParsedDialogs(DialogsInfo &to, const MTPmessages_Dialogs &data) {
// const auto process = [&](const MTPDmessages_dialogs &data) {
const auto process = [&](const auto &data) {
DialogsInfo ParseDialogsInfo(const MTPmessages_Dialogs &data) {
auto result = DialogsInfo();
data.visit([&](const auto &data) { // MTPDmessages_dialogs &data) {
const auto peers = ParsePeersLists(data.vusers, data.vchats);
const auto messages = ParseMessagesList(data.vmessages);
to.list.reserve(to.list.size() + data.vdialogs.v.size());
result.list.reserve(result.list.size() + data.vdialogs.v.size());
for (const auto &dialog : data.vdialogs.v) {
if (dialog.type() != mtpc_dialog) {
continue;
Expand Down Expand Up @@ -409,10 +428,25 @@ void AppendParsedDialogs(DialogsInfo &to, const MTPmessages_Dialogs &data) {
const auto &message = messageIt->second;
info.topMessageDate = message.date;
}
to.list.push_back(std::move(info));
result.list.push_back(std::move(info));
}
};
data.visit(process);
});
return result;
}

MessagesSlice ParseMessagesSlice(
const MTPVector<MTPMessage> &data,
const MTPVector<MTPUser> &users,
const MTPVector<MTPChat> &chats) {
const auto &list = data.v;
auto result = MessagesSlice();
result.list.reserve(list.size());
for (const auto &message : list) {
result.list.push_back(ParseMessage(message));
}
ranges::reverse(result.list);
result.peers = ParsePeersLists(users, chats);
return result;
}

Utf8String FormatPhoneNumber(const Utf8String &phoneNumber) {
Expand Down
20 changes: 17 additions & 3 deletions Telegram/SourceFiles/export/data/export_data_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,16 @@ int32 BarePeerId(PeerId peerId);

Utf8String ParseString(const MTPstring &data);

Utf8String FillLeft(const Utf8String &data, int length, char filler);

template <typename Type>
inline auto NumberToString(Type value)
inline auto NumberToString(Type value, int length = 0, char filler = '0')
-> std::enable_if_t<std::is_arithmetic_v<Type>, Utf8String> {
const auto result = std::to_string(value);
return QByteArray(result.data(), int(result.size()));
return FillLeft(
Utf8String(result.data(), int(result.size())),
length,
filler);
}

struct UserpicsInfo {
Expand Down Expand Up @@ -147,6 +152,9 @@ struct Message {
int32 id = 0;
TimeId date = 0;

Utf8String text;
File mediaFile;

};

Message ParseMessage(const MTPMessage &data);
Expand All @@ -173,12 +181,18 @@ struct DialogsInfo {
std::vector<DialogInfo> list;
};

void AppendParsedDialogs(DialogsInfo &to, const MTPmessages_Dialogs &data);
DialogsInfo ParseDialogsInfo(const MTPmessages_Dialogs &data);

struct MessagesSlice {
std::vector<Message> list;
std::map<PeerId, Peer> peers;
};

MessagesSlice ParseMessagesSlice(
const MTPVector<MTPMessage> &data,
const MTPVector<MTPUser> &users,
const MTPVector<MTPChat> &chats);

Utf8String FormatPhoneNumber(const Utf8String &phoneNumber);

Utf8String FormatDateTime(
Expand Down
Loading

0 comments on commit 2b36dd6

Please sign in to comment.